2017-12-30 44 views
0

Ich habe eine API mit RS256 Signieralgorithmus und http://localhost:3000/api/v1 als Identifier (Publikum) erstellt und ich fügte openid, Telefon, Profil wie die Bereiche der erstellten APIAuth0 richtigen Weg zu rufen Userinfo

Dann eine Anwendung erstellt Rufen Sie die obige API auf, indem Sie RS256 signieren und OIDC Conformant deaktivieren, da ich eine angepasste Anmeldeseite verwende.

konnte ich folgendes genehmigen Antrag erfolgreich aufzurufen:

https://hostname.auth0.com/authorize?client_id=CLIENT_ID&redirect_uri=http://localhost:4200/dashboard&response_type=code&scope=openid%20profile&state=state&nonce=nonce&audience=https://hostname.auth0.com/userinfo 

Nachdem wir den Code ich in der Lage war, den Token-Aufruf auszuführen und erhielt die access_token

curl --request POST \ --url https://hostname.auth0.com/oauth/token \ --header 'content-type: application/json' \ --data '{"client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET","audience":"localhost:3000/api/v1","grant_type":"client_credentials","code": "CODE"}' 

Aber nach der JWT Decodierung Token Ich konnte den Userinfo-Endpunkt im Zielgruppenfeld

nicht sehen

So bekomme ich nicht autorisierten Fehler bei der Ausführung der folgenden Benutzerinfo Anruf, aber ich war kann meine andere API (gesicherte Ressourcen) mit dem angegebenen Zugriffstoken ohne Probleme aufrufen.

curl --request GET \ 
--url 'https://hostname.auth0.com/userinfo' \ 
--header 'authorization: Bearer {ACCESS_TOKEN}' \ 
--header 'content-type: application/json' 

Unerlaubte

-Dann habe ich versucht, den Token-Endpunkt unter Verwendung von Userinfo-URL als Publikum Wert aufzurufen:

curl --request POST \ 
--url https://hostname.auth0.com/oauth/token \ 
--header 'content-type: application/json' \ 
--data '{"client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET","audience":"https://hostname.auth0.com/userinfo","grant_type":"client_credentials","code": "CODE"}' 

Dann wird folgende Fehler Ich erhalte:

{"error":"access_denied","error_description":"Client is not authorized to access \"https://hostname.auth0.com/userinfo\". You might probably want to create a \"client-grant\" associated to this API. See: https://auth0.com/docs/api/v2#!/Client_Grants/post_client_grants"} 

Als ich versucht habe, Benutzerinfo URL als zusätzliche Kennung (Zielgruppe) beim Erstellen einer API hinzuzufügen, bekomme ich ein Fehler, der besagt, dass die angegebene Kennung reserviert ist

Bitte lassen Sie mich wissen, was ich hier falsch mache. Ich freue mich auf deine Antwort.

Danke.

Antwort

1

Ich sehe mehrere Probleme in dem, was Sie tun.

Wenn Sie nach einem Zugriffstoken für Ihre API suchen, sollten Sie die ID der API als audience im ersten Aufruf /authorize angeben. /userinfo Publikum wird angenommen, Sie müssen es also nicht extra erwähnen. wenn Ihre API-Kennung ist zum Beispiel https://api.example.com:

https://hostname.auth0.com/authorize?client_id=CLIENT_ID&redirect_uri=http://localhost:4200/dashboard&response_type=code&scope=openid%20profile&state=state&nonce=nonce&audience=https://api.example.com 

Sie können auch in der API in dem obigen Aufruf definierten einige der Bereiche festlegen wollen (abgesehen von openid und profile).

Wenn Sie den Code zu Token austauschen, sollte der Typ grant_type authorization_code (nicht client_credentials) sein. Außerdem müssen Sie die Zielgruppe während dieses Codeaustauschs nicht erneut angeben. Stellen Sie jedoch sicher, dass Sie auch die redirect_uri angeben, die Sie in der ursprünglichen /authorize Anfrage hier gesendet haben. Dies ist erforderlich, um einige Angriffsvektoren zu verhindern.

Wenn Sie die API-Aufrufe basierend auf den oben genannten Punkten ändern, sollten Sie das korrekte Zugriffstoken zurücksenden, mit dem Sie sowohl Ihre API als auch den Endpunkt /userinfo aufrufen können.

Weitere Informationen zu diesem Durchfluss finden Sie in der Dokumentation: https://auth0.com/docs/api-auth/tutorials/authorization-code-grant

Verwandte Themen