web-dev-qa-db-ja.com

JWT認証とOAuth認証の主な違いは何ですか?

JWTを使用したステートレス認証モデルを使用した新しいSPAがあります。単純なトークンヘッダーではなく、すべての要求に対して「ベアラトークン」を送信するように要求するなど、認証フローについてOAuthを参照するように要求されることがよくありますが、OAuthは単純なJWTベースの認証よりもはるかに複雑です。主な違いは何ですか?JWT認証をOAuthのように動作させるべきですか?

XSRFを防ぐためにJWTを私のXSRF-TOKENとしても使用していますが、それらを別々にしておくよう求められていますか。それらを別々にしておくべきですか?ここでのどんな助けでも評価されて、コミュニティのための一連のガイドラインに通じるかもしれません。

216
Tech Junkie

TL; DR 単一のクライアントアプリケーション、単一のAPIのように非常に単純なシナリオがある場合、OAuth 2.0を使用してもうまくいかない可能性があります。その後、ネイティブのモバイル、サーバーサイドなど)をOAuth 2.0のルールに準拠させると、独自のシステムを導入するよりも管理しやすくなる可能性があります。


別の答えで述べたように、JWT( Learn JSON Web Tokens )は単なるトークン形式です。デジタル方式であるため検証および信頼できる方法でパーティー間でデータを転送するためのコンパクトで自己完結型のメカニズムを定義します。署名しました。さらに、JWTのエンコード規則により、これらのトークンはHTTPのコンテキスト内で非常に使いやすくなります。

自己完結型(実際のトークンには特定のサブジェクトに関する情報が含まれています)は、ステートレス認証メカニズム(別名お母さん、セッションなし!)の実装にも適しています。この経路をたどり、保護されたリソースへのアクセスを許可されるために当事者が提示しなければならない唯一のものがトークン自体である場合、問題のトークンはベアラトークンと呼ぶことができます。

実際には、あなたがしていることはすでにベアラトークンに基づいて分類されている可能性があります。ただし、OAuth 2.0関連の仕様で規定されているように、ベアラトークンを使用していないことを考慮してください( RFC 6750 を参照)。それは、Authorization HTTPヘッダに頼り、Bearer認証方式を使用することを意味します。

正確な詳細を知らずにCSRFを防ぐためのJWTの使用に関しては、その慣行の妥当性を確かめることは困難ですが、正直に言ってそれは正しくない、または価値があるとは思えません。次の記事( Cookieとトークン: 『The Definitive Guide 』)、特にXSS and XSRF Protectionセクションについての記事は、役に立つかもしれません。

OAuth 2.0を完全に使う必要がない場合でも、最後のアドバイスとして、I はカスタムヘッダ ではなくAuthorizationヘッダ内でアクセストークンを渡すことを強くお勧めします。それらが本当にベアラトークンであるなら、RFC 6750の規則に従わなければ、そうでなければ、あなたはいつでもカスタム認証方式を作成してもそのヘッダを使うことができます。

認証ヘッダーは、HTTPプロキシおよびサーバーによって認識され、特別に扱われます。したがって、アクセストークンをリソースサーバに送信するためのそのようなヘッダの使用は、一般に認証された要求、特に許可ヘッダの漏洩または意図しない記憶の可能性を低減する。

(出典: RFC 6819、セクション5.4.1

210
João Angelo

OAuth 2.0はプロトコルを定義します。つまり、トークンの転送方法を指定し、JWTはトークン形式を定義します。

OAuth 2.0と「JWT認証」は、クライアントがリソースサーバーにトークンを提示する(2番目の)段階になると外観が似ています。トークンはヘッダーで渡されます。

しかし、「JWT認証」は標準ではなく、クライアントが最初にトークンを取得するhow(第1段階)を指定しません。ここで、OAuthの複雑さが認識されます。クライアントがアクセストークンを取得できるさまざまな方法も定義します。承認サーバーと呼ばれるもの。

本当の違いは、JWTは単なるトークン形式であり、OAuth 2.0はプロトコル(つまりmayはJWTをトークン形式)。

201
Hans Z.

まず、JWTとOAuthを区別する必要があります。基本的に、JWTはトークン形式です。 OAuthはJWTをトークンとして使用できる認証プロトコルです。 OAuthはサーバーサイドとクライアントサイドのストレージを使用します。あなたが本当のログアウトをしたいならば、あなたはOAuth2を使わなければなりません。 JWTトークンによる認証は実際にはログアウトできません。トークンを追跡する認証サーバーがないからです。サードパーティのクライアントにAPIを提供したい場合は、OAuth2も使用する必要があります。 OAuth2は非常に柔軟です。 JWTの実装は非常に簡単で、実装に時間がかかりません。アプリケーションにこの種の柔軟性が必要な場合は、OAuth2を使用してください。しかし、このユースケースのシナリオが必要ない場合は、OAuth2を実装するのに時間がかかります。

XSRFトークンは常にすべての応答ヘッダーでクライアントに送信されます。 CSRFトークンはそれ自体で保護されているので、CSRFトークンがJWTトークンで送信されるかどうかは関係ありません。したがって、JWTでCSRFトークンを送信する必要はありません。

82

JWT(JSON Web Tokens) - これは単なるトークン形式です。 JWTトークンは、発行者、サブジェクト(クレーム)、有効期限などに関する情報を含むJSONエンコードデータ構造です。改ざん防止と信頼性のために署名されており、対称または非対称のアプローチを使用してトークン情報を保護できます。 JWTはSAML 1.1/2.0よりも単純で、すべてのデバイスでサポートされており、SWT(Simple Web Token)よりも強力です。

OAuth2 - OAuth2は、ブラウズベースのWebアプリ、ネイティブモバイルアプリ、デスクトップアプリなどのクライアントソフトウェアを使用してデータにアクセスしたいという問題を解決します。 OAuth2は承認用です。クライアントソフトウェアは、アクセストークンを使用してエンドユーザーに代わってリソースにアクセスすることを承認できます。

OpenID Connect - OpenID ConnectはOAuth2の上に構築され、認証を追加します。 OpenID Connectは、UserInfo Endpoint、IDトークン、OpenID Connectプロバイダーのディスカバリーおよび動的登録、そしてセッション管理など、OAuth2に何らかの制約を追加します。 JWTはトークンの必須フォーマットです。

CSRF保護 - ブラウザのCookieにトークンを保存しない場合は、CSRF保護を実装する必要はありません。

あなたはここでより多くの詳細を読むことができます http://proficientblog.com/microservices-security/

42
ManishSingh

ここで答えてくれたみんながOAUTHの要点を逃したようです

ウィキペディアから

OAuthは、インターネットユーザーが他のWebサイト上の自分の情報へのアクセスを、パスワードを与えずに許可するための手段として一般的に使用されている、アクセス委任のためのオープンスタンダードです。このメカニズムは、ユーザーが自分のアカウントに関する情報をサードパーティ製のアプリケーションやWebサイトと共有できるようにするために、Google、Facebook、Microsoft、Twitterなどの企業で使用されています。

ここでのキーポイントはaccess delegationです。 OTPのようなマルチファクタ化された認証に裏打ちされたID/pwdベースの認証があり、さらにパスへのアクセスを保護するために使用されるJWTによって保護されてOAUTHの有効期限を設定できるアクセス

あなたのエンドポイントで再びホストされている信頼できるWebサイト(またはアプリ)を通してのみ消費者が自分のリソース(あなたのエンドポイント)にアクセスするのであれば、OAUTHを使う意味はありません。

あなたはOAUTH認証のみに行くことができます リソースの所有者(ユーザー)がサードパーティのクライアント(外部アプリケーション)を介して自分の(あなたの)リソース(エンドポイント)にアクセスしたい場合にあなたがOAUTH providerである場合。 あなたは一般的にそれを乱用することができますがそしてそれは正確に同じ目的のために作成されます

もう一つの重要な注意事項:
あなたは自由にJWTとOAUTHにWord authenticationを使っていますが、どちらも認証メカニズムを提供していません。はい、一方はトークンメカニズム、もう一方はプロトコルですが、一度認証されると、それらは承認(アクセス管理)にのみ使用されます。あなたはOPENIDタイプの認証かあなた自身のクライアント資格のどちらかでOAUTHを支持しなければなりません

29
user3151330

JWTは、当事者間で情報を安全に伝送するためのコンパクトで自己完結型の方法を定義するオープンスタンダードです。これは、暗号化された請求(トークン)を2つの当事者(クライアントとサーバー)の間で転送できるようにし、クライアントの識別時にトークンが発行される認証プロトコルです。それ以降のリクエストごとに、トークンを送信します。

OAuth2は承認フレームワークですが、フレームワークで定義されている一般的な手順と設定があります。 JWTはOAuth2内のメカニズムとして使用できます。

あなたはここでこれについてもっと読むことができます

OAuthかJWTかどちらを使うのか、そしてその理由は?

5
Samuel J Mathew

jWTとOAuthの主な違いを見つける

  1. OAuth 2.0はプロトコルを定義し、JWTはトークンフォーマットを定義します。

  2. OAuthはJWTをトークンフォーマットとして使用することも、アクセストークンをベアラトークンとして使用することもできます。

  3. OpenID connectは主にトークンフォーマットとしてJWTを使用します。

0

Jwtは、署名付きアクセストークンの発行と検証のための厳密な命令セットです。トークンには、ユーザーによるアクセスを制限するためにアプリによって使用されるクレームが含まれています

一方、OAuth2はプロトコルではなく、その委任承認フレームワークです。プライベート設定とパブリック設定の両方で、ユーザーとアプリケーションに他のアプリケーションへの特定の権限を許可させるための、非常に詳細なガイドラインを考えます。 OAUTH2の上にあるOpenID Connectは、Authentication and Authorization.itを提供します。複数の異なる役割、システム内のユーザー、APIのようなサーバーサイドアプリ、およびWebサイトやネイティブモバイルアプリなどのクライアントが他のユーザーと認証できる方法の詳細

oauth2は、jwt、柔軟な実装、さまざまなアプリケーションに対応可能な範囲で機能します。

0
naila naseem