J'utilise la bibliothèque JWT pour décoder un jeton Web Json et je souhaite passer à l'implémentation officielle JWT de Microsoft, System.IdentityModel.Tokens.Jwt .
La documentation est très rare, donc j'ai du mal à comprendre comment accomplir ce que j'ai fait avec la bibliothèque JWT. Avec la bibliothèque JWT, il existe une méthode Decode qui prend le JWT encodé en base64 et le transforme en JSON qui peut ensuite être désérialisé. J'aimerais faire quelque chose de similaire en utilisant System.IdentityModel.Tokens.Jwt, mais après pas mal de fouilles, je ne peux pas comprendre comment.
Pour ce que ça vaut, je lis le jeton JWT à partir d'un cookie, à utiliser avec le cadre d'identité de Google.
Toute aide serait appréciée.
Réponses:
Dans le package, il y a une classe appelée
JwtSecurityTokenHandler
qui dérive deSystem.IdentityModel.Tokens.SecurityTokenHandler
. Dans WIF, il s'agit de la classe principale pour la désérialisation et la sérialisation des jetons de sécurité.La classe a une
ReadToken(String)
méthode qui prendra votre chaîne JWT encodée en base64 et retourne aSecurityToken
qui représente le JWT.Le a
SecurityTokenHandler
également uneValidateToken(SecurityToken)
méthode qui prend votreSecurityToken
et crée un fichierReadOnlyCollection<ClaimsIdentity>
. Habituellement, pour JWT, celui-ci contiendra un seulClaimsIdentity
objet qui a un ensemble de revendications représentant les propriétés du JWT d'origine.JwtSecurityTokenHandler
définit des surcharges supplémentaires carValidateToken
, en particulier, il a uneClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)
surcharge. L'TokenValidationParameters
argument vous permet de spécifier le certificat de signature de jeton (sous forme de liste deX509SecurityTokens
). Il a également une surcharge qui prend le JWTstring
plutôt que comme unSecurityToken
.Le code pour ce faire est assez compliqué, mais peut être trouvé dans le code Global.asax.cx (
TokenValidationHandler
classe) dans l'exemple de développeur appelé «ADAL - Service Native App to REST - Authentification avec ACS via Browser Dialog», situé à l'adressehttp://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
Sinon, la
JwtSecurityToken
classe a des méthodes supplémentaires qui ne sont pas sur laSecurityToken
classe de base , comme uneClaims
propriété qui obtient les revendications contenues sans passer par laClaimsIdentity
collection. Il possède également unePayload
propriété qui renvoie unJwtPayload
objet qui vous permet d'accéder au JSON brut du jeton. Cela dépend de votre scénario de l'approche la plus appropriée.La documentation générale (c'est-à-dire non spécifique à JWT) pour la
SecurityTokenHandler
classe est àhttp://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
En fonction de votre application, vous pouvez configurer le gestionnaire JWT dans le pipeline WIF exactement comme n'importe quel autre gestionnaire.
Il y en a 3 exemples en cours d'utilisation dans différents types d'applications à
http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure% 20AD% 20Developer% 20Experience% 20Team & f% 5B1% 5D.Text = Azure% 20AD% 20Developer% 20Experience% 20Team
Probablement, l'un répondra à vos besoins ou du moins sera adaptable à eux.
la source
Je me demande simplement pourquoi utiliser certaines bibliothèques pour le décodage et la vérification des jetons JWT.
Le jeton JWT codé peut être créé à l'aide du pseudocode suivant
Il est très facile de se passer de bibliothèque spécifique. En utilisant le code suivant:
Le décodage du jeton est une version inversée du code ci-dessus.Pour vérifier la signature, vous aurez besoin de la même chose et de comparer la partie de la signature avec la signature calculée.
MISE À JOUR: Pour ceux qui ont du mal à faire l'encodage / décodage urlsafe base64, veuillez consulter une autre question SO , ainsi que le wiki et les RFC
la source