Momentan arbeite ich am Projekt rails 4, und jetzt muss ich eine andere Anwendung verbinden / verbinden (nicht sso, aber für den Zugriff auf APIs) sagen example.com . ( Hinweis: example.com verwendet eine 3-legged oauth Sicherheitsarchitektur)
Nach der Suche festgestellt, dass ich Omniouth Strategie implementieren muss.
Dafür habe ich den Strategie-Beitrags-Guide kann ich die Setup- und Anfrage-Phase abschließen, die Sie finden können mein Beispielcode hier.
%Vor%Ende
Ich kann auf example.com umleiten, auch nach der Anmeldung kann ich zu meiner callback_phase zurückkehren (Sie werden fragen, woher Sie das wissen, also antworte ich) habe binding.pry
in callback_phase Methode hinzugefügt, um den Fluss zu überprüfen.
Aber nach dem Ausführen der Strategie bekomme ich folgenden Fehler
ERROR - omniauth: (my_app_strategie) Authentifizierungsfehler! invalid_credentials: OAuth2 :: Fehler.
Nach dem Debugging wurde festgestellt, dass ich diesen Fehler für den Aufruf super
(von der Methode callback_phase) erhalte.
Zuerst kann es sein, dass es einige Anmeldeinformationen gibt, aber ich kann Zugriffstoken mithilfe von following abrufen (was vor dem super
-Aufruf ausgeführt wird)
Auch für weitere Informationen bekomme ich Fehler für build_access_token
, was die oauth2-Methode ist
Sie können sich auf diesen Link für weitere Informationen beziehen ( Suchen Sie einfach auf der Seite nach build_access_token .
BEARBEITEN - 1
Nach dem Debugging wurde festgestellt, dass dieses Problem von der Anfrage-Methode behoben wurde. (Während der Faraday Anfrage). Hier ist das Code-Snippet
%Vor%Hier ist meine Faraday Anfrage
%Vor%Als Antwort bekomme ich folgende Fehlermeldung
HTTP-Status 400 - Unzureichende OAuth-Benutzeranmeldeinformationen.
Kann jemand helfen, dieses Problem zu beheben?
Gibt es eine andere Möglichkeit, das Zugriffs-Token zu speichern, damit ich es zur Kommunikation nutzen kann? Danke
Zuerst möchte ich klarstellen, wie Oauth2 funktioniert:
Oauth2, das Protokoll sagt:
Sie leiten den Benutzer an den Provider-Anmelden-Endpunkt um, indem Sie einige erforderliche Parameter hinzufügen (Ejm: PROVIDER / public / oauth? redirect_uri = MYWEB / oauthDemo & amp; Antworttyp = Code & amp; Client_ID = ABCDE). Manchmal gibt es auch einen scope / permission / resource-Parameter, der anzeigt, wofür Sie Ihren Zweck haben.
- & gt; Dann melden sich die Benutzer an und werden mit einem Code
zu Ihrem Endpunkt MYWEB / public / oauth weitergeleitetNun müssen Sie das Zugriffstoken anfordern, das einen POST für den Endpunkt des Providers durchführt. Beispiel:
POSTANBIETER? code = d5Q3HC7EGNH36SE3N & amp; client_id = d4HQNPFIXFD255H & amp; client_secret = 1a98b7cb92407cbd8961cd8db778de53 & amp; redirect_uri = Ссылка Gewährungsart = Autorisierungscode
Jetzt haben Sie das access_token und Sie können es verwenden, um Informationen zu erhalten oder es mit JWT zu dekodieren.
Wenn Sie dies klar sehen und sehen, dass Ihr Aufruf korrekt erscheint:
%Vor%Da die Antwort "HTTP-Status 400 - Unzureichende OAuth-Benutzeranmeldeinformationen" ist, denke ich Sie vielleicht:
a. Ihr Client ist auf dem Provider nicht gut konfiguriert. Normalerweise verwenden Sie eine Grundkonfiguration auf der Providerseite, damit er Sie erkennen kann. Also ist vielleicht nicht gut konfiguriert.
b. Es ist ein Ressourcen / Erlaubnis / Bereich-Parameter fehlt oder falsch im ersten Schritt konfiguriert (in der Umleitung an den Anbieter). Also, wenn Sie nach dem Token fragen, gibt es ein Problem.
Tags und Links ruby ruby-on-rails oauth faraday