2015-09-07 23 views
5

Tôi đang cố triển khai mã thông báo JWT nhưng vẫn tiếp tục chạy vào ngoại lệ sau: IDX10640: Thuật toán không được hỗ trợ: 'http://www.w3.org/2001/04/xmldsig-more#hmac-sha256' khi cố gắng viết mã thông báo cho chuỗi json nhỏ gọn.DNX Core 5.0 JwtSecurityTokenHandler "IDX10640: Thuật toán không được hỗ trợ: '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); 

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Cập nhật 1:

Các lỗi trên xảy ra với "System.IdentityModel.Tokens.Jwt": "5.0.0-beta7-208241120"

Cập nhật 2:

Mã được cập nhật

+0

tôi m gặp vấn đề tương tự này. Bạn đang sử dụng phiên bản '5.0.0-beta7-208241120' của thư viện' System.IdentityModel.Tokens.Jwt'? –

+0

Có, tốt khi nghe tôi không phải là người duy nhất ... – sboulema

+0

1) Tại sao bạn tạo khóa mật mã bằng cách sử dụng 'System.Random'? 2) một khóa 128 byte không có ý nghĩa. Bạn có muốn khóa 128 bit (16 byte) không? 256 bit/32 byte cũng sẽ là một lựa chọn lành mạnh. 3) Sử dụng thời gian địa phương là khá kỳ lạ là tốt. – CodesInChaos

Trả lời

2

Hiện tại, chúng tôi không hỗ trợ các khóa đối xứng. Hy vọng sẽ sớm nhận được điều đó.

2

Hỗ trợ sẽ có trong bản phát hành RC2. Thử nghiệm với các gói NuGet đêm từ http://myget.org/gallery/azureadwebstacknightly

thay đổi mã Chỉ nhẹ cần thiết để có được tất cả mọi thứ để làm việc

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

Members token có thể được thực hiện với các bit tiếp theo của mã

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); 
Các vấn đề liên quan