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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, welche API Sie verwenden, da die offizielle Microsoft ein enthält nicht die Eigenschaften, die Sie verwenden. Meine Vermutung wäre, dass Sie eine veraltete version.
Nahm ich die API aus diesem Nuget-Paket. Und dies ist der code, der bei mir funktioniert:
Beachten Sie, dass ich hatte, um die Größe des array mit dem Schlüssel, so dass Schlüssellänge übergibt die Validierung. Es erscheint , dass Sie die Schlüssellänge für HMAC ist immer gleich der Blockgröße ist, und für SHA256 es 512 bits. Es ist MinimumSymmetricKeySizeInBits statische Konstanteneigenschaft , definiert die minimale Länge eines SimmetricKey, aber es scheint, es kann nicht kleiner sein als 128.
was X509CertificateValidationMode ? so ändern Sie es mit diesem Ansatz ?
InformationsquelleAutor Andrew Savinykh
Versuchen
TextEncodings.Base64Url.Decode
api vonMicrosoft.Owin.Security.Jwt
Paket zu Dekodieren, die der SignaturschlüsselDann mache ich folgenden zur Validierung der token:
InformationsquelleAutor Alex Michel
Korrekt über den Schlüssel nicht weniger als 128 bits, da die Unterstützung nur für die AES, dass ist das minimum.
Können Sie Ihre eigenen SignatureProvider.
Ich denke auch, dass Sie ältere bits. Haben Sie einen Blick auf die neuesten.
http://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/
Wenn Sie Probleme haben, lass es mich wissen.
InformationsquelleAutor Brent Schmaltz