[解決済み] System.IdentityModel.Tokens.Jwt を使用した JWT トークンのデコードとベリファイ
質問
私はこれまで JWT ライブラリを使って Json Web Token をデコードしていましたが、Microsoft の公式 JWT 実装に切り替えたいと思います。 System.IdentityModel.Tokens.Jwt .
ドキュメントは非常にまばらなので、私がJWTライブラリで行ってきたことをどのように達成するのか理解するのに苦労しています。 JWTライブラリには、base64エンコードされたJWTを受け取り、それをJSONに変換し、デシリアライズするDecodeメソッドがあります。System.IdentityModel.Tokens.Jwt を使用して同様のことを行いたいのですが、かなりの量を調査した後、その方法を理解することができません。
価値あることとして、私はGoogleのIDフレームワークで使用するために、クッキーからJWTトークンを読み込んでいます。
どんな助けでも感謝します。
どのように解決するのですか?
パッケージ内には
JwtSecurityTokenHandler
というクラスがあり、これは
System.IdentityModel.Tokens.SecurityTokenHandler
. WIFでは、これはセキュリティトークンをデシリアライズおよびシリアライズするためのコアクラスです。
このクラスは
ReadToken(String)
メソッドがあり、base64 でエンコードされた JWT 文字列を受け取って
SecurityToken
を返します。
は
SecurityTokenHandler
もまた
ValidateToken(SecurityToken)
メソッドがあり、これはあなたの
SecurityToken
を受け取り
ReadOnlyCollection<ClaimsIdentity>
. 通常JWTの場合、これには1つの
ClaimsIdentity
オブジェクトが含まれ、これは元の JWT のプロパティを表す一連のクレームを持っています。
JwtSecurityTokenHandler
の追加オーバーロードを定義しています。
ValidateToken
であり、特に
ClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)
のオーバーロードです。その
TokenValidationParameters
のリストとして)トークンサイニング証明書を指定することができます。
X509SecurityTokens
). また、このオーバーロードはJWTを
string
ではなく
SecurityToken
.
これを行うためのコードはかなり複雑ですが、Global.asax.cxのコード(
TokenValidationHandler
クラス) にある開発者向けサンプル「"ADAL - Native App to REST service - Authentication with ACS via Browser Dialog"」にあります。
http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
あるいは
JwtSecurityToken
クラスには、ベースとなる
SecurityToken
クラスのような
Claims
プロパティは
ClaimsIdentity
コレクションを経由せずに含まれるクレームを取得します。また、このプロパティは
Payload
を返すプロパティもあります。
JwtPayload
オブジェクトを返し、トークンの生の JSON を取得することができます。どのアプローチが最も適切かは、シナリオによって異なります。
の一般的な (すなわち JWT 固有のものではない) ドキュメントを参照してください。
SecurityTokenHandler
クラスの一般的なドキュメントは
http://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
アプリケーションによっては、他のハンドラとまったく同じように、JWTハンドラをWIFパイプラインに構成することができます。
異なるタイプのアプリケーションで使用されている3つのサンプルが、以下のサイトにあります。
おそらく、1 つはあなたのニーズに合うか、少なくともそれに適応できるものでしょう。
関連
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] .Netの配列のLongLengthの目的は何ですか?
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] WinSCP 応答待ちタイムアウト
-
[解決済み] このコンピュータには、.NET Framework 4.6またはそれ以降の更新プログラムがすでにインストールされています。
-
[解決済み] terminationGracePeriodSeconds not
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] JWT(JSONウェブトークン)の有効期限を自動的に延長する機能
-
[解決済み] ライブラリを使用せずに、javascriptでjwtトークンをデコードするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] asp.netでWebサービスのタイムアウト時間を長くする方法は?
-
[解決済み] Windowsイベントログで参照される「フレームワークのバージョン」とは何ですか?
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] 実際のサービスはデータを返すのに、なぜWebServiceはnullを返すのですか?
-
[解決済み] パッケージのダウングレード警告を検出(dotnet core, vs 2017)
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
-
[解決済み] JWTトークンをデコードするには?
-
[解決済み] C#でBase64 URLセーフエンコーディングを実現するには?