Nicht in der Lage zu validieren JSON Web token mit .net - key zu kurz

Habe ich verwendet JSONWebToken npm-Modul zum erzeugen einer jot:

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

Dieser gibt mir folgende Ausgabe:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1nij9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5legftcgxllmnvbs8ilcjlehaioje0mta4mtkzodasimh0dha6ly9legftcgxllmnvbs9vcmdudw0ioii5odc5odc5odcilcjodhrwoi8vzxhhbxbszs5jb20vdxnlcii6im1lqgv4yw1wbguuy29tiiwiawf0ijoxnda4mzk0mjk2fq.5X5LTg4wxDF2p49xtsRcG4S9Yk4qSfW1tmeu0aqubhc

Da bin ich nicht angeben, welchen Algorithmus ich will, es nutzt SHA256.

Nun, ich versuche, um zu überprüfen, diese in c#. Dass wiederum nicht leicht...

Bekomme ich auch eine exception über die Schlüssel-Größe:

IDX10603: 'System.IdentityModel.Token.InMemorySymmetricSecurityKey' nicht weniger als: '128' bit.
Parameternavn: Schlüssel.KeySize
Die tatsächliche Größe war 48.

Ich versuche ich zu erweitern, die Schlüssel bekomme ich einen neuen Fehler beim erstellen des symmetrischen Schlüssels:

Ungültige Länge für einen Base-64 char-array oder string

Ich recon das hat etwas zu tun mit der Art, wie ich erzähle .net-code über meinen Schlüssel. Da die SymmetricKeyIssuerSecurityTokenProvider Konstruktor-parameter namens base64Key ich habe tryed, um Base64Url codieren meine Schlüssel:

        var secret =  Base64UrlEncoder.Encode("secret");
        TokenValidationParameters validationParameters = new TokenValidationParameters
        {                
            ValidateIssuer = false,
            ValidateAudience = false,
            IssuerSigningTokens = new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret).SecurityTokens
        };

So, was ich hier noch fehlt?

Warum kann jsonwebtoken generieren und zu validieren jots mit kurzen Tasten während der .net kann nicht?

Und warum kann das nicht .net akzeptieren Sie die Tasten gebe ich es?

Hier ist der komplette .net-code mit einem jot unterzeichnet, mit einem langen Schlüssel:

        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;

Aktualisiert:

Ich bin nur mit Microsoft-Zeug in diesem code. Ich bin mit der Owin Pakete Microsoft.Owin.Security.Jwt version 2.1.0 mit System.IdentityModel.Tokens.Jwt version 4.0.0-RC2.

Gibt es mehrere blog-Beiträge gibt, die besagt, dass Sie müssen manuell aktualisieren Sie die System.IdentityModel.Tokens.Jwt Paket.

TokenValidationParameters Klasse von Microsoft nicht ValidateAudience und IssuerSigningTokens Mitglieder. Könnten Sie bitte angeben, welche Bibliothek Sie verwenden möchten, für die Validierung?
Sorry. Ich bin nur mit Microsoft-Zeug. Wird angeben in der Frage.

InformationsquelleAutor Vegar | 2014-08-18

Schreibe einen Kommentar