2017-09-13 4 views
0

Je configure la connexion dans une application Web avec ADFS.Analyse du jeton ADFS en Java

Demande d'autorisation ressemble à:

https://sso.company.net/adfs/oauth2/authorize?response_type=code&client_id=ruleman&resource=urn:ruleman:1&redirect_uri=http://ruleman.net/authorize

ADFS effectue autorisation et réoriente à l'application:

http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc

O ne sait que le jeton de code paramètre contient des revendications telles que nom d'utilisateur etc. Comment décoder le jeton et extraire les revendications?

Répondre

0

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); 
-2

Cette question a déjà été traitée here.

EDIT BIG, SORRY:

Avec la réponse citée vous pouvez analyser et extraire le querystring le jeton. Ce jeton est JWT, voir Microsoft déclare que "JWTs are the only supported token type for OAuth requests" et "The OAuth server implementation in ADFS on Windows Server 2012 R2 will issue only JWTs in response to OAuth authorization requests. This applies to both access tokens as well as refresh tokens issued by ADFS in response to an OAuth authorization grant request. There is no way to turn off this behavior in ADFS.".

Pour décoder le jeton JWT, utilisez un library of your choice, j'ai utilisé nimbus (maven: com.nimbusds/nimbus-jose-jwt/4.11). Tous les champs peuvent être directement obtenus à partir du jeton, de cette façon.

Désolé, je ne peux pas commenter ni marquer votre question comme doublon, en raison de ma mauvaise réputation.

+0

Le code ne contient aucune information de réclamation/utile. Il est uniquement utilisé pour interroger un jeton d'accès. – gusto2

+0

@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

+0

@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

1

Le flux Postman pour cette - voir Postman : Authorisation Code Grant on Server 2016 - ADFS 4.0.

Cette attribution de code correspond au flux que vous avez décrit.

Comme par les autres réponses:

  • Utilisez le point final authorize
  • Obtenir le code
  • Envoyez le code à l'extrémité jeton
  • Obtenez le JWT

Utilisation de JWT .io pour examiner le JWT.