Le flux suit la norme OAuth 2.0. S'il vous plaît noter que je ne suis pas expert dans ADFS, mais je connais bien OAuth 2.0.
Le flux d'autorisation comprend plusieurs options avec différentes étapes. Dans votre cas, vous utilisez le profil code (en spécifiant response_type = code). L'étape d'autorisation que vous avez faite est seulement la première étape, il y a quelques étapes à suivre
vous pouvez effectuer une recherche sur "OAuth 2.0 avec ADFS" par ex. http://blog.scottlogic.com/2015/03/09/OAUTH2-Authentication-with-ADFS-3.0.html
Demande d'autorisation
../authorize?response_type = Code & client_id = ruleman & ressource = urn: ruleman: 1 & redirect_uri = http://ruleman.net/authorize
vous recevrez un code OAuth (généralement pas yant une valeur de l'information, il est seulement un code)
http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc
paramètre de code
contient revendications telles que le nom d'utilisateur, etc.
Ceci est faux hypothèse
En utilisant ce code, vous devez appeler un service de jeton de back-end pour recevoir un jeton d'accès (par exemple en utilisant HttpClient).
POST /adfs/oauth2/token HTTP/1.1
grant_type=authorization_code&client_id=some-uid-or-
other&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2FgetAToken&code=thecode
vous recevrez un jeton d'accès. Cette étape garantit que votre application est réellement authentifiée auprès du fournisseur d'identité qu'elle connaît.
Selon le poste lié ci-dessus:
La partie intéressante est lui-même, il est en fait un jeton Web JSON (JWT). C'est-à-dire une représentation signée de l'identité de l'utilisateur et d'autres subventions.
Je suis incapable de confirmer cela, mais vous pouvez essayer. Habituellement (avec d'autres fournisseurs d'identité) le jeton est seulement un jeton et le client doit appeler un service "information d'utilisateur" pour obtenir n'importe quelle réclamation d'identité d'utilisateur, cependant il semble que l'ADFS vous donne un raccourci.
vous pouvez utiliser une bibliothèque JWT pour décoder/valider le jeton JWT (com.auth0/java-JWT/3.0.1)
com.auth0.jwt.interfaces.DecodedJWT jwt = com.auth0.jwt.JWT.decode(token);
Le code ne contient aucune information de réclamation/utile. Il est uniquement utilisé pour interroger un jeton d'accès. – gusto2
@mrq Le but n'est pas seulement d'extraire le jeton, mais de décoder le jeton lui-même et de récupérer les revendications. – Aliaxander
@mrq le code ** n'est pas le jeton **. Le jeton doit être demandé par backend sur le service de jeton. Dans la question d'origine, la demande de jeton est manquante (il n'a reçu qu'un code) – gusto2