Wie kann ich OAuth-Aktualisierungstoken mit Laravel verwalten?

8

Das Plugin "Socialiate" stellt eine Implementierung für OAuth in Laravel bereit, aber es scheint hauptsächlich darauf ausgerichtet zu sein, dass es kein Benutzerkonto auf Ihrer eigenen Website erstellen muss.

Ich mache eine Anwendung, die hilft, ihr Youtube-Konto zu verwalten, was bedeutet, dass der Umfang der Auth-Anfrage breiter ist (was leicht zu ändern war), aber ich brauche auch ein Refresh-Token (im Gegensatz zu einem Zugangstoken) für den langfristigen Zugriff auf ihre Rechnung.

Gibt es ein Paket für Laravel, das das schon erledigt? Ich konnte keinen finden, aber vielleicht suche ich nach dem Falschen.

Wenn nicht, wie soll ich das angehen? Wenn ich meinen Code schreibe, der mit der API von Youtube interagiert, muss ich einfach überprüfen, ob das Zugriffstoken abgelaufen ist, und wenn ja, schreibe eine Funktion, die eine HTTP-Anfrage ausführt, um eine neue mit dem Aktualisierungs-Token zu erhalten Datenbank? Und ich denke, auch Socialite erweitern, um ein Refresh-Token abzurufen?

Ich habe das Gefühl, dass es einen besseren Weg geben muss, an dem ich das Rad nicht neu erfinde.

    
user5431713 29.11.2015, 20:59
quelle

2 Antworten

14

Es ist eine Weile her, dass diese Frage zuletzt besucht wurde, und da es sich um das erste Google-Ergebnis handelt, möchte ich Folgendes sagen: Dies ist jetzt mit Socialite möglich.

Wenn Sie Ihre Nutzer zu Google umleiten, setzen Sie access_type auf offline mit der Methode with() , wenn Sie wie folgt umleiten:

%Vor%

Dadurch wird Google ein Aktualisierungstoken zurückgeben.

    
tyteen4a03 23.08.2016 07:09
quelle
2

Dies ist schwierig zu finden, zum Teil wegen des OAuth2-Server-Pakets für Laravel, um eine eigene OAuth-Lösung bereitzustellen, die die meisten Suchergebnisse enthält.

Ich denke, die beste Antwort wird sein, Ihren eigenen YoutubeProvider für Socialite zu schreiben. Hier ist ein Tutorial: Ссылка

Es wird mühsam sein, Socialite zu ändern, um mit Refresh-Tokens zu arbeiten, daher denke ich, dass der beste Weg für den YoutubeProvider sein wird, einen zusätzlichen Aufruf einer neuen getRefreshToken-Funktion am Ende der bestehenden getAccessToken-Funktion zu erhalten. Ändern Sie sowohl die Zugriffs- als auch die Aktualisierungstoken, um das abgerufene Token in der Datenbank zu speichern, da Sie von Socialite nicht auf das Aktualisierungstoken zugreifen können, um es in einer Helper / Controller-Klasse zu speichern.

Erstellen Sie ein Token-Modell und eine Datenbanktabelle und speichern Sie dort sowohl Zugriffs- als auch Aktualisierungstoken mit einer Beziehung zu einem Benutzermodell.

Wenn Sie Ihren YoutubeService-Helper schreiben, muss er einen API-Aufruf mit einem Zugriffstoken versuchen und wissen, dass er mit dem Aktualisierungstoken aktualisiert werden muss, wenn er die Fehlermeldung erhält, dass er abgelaufen / ungültig ist.

Die API-Bibliothek von Google für Google scheint dies automatisch mit $client->setAccessType("offline") : Ссылка zu handhaben

Aber sobald Sie für etwas anderes als Google Refresh-Token benötigen, schreiben Sie diesen Code trotzdem, wenn der neue Provider keine Bibliothek besitzt. Auf der anderen Seite hat diese Bibliothek einen Service speziell für Youtube, also sollte sie alle API-Aufrufe an Youtube verarbeiten, die Sie benötigen. Ich bin mir nicht ganz sicher, wie die Verwendung dieser Bibliothek mit Socialite zusammenhängt, da Socialite bereits eine Menge von dem tut, was diese Bibliothek tut. Es kann passieren, dass Sie in Ihrer YoutubeService-Klasse eine Art redundante Autorisierung durchführen, es sei denn, Sie möchten wirklich mit der Anpassung von Dingen beginnen.

Es könnte sich lohnen, Socialite vollständig aus der Gleichung zu entfernen und die Google-Bibliothek zu verwenden, wenn es um ihre Dienste geht.

    
Brynn Bateman 02.12.2015 01:08
quelle