2015-09-07 3 views
5

Ich versuche, JWT-Tokens zu implementieren, aber laufe weiter in die folgende Ausnahme: IDX10640: Algorithmus wird nicht unterstützt: 'http://www.w3.org/2001/04/xmldsig-more#hmac-sha256' beim Versuch, das Token zu komprimieren, JSON-Zeichenfolge.DNX Core 5.0 JwtSecurityTokenHandler "IDX10640: Algorithmus wird nicht unterstützt: 'http://www.w3.org/2001/04/xmldsig-more#hmac-sha256'"

const string issuer = "issuer"; 
const string audience = "audience"; 
byte[] keyForHmacSha256 = new byte[32]; 
new Random().NextBytes(keyForHmacSha256); 

var claims = new List<Claim> { new Claim("deviceId", "12") }; 
var now = DateTime.UtcNow; 
var expires = now.AddHours(1); 
var signingCredentials = new SigningCredentials(
    new SymmetricSecurityKey(keyForHmacSha256), 
    SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.Sha256Digest); 

var token = new JwtSecurityToken(issuer, audience, claims, now, expires, signingCredentials); 
return _tokenHandler.WriteToken(token); 

Irgendwelche Ideen zur Lösung dieses Problems?

Update 1:

Der Fehler tritt oben mit "System.IdentityModel.Tokens.Jwt": "5.0.0-beta7-208241120"

Update 2:

Aktualisierter Code

+0

ich getan werden Ich habe das gleiche Problem. Verwenden Sie die '5.0.0-beta7-208241120'-Version von' System.IdentityModel.Tokens.Jwt' Bibliothek? –

+0

Ja, gut zu hören, ich bin nicht der einzige ... – sboulema

+0

1) Warum würden Sie einen kryptografischen Schlüssel mit 'System.Random' erstellen? 2) ein 128-Byte-Schlüssel macht keinen Sinn. Wollte Sie einen 128-Bit-Schlüssel (16 Bytes)? 256 Bits/32 Bytes wären ebenfalls eine vernünftige Wahl. 3) Die lokale Zeit ist auch ziemlich komisch. – CodesInChaos

Antwort

2

Wir haben momentan keine Unterstützung für symmetrische Schlüssel. Ich hoffe, dass ich das bald bekomme.

2

Unterstützung wird in der RC2-Version sein. mit den nächtlichen nuget Paketen Getestet von http://myget.org/gallery/azureadwebstacknightly

nur geringen Änderungen am Code erforderlich, um alles

const string issuer = "issuer"; 
const string audience = "audience"; 
var keyForHmacSha256 = Encoding.ASCII.GetBytes("<tokenSecret>"); 
var key = new SymmetricSecurityKey(keyForHmacSha256); 
var claims = new List<Claim> { new Claim("deviceId", "12") }; 
var now = DateTime.UtcNow; 
var expires = now.AddHours(1); 
var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HMAC_SHA256); 

var token = new JwtSecurityToken(issuer, audience, claims, now, expires, signingCredentials); 
return _tokenHandler.WriteToken(token); 

Validieren die Token arbeiten kann mit dem nächsten Stück Code

SecurityToken securityToken; 
var validationParameters = new TokenValidationParameters 
{ 
    ValidateLifetime = true, 
    ValidateAudience = true, 
    ValidateIssuer = true, 
    RequireExpirationTime = true, 
    ValidateSignature = true, 
    ValidAudience = audience, 
    ValidIssuer = issuer, 
    IssuerSigningKey = key, 
    RequireSignedTokens = true, 
    ValidateIssuerSigningKey = true    
}; 

tokenHandler.ValidateToken(token, validationParameters, out securityToken); 
Verwandte Themen