6

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 210

neuen 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.

+0

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

Antwort

5
mit dem refresh token

die Ausgabe ist, dass die access token, die Sie verwenden, bevor die nächste Zeit abgelaufen ist Sie verwenden, wie Sie haben die access token manuell nicht aktualisiert.

Sie müssen die refresh token verwenden, um die access token zu aktualisieren, wenn [(die Zeit, zu der Sie das Zugriffstoken zuletzt aktualisiert haben] + (die Ablaufzeit)] bereits überschritten wurde.

Das Konzept der Refresh-Token ist, dass wenn ein Zugriffstoken gefährdet ist, wie es von kurzer Dauer ist, dass der Angreifer eine begrenzte Zeitdauer hat, in dem sie verwendet werden können. Refresh-Token, wenn kompromittiert, sind nutzlos, da der Angreifer die Client-ID und Clientgeheimnis zusätzlich zu dem Aktualisierungstoken benötigt, um ein Zugriffstoken zu erhalten.

Die Dokumentation YouTube API demonstriert die Prozedur here

Standardmäßig ist die Ablaufzeit ca. 3 Sekunden.

Dies wird sicherlich in Ihrem Fall funktionieren.

-1

Gehen Sie auf die meine Konten-Einstellungen von Google für dieses Konto ---> zu den angeschlossenen Anwendungen und Websites gehen ----> Anwendungen verwalten: Dort können Sie die Berechtigungen für youtube wie diese: enter image description here

+0

Dies versucht nicht mal im Entferntesten, die Frage zu beantworten. – DaImTo

+0

Nun, es könnte, da dies der Ort, wo alle Berechtigungen für Google Apps oder Anwendungen von Drittanbietern vorhanden sind. Wenn die Berechtigung hier nicht vorhanden ist, muss sie hinzugefügt werden, damit sie nicht immer wieder nach einer Erlaubnis fragt. – Anik

+0

Es fügt alle Berechtigungen hinzu, die ich brauche, und es verschwindet nicht von dort – kosas

Verwandte Themen