Hier ist mein Arbeitsablauf, um Zugriffstoken und Aktualisierungstoken für youtube api zu erhalten. Im Erzeugungsberechtigungs URL mit ParameternYoutube oAuth ruft das Autorisierungsfenster jedes Mal auf, wenn ich eine Anfrage erstelle
access_type = offline, response_type = code, redirect_uri = uri, scope = Scopes, state = Zustand, client_id ID =
von Berechtigungs URL Ich bin Authentifizierungscode Empfangs , dann bekommen eine andere uRL zu erzeugen bin ich zu access_token und
Code mit diesen Parametern mithilfe von Code aus Genehmigung url refresh_token: code, client_id: cLIENT_ID, client_secret: cLIENT_SECRET, redirect_uri: serviceCallback, Zustand: state.callback, grant_typ e: "authorization_code"
Soweit ich weiß, sollte der Benutzer diesen Vorgang nur einmal ausführen und dann sollte es automatisch sein. Mein Problem ist, dass ich immer die Autorisierung abschließen muss und ich bekomme immer neues access_token und refresh_token, ohne es auf Anfrage zu erzwingen.
hier ist der Code Teil, wo ich bin Authentifizierungs-URL
getAuthUrl: function(scopes, applicationCallback, serviceCallback, siteId,
selectChannel, websiteUrl) {
var requestedClientId = CLIENT_ID;
var scopess =
"https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/userinfo.email " +
scopes.replace(",", " ");
return "https://accounts.google.com/o/oauth2/auth?" +
"access_type=offline" +
"&response_type=code" +
/*"&approval_prompt=auto" +*/
"&redirect_uri=" + serviceCallback +
"&scope=" + scopes +
"&state=" + JSON.stringify({
service: NAME,
callback: applicationCallback,
scopes: scopes,
siteId: siteId,
selectChannel: selectChannel,
websiteUrl: websiteUrl
}) +
"&client_id=" + requestedClientId;
},
Von dort Im bekommen Code immer wieder und die Verwendung dieser Code, clientID und clientSecret Zugriffstoken und Aktualisierungs-Token
getAuthTokens: function(code, state, res, serviceCallback) {
// Google oAuth endpoint
var endpoint = "https://www.googleapis.com/oauth2/v4/token";
const scopes = state.scopes.split(" ");
// Setup request data
var data = {
code: code,
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
redirect_uri: serviceCallback,
state: state.callback,
grant_type: "authorization_code"
};
request.post(endpoint).send(data).type('form').set('Accept',
'application/json').end(function(err, oAuthResponse) {});
},
zu erhalten Ich verwendete falsche Endpunkt-URL Ich änderte es zu einem anderen von der Youtube API-Dokumentation zur Verfügung gestellt und entfernt Zustandsparameter aus Daten Variable, aber immer noch nicht das Problem beheben
url 210neuen Endpunkt
var endpoint = "https://accounts.google.com/o/oauth2/token";
ich bin wirklich verwirrt jetzt, weil ich bin nicht genehmigungs zwingen und auf Google-Apps-Sektion gibt es meine App bereits zugelassen und es keine Berechtigung aktualisieren, bedeutet es die Erlaubnis gibt nur erste Zeit und danach, wenn ich drücke, erlaube es nichts. OAuth sollte überprüfen, ob ich ein Refresh-Token habe oder nicht, daher ist meine Schlussfolgerung, dass ich nicht vollständig verstehe, wie es funktionieren sollte oder ob ich irgendwie alles im Debug- oder Testmodus teste, wo die Autorisierungsaufforderung automatisch erzwungen wird.
Ich wäre wirklich dankbar für jede Art von Hilfe, weil ich das Gefühl habe, dass ich alles versucht habe.
müssen Sie Ihren Code selbst veröffentlichen. Sie sollten die Benutzerauthentifizierung nur einmal in Ihrem Code anfordern. Sobald Sie ein Aktualisierungstoken haben, können Sie es verwenden, wenn Sie ein neues Zugriffstoken anfordern möchten. Ihr Problem hat wahrscheinlich damit zu tun, dass Sie jederzeit den Zugriff des Benutzers anfordern, wenn Sie dies nicht benötigen. – DaImTo