[解決済み] JWT認証とOAuth認証の主な違いは何ですか?
質問事項
JWTを使用したステートレス認証モデルを持つ新しいSPAを持っています。私はよく、単純なトークンヘッダーの代わりにリクエストごとに「ベアラートークン」を送信するよう求めるような認証フローにOAuthを参照するよう求められますが、私はOAuthが単純なJWTベースの認証よりもはるかに複雑だと考えています。主な違いは何ですか?JWT認証をOAuthのように動作させればよいのでしょうか?
また、XSRF対策としてJWTをXSRF-TOKENとして使用していますが、両者を分けて考えるように言われているのですが?別々にしたほうがいいのでしょうか?また、コミュニティのためのガイドラインにつながるかもしれません。
どのように解決するのですか?
TL;DR もし、単一のクライアントアプリケーション、単一のAPIといった非常にシンプルなシナリオであれば、OAuth 2.0にすることは得策ではないかもしれません。一方、多くの異なるクライアント(ブラウザベース、ネイティブモバイル、サーバーサイドなど)がある場合は、OAuth 2.0のルールに従ったほうが、独自のシステムを構築するより管理しやすいかもしれません。
別の回答で述べたように、JWT( JSONウェブトークンを学ぶ これは、当事者間でデータを伝送するためのコンパクトで自己完結したメカニズムを定義したもので、デジタル署名されているため検証や信頼が可能です。さらに、JWTのエンコーディング規則は、これらのトークンをHTTPのコンテキスト内で非常に簡単に使用できるようにします。
また、自己完結型(実際のトークンには特定の対象に関する情報が含まれている)であるため、ステートレス認証機構(いわゆる ママ見て!セッションがない!」。 ). このように、保護されたリソースへのアクセスを許可するために当事者が提示しなければならないものがトークンだけである場合、そのトークンはベアラートークンと呼ばれることがあります。
実際には、あなたがやっていることは、すでにベアラートークンに基づくものと分類できます。しかし、OAuth 2.0 関連の仕様で規定されているようなベアラートークンを使っているわけではないことを考慮してください (
RFC 6750
). それはつまり
Authorization
HTTPヘッダを使用し
Bearer
の認証スキームを使用します。
CSRFを防ぐためにJWTを使用することについては、詳細が分からないのでその有効性を確認することは困難ですが、正直なところ、それは正しくなく、また価値がないように思われます。以下の記事( クッキーとトークン。決定版ガイド ) は、このテーマについて読むのに役に立つかもしれません。 XSSとXSRFの保護 のセクションを参照してください。
最後のアドバイスとして、たとえOAuth 2.0をフルに使う必要がないとしても、私は
の中でアクセストークンを渡すことを強くお勧めします。
Authorization
ヘッダーを使用する代わりに
. もし、本当にベアラートークンであれば、RFC6750のルールに従ってください。そうでない場合は、カスタムの認証スキームを作成しても、そのヘッダーを使用することができます。
Authorizationヘッダは、HTTPプロキシやサーバによって認識され、特別に扱われます。したがって、リソースサーバにアクセストークンを送信するためにこのようなヘッダを使用すると、認証されたリクエスト全般、特に Authorization ヘッダの漏洩や意図しない保存の可能性を減らすことができます。
(出典 RFC6819、セクション5.4.1 )
関連
-
[解決済み] smbclient NT_STATUS_ACCESS_DENIED
-
[解決済み] Google OAuth 2 認証 - エラー: redirect_uri_mismatch
-
[解決済み] GitHub アカウントのユーザー名を変更する
-
[解決済み] OpenIDとOAuthの違いは何ですか?
-
[解決済み】OAuth2の「暗黙の」フローはとてもうまく機能しているのに、なぜ「認証コード」フローがあるのですか?
-
[解決済み】OAuth 2の暗黙のグラント承認タイプの目的は何ですか?
-
[解決済み】Cookieベースの認証はどのように機能するのですか?
-
[解決済み】Subversionでは、ログイン名以外のユーザーになることはできますか?
-
[解決済み】JWTが盗まれたらどうする?
-
[解決済み] OpenIDとOAuthの比較 [重複]について
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] GET] "/users/sign_out" に一致するルートはありません。
-
[解決済み] LDAPサーバをベースDNとする。
-
[解決済み] JWT認証とOAuth認証の主な違いは何ですか?
-
[解決済み】OAuth2の「暗黙の」フローはとてもうまく機能しているのに、なぜ「認証コード」フローがあるのですか?
-
[解決済み】node.jsのユーザー認証ライブラリは?
-
[解決済み】エンドポイントとは何ですか?
-
[解決済み】Subversionでは、ログイン名以外のユーザーになることはできますか?
-
[解決済み] トークン認証とCookieの比較
-
[解決済み] マイクロサービス認証戦略
-
[解決済み] OpenIDとOAuthの比較 [重複]について