web-dev-qa-db-ja.com

ASP.NET Identity Bearer Token vs JWT Pros and Cons

ASP.NET Identityをしばらく使用しましたが、JWT(JSON Web Token)は非常に興味深く、使いやすいように見えていました。

JWT.IO には、トークンのデバッグの優れた例/ツールがあります。

ただし、バックエンドでJWTがどのように機能するかは完全にはわかりませんが、引き続きIdentityを使用しますか?

また、トークン(ベアラーとJWT)はどのように比較されますか?どちらが安全ですか?

18
shammelburg

JWTはアトラクションへのチケットのようなものです。サーバーに必要なすべてのセキュリティ情報が埋め込まれています。サーバーがそれを渡すと、クライアントは何かを要求するたびにそれを提示する必要があり、サーバーはそれが有効であればそれに応じて応答します。

コンテンツは完全に閲覧可能ですが、サーバーによって秘密キーを使用して署名されているため、改ざんされたかどうかを確認できます。

すべてがJWTにあり、クライアントが必要な人に提示できるため、異なるサーバーが同じ秘密を共有して署名を検証できる限り、シングルサインオンに使用できます。

チケットのように、JWTには有効期限があります。有効期限が切れていない限り、有効です。これは、その前にそれらを取り消すことができないことを意味します。このため、JWTの有効期限は短い(30分程度)場合が多く、JWTが期限切れになったときにすばやく更新するために、クライアントにもリフレッシュトークンが発行されます。

JWT

  • サーバーに保存されていません
  • SSOに最適
  • 時期尚早に取り消すことはできません

ベアラートークンはゲストリストのようなものです。サーバーはクライアントをゲストリストに追加し、必要なときにクライアントを識別するためのパスコードを提供します。クライアントがコードを提供すると、サーバーはそのコードをリストで検索し、要求されていることを何でも実行できることを確認します。

サーバーはリストを利用できるようにする必要があります。そのため、サーバー間でアクセスを共有する場合は、すべてのサーバーがリストにアクセスできる必要があります(データベース)か、リストを保持している機関(認証サーバー)と通信する必要があります。

一方、ゲストリストを持っているので、いつでも好きなときにリストから外すことができます。

ベアラートークン

  • サーバーに保存
  • いつでも取り消すことができます
  • サーバー間でトークンを共有するには、中央機関または共有データベースが必要です

Bit of Techには、Web ApiでJWTを実装するための優れたチュートリアルがいくつかあります。

http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/

34
JamesT

残念ながら、前の答えは誤解を招く可能性があります:ベアラートークンは、OAuth 2.0。 Bearer Tokenは不透明な文字列であり、それを使用するクライアントに対して意味を持たない。一部のサーバーは16進文字の短い文字列であるトークンを発行し、他のサーバーはJSON Webトークン。( https://oauth.net/2/bearer-tokens/

5
Simone