2017-02-09 7 views
1

Ich versuche, eine Google OAUTH 2.0-Anmeldung zu implementieren, ohne Bibliotheken in meiner Node.js-Anwendung zu verwenden.Wie man sich mit Google anmeldet?

Ich habe eine App auf der Google API-Konsole mit der Weiterleitungs-URL als http://localhost:3000 erstellt. Während der Anmeldung ist mein response_typecode, der einen einmaligen Verwendungscode zurückgibt, der mit dem token_endpoint wie beschrieben here ausgetauscht werden muss. Der Austausch erfolgt auf meinem node.js Server mit dem folgenden Snippet.

axios({ 
 
    url: 'https://www.googleapis.com/oauth2/v4/token', 
 
    method: 'post', 
 
    data: { 
 
     code: code, 
 
     client_id: sso.clientId, 
 
     client_secret: sso.clientSecret, 
 
     redirect_uri: sso.redirect_uri, 
 
     grant_type: 'authorization_code', 
 
    } 
 
    }) 
 
    .then((response) => { 
 
    console.log(response.data); 
 
    }) 
 
    .catch(function(err) { 
 
    console.log(err.response.data); 
 
    });
Aber das ist mir zu senden

{ 
    "error": "unsupported_grant_type", 
    "error_description": "Invalid grant_type: " 
} 

anstelle des Benutzertoken eine Fehlerantwort von zurück.

Bitte helfen Sie mir, das Problem zu identifizieren.

Ich habe versucht, eine POSTMAN Abfrage auch mit der gleichen Nutzlast in der raw mit Content-Typ auf application/json festgelegt, und es gab mir den gleichen Fehler.

+0

können Sie bestätigen, dass andere Felder in der POST-Anforderung wie die 'client_id, client_secret, redirect_uri' sind richtig? –

+0

Ja. Die gleichen Credits funktionieren, wenn ich mich anmelde, um den 'Code' zu ​​erhalten. – jagzviruz

Antwort

-1

Sie benötigen params anstelle Ihres data zu verwenden, während die Austausch Anruf durch axios zur Verfügung gestellt werden überarbeitet Block wie

sein
params: { 
    code: code, 
    client_id: sso.clientId, 
    client_secret: sso.clientSecret, 
    redirect_uri: sso.redirect_uri, 
    grant_type: 'authorization_code', 
} 

hoffe, das hilft!

+0

Das hat funktioniert !! Danke vielmals. Die Google Docs sagte 'Die Anfrage muss die folgenden Parameter in den POST-Körper enthalten:', daher habe ich die 'Daten' .. – jagzviruz

+0

Froh, dass es funktioniert! :-) –

+0

Downvoter .. Bitte Grund angeben? –

0

NIE Dinge wie eine clientSecret in GET-Parameter enthalten. Dies kann zu ernsthaften Sicherheitsproblemen führen!

Das Google Doc ist sehr klar über wie senden die data;

Als POST Körper - wie immer in OAuth2: https://developers.google.com/identity/protocols/OAuth2WebServer - Schritt 5, Probe REST Code

Sie müssen als String gesendet werden, aber im Körper POST/data:

Der String ist urlencoded Parameter wie

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& 
client_id=your_client_id& 
client_secret=your_client_secret& 
redirect_uri=https://yourOauth2redirectUrl.example.com/code& 
grant_type=authorization_code 
+0

Ist dies ein Problem, auch wenn mein Code auf dem Server und nicht im Browser ausgeführt wird? – jagzviruz

+0

Es hängt dann von Ihrem Server ab. TLS (SSL) ist die einzige Sicherheitsschicht. Wenn bei SSL etwas nicht stimmt (z. B. wenn Sie vergessen haben, ein Zertifikat zu erneuern), liegt ein Problem vor. Es gibt 3 wichtige Dinge für die OAuth-Sicherheit: • Genau der Spezifikation folgen • TLS korrekt verwenden • Den State-Parameter verwenden - BTW: Ich habe indieauth-node geschrieben, der am Wochenende hier veröffentlicht wird: https://github.com/redaktor/ - Es enthält auch OAuth1 und OAuth2 Module (perfekt mit Google zusammenarbeiten) ... Fühlen Sie sich frei, weitere Fragen hier zu stellen ... – sebilasse

Verwandte Themen