2015-11-05 15 views
5

JWTをレガシーアプリケーションに提供するために、新しいアプリケーション(認証元)を使用するユースケースがあります。ASP.NETでSystem.IdentityModel.Tokens.Jwtを使用してJWTトークンをエンコードする

パッケージを使用しようとしています。System.IdentityModel.Tokens.Jwt 5.0.0-beta7(必要に応じてbeta8に簡単に移動できます)。トークンの作成は簡単でしたが、正しく署名する際に問題があります。ここに私の現在のコードはあります:

Claim[] claims = { 
    new Claim(ClaimTypes.Email, "[email protected]"), 
    new Claim(ClaimTypes.Role, "admin"), 
    new Claim(ClaimTypes.Uri, ""), 
    new Claim(ClaimTypes.Expiration, DateTime.UtcNow.Add(TimeSpan.FromDays(1)).ToString()), 
    new Claim("personId", personId.ToString()) 
}; 

var key = Convert.FromBase64String("my super secret key goes here"); 
var signingCredentials = new SigningCredentials(
    new SymmetricSecurityKey(key), 
    SecurityAlgorithms.HMAC_SHA256, 
    SecurityAlgorithms.Sha256Digest 
); 
var jwt = new JwtSecurityToken("localhost", "all", claims, 
    DateTime.UtcNow, DateTime.UtcNow.AddDays(1), signingCredentials);    

var handler = new JwtSecurityTokenHandler(); 
handler.WriteToken(jwt); 

return Content($"{handler.WriteToken(jwt)}"); 

私はトークンに署名しなければ、すべて正常に動作します。ただし、署名の資格情報を追加するとすぐに、HMACがサポートされていないというエラーが表示されます。私はsupport for symmetric keys does not yet existと言われる別のSOの投稿を見つけました。しかし、私の検索では、図書館の広範な利用が見られます。特に、私はInMemorySymmetricSecurityKeyの使用を見ます。しかし、私はそれを自分で使ってみると、どの名前空間にも見つからないので、私はここからどこへ行くのかちょっと混乱しています。

これは基本的に尋ねると長らく残っている説明です - 簡単な秘密でJWTに正しく署名するにはどうすればいいですか?

答えて

3

新しいバージョンのCoreClrに移行したとき、私たちは一時的にHMACのサポートを外さなければなりませんでした。 RC1にECDSAのサポートを追加し、RC2にHMACを追加することを計画します。

大変申し訳ございません。独自のSignatureProviderを追加するか、数週間待つことができます。

+0

お返事ありがとうございます。私はこのような疑いがあるが、確認したい。私はその時に別の実装を使用し、RC2の後でこれに戻ります。再度、感謝します! – JasCav

関連する問題