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に正しく署名するにはどうすればいいですか?
お返事ありがとうございます。私はこのような疑いがあるが、確認したい。私はその時に別の実装を使用し、RC2の後でこれに戻ります。再度、感謝します! – JasCav