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.

TokenValidationParameters Classe fourni par Microsoft n'ont pas 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