Getting "Authentifizierungsfehler! invalid_credentials: OAuth2 :: Error "für benutzerdefinierte Omniauth-Strategie

9

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)

%Vor%

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

    
I-am-simple-user 20.05.2016, 09:13
quelle

1 Antwort

2

Zuerst möchte ich klarstellen, wie Oauth2 funktioniert:

Oauth2, das Protokoll sagt:

  1. 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 weitergeleitet
  2. Nun 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

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

    
María Valero 05.06.2016, 14:34
quelle

Tags und Links