2015-09-07 11 views
5

私はJWTトークンを実装しようとしていますが、 IDX10640:コンパクトjson文字列にトークンを書き込もうとすると、アルゴリズムがサポートされていません。 'http://www.w3.org/2001/04/xmldsig-more#hmac-sha256'。DNX Core 5.0 JwtSecurityTokenHandler "IDX10640:アルゴリズムがサポートされていません: '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); 

これを解決するためのアイデアはありますか?

アップデート1:

上記のエラーが "System.IdentityModel.Tokens.Jwt" で発生: "5.0.0-beta7-208241120"

アップデート2:

更新されたコード

+0

の次のビットで行うことができますから、毎晩nugetパッケージでテスト 私はこの同じ問題を経験しています。あなたは 'System.IdentityModel.Tokens.Jwt'ライブラリの' 5.0.0-beta7-208241120'バージョンを使用していますか? –

+0

はい、私が唯一の人ではないと聞いて良かったです... – sboulema

+0

1)なぜSystem.Randomを使って暗号鍵を作るのですか? 2)128バイトのキーは意味をなさない。 128ビットのキー(16バイト)が必要でしたか? 256ビット/ 32バイトもまともな選択肢になります。 3)現地時間を使うのもかなり奇妙です。 – CodesInChaos

答えて

2

現在、対称鍵はサポートされていません。すぐにそれを得ることを望む。

2

サポートはRC2リリースになります。 http://myget.org/gallery/azureadwebstacknightly

トークンを検証

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

を動作するようにすべてを取得するために必要なわずかなコードの変更は、私はコード

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); 
関連する問題