Pas en mesure de valider JSON Web jeton .net - clé à court
J'ai utilisé JSONWebToken
mnp module pour générer un iota:
var jwt = require('jsonwebtoken');
var payload = {
"iss": "https://secure.example.com/",
"exp": 1410819380,
"http://example.com/orgnum": "987987987",
"http://example.com/user": "[email protected]"
};
var token = jwt.sign(payload, 'secret');
console.log(token);
Cela me donne la sortie suivante:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1nij9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5legftcgxllmnvbs8ilcjlehaioje0mta4mtkzodasimh0dha6ly9legftcgxllmnvbs9vcmdudw0ioii5odc5odc5odcilcjodhrwoi8vzxhhbxbszs5jb20vdxnlcii6im1lqgv4yw1wbguuy29tiiwiawf0ijoxnda4mzk0mjk2fq.5X5LTg4wxDF2p49xtsRcG4S9Yk4qSfW1tmeu0aqubhc
Puisque je ne suis pas en précisant ce que l'algorithme que je veux, il utilise SHA256.
Maintenant, j'ai essayer de vérifier cela en c#. Ce n'était pas facile...
J'obtiens une exception à propos de la taille de la clé:
IDX10603: Le "Système".IdentityModel.Jetons.InMemorySymmetricSecurityKey' ne peut pas avoir moins de: '128 bits.
Parameternavn: key.KeySize
La taille réelle était de 48.
Je j'ai essayer de prolonger la clé, je reçois un nouveau message d'erreur lors de la création de la clé symétrique:
Invalide la longueur de Base-64 char tableau ou une chaîne
Je recon cela a quelque chose à voir avec la façon dont je raconte l' .net code sur ma clé. Depuis le SymmetricKeyIssuerSecurityTokenProvider
paramètre du constructeur est nommé base64Key
, j'ai essayé de Base64Url-encoder mes clé:
var secret = Base64UrlEncoder.Encode("secret");
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
IssuerSigningTokens = new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret).SecurityTokens
};
Alors, quels sont je manque ici?
Pourquoi jsonwebtoken
générer et valider la note à court de touches .net ne peut pas?
Et pourquoi ne le peuvent pas .net accepter les clés que je lui donner?
Voici le compléter .net code avec un iota signé avec une longue clé:
var jwtToken =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5leGFtcGxlLmNvbS8iLCJleHAiOjE0MTA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9vcmdudW0iOiI5ODc5ODc5ODciLCJodHRwOi8vZXhhbXBsZS5jb20vdXNlciI6Im1lQGV4YW1wbGUuY29tIiwiaWF0IjoxNDA4Mzk1NjY4fQ.ZceiiEO_Mn5_GZp5D_r68VTT33fbocn1BTTznD6u3cs";
var secret = Base64UrlEncoder.Encode("super duper secret with some more on top");
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
IssuerSigningTokens = new SymmetricKeyIssuerSecurityTokenProvider("issuer", secret).SecurityTokens
};
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler()
{
Configuration = new SecurityTokenHandlerConfiguration()
{
CertificateValidationMode = X509CertificateValidationMode.None
}
};
SecurityToken validatedToken;
var claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);
return claimsPrincipal.Claims;
Mise à jour:
Je suis le seul à l'aide de Microsoft-trucs dans ce code. Je suis à l'aide de la Owin
paquets Microsoft.Owin.Security.Jwt
version 2.1.0
avec System.IdentityModel.Tokens.Jwt
version 4.0.0-RC2
.
Il y a plusieurs messages de blog hors il en indiquant que vous aurez besoin de mettre à jour manuellement le System.IdentityModel.Tokens.Jwt
paquet.
ValidateAudience
et IssuerSigningTokens
membres. Pourriez-vous précisez ce que la bibliothèque vous essayez de l'utiliser pour la validation?Désolé. Je suis le seul à l'aide de Microsoft trucs. Doit préciser dans la question.
OriginalL'auteur Vegar | 2014-08-18
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de ce que les API que vous utilisez, depuis le officiel de Microsoft ne contient pas les propriétés que vous utilisez. J'imagine, vous utilisez une version obsolète.
J'ai pris l'API à partir de ce Package Nuget. Et c'est le code qui a fonctionné pour moi:
Remarque, que j'ai dû redimensionner le tableau contenant la clé de sorte que la longueur de la clé passe la validation. Il semble qu'ils la longueur de la clé pour HMAC est toujours égale à la taille du bloc, et pour SHA256 c'est 512 bits. Il est MinimumSymmetricKeySizeInBits propriété statique de la qui définit la longueur minimale d'un SimmetricKey, mais il semble qu'il ne peut pas être fixé à moins de 128.
qu'en est X509CertificateValidationMode ? comment faire pour la changer avec cette approche ?
OriginalL'auteur Andrew Savinykh
Essayez d'utiliser
TextEncodings.Base64Url.Decode
api deMicrosoft.Owin.Security.Jwt
paquet à décoder la clé de signaturePuis-je faire à la suite de valider jeton:
OriginalL'auteur Alex Michel
Raison au sujet de la clé n'est pas moins de 128 bits, puisque le support n'est pour l'AES c'est le minimum.
Vous pouvez utiliser votre propre SignatureProvider.
Je pense aussi que vous utilisez d'anciennes bits. Jetez un oeil à la dernière.
http://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/
Si vous avez des questions, laissez-moi savoir.
OriginalL'auteur Brent Schmaltz