C#でJWTのデコード・検証を行う
やんごとなき事情により他所で作成した JWT のデコード・検証を行う必要があった為、やり方をメモ。
他所で作ったJWTをデコードして〇〇のエントリを抜いて使うという設計は一度始めてしまうとJWTの内容に依存する形になってしまう為ロクな事にならない予感しかしない。昔良くあった「IDの〇桁目がNなら~」みたいな仕組みに通じるものを感じる。
var tokenValidationParameters = new TokenValidationParameters {
ValidateIssuerSigningKey = true,
IssuerSigningKey = SigningCredentialsProvider.GetVerificationKey(),
ValidateIssuer = true,
ValidIssuer = Issuer,
ValidateAudience = true,
ValidAudience = Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
var tokenHandler = new JwtSecurityTokenHandler();
JwtSecurityToken jwt = tokenHandler.ReadToken(token) as JwtSecurityToken;
return tokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken securityToken);
- TokenValidationParameters.ValidateXXXX フラグでJWTのどこをバリデーション対象にするか選択可能
- 検証に失敗すると例外(SecurityTokenInvalidXXXXException)が発生する
- ValidateToken() の戻り値 ClaimsPrincipal の Claims にJWT各エントリが詰められているので後で取り出して使用できる
- サンプルでは共通鍵を使ってますが秘密鍵/公開鍵を使う場合は SigningCredentialsProvider を別に実装してください
サンプルソースはこちら。
Author And Source
この問題について(C#でJWTのデコード・検証を行う), 我々は、より多くの情報をここで見つけました https://qiita.com/yossy6954/items/61b03683b8b801a1b428著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .