Skip to content
項目 内容
Workgroup Web Authorization Protocol
Internet-Draft draft-ietf-oauth-first-party-apps-02
Published 2025幎10月20日
Intended Status Standards Track
Expires 2026幎4月23日
Authors A. Parecki | Okta
Authors G. Fletcher | Capital One Financial
Authors P. Kasselman | Defakto Security

OAuth 2.0 for First-Party Applications

Abstract

この文曞は、Authorization Challenge Endpoint を定矩したす。これは、ネむティブな䜓隓を甚いおナヌザヌからの認可を取埗するプロセスを制埡したいファヌストパヌティ・クラむアントをサポヌトしたす。

倚くの堎合、これはネむティブアプリケヌションに適した、完党にブラりザなしの OAuth 2.0 䜓隓を提䟛でき、予期しない状況、高リスク、たたぱラヌ条件においおのみブラりザぞ委譲したす。

About This Document

この泚蚘は、RFC ずしお公開する前に削陀される予定です。

このドラフトの最新改蚂版は、https://drafts.oauth.net/oauth-first-party-apps/draft-ietf-oauth-first-party-apps.html で参照できたす。この文曞のステヌタス情報は、https://datatracker.ietf.org/doc/draft-ietf-oauth-first-party-apps/ で参照できたす。

この文曞に関する議論は、Web Authorization Protocol Working Group のメヌリングリストmailto:oauth@ietf.orgで行われたす。これは https://mailarchive.ietf.org/arch/browse/oauth/ にアヌカむブされおいたす。賌読は https://www.ietf.org/mailman/listinfo/oauth/ から行えたす。

このドラフトの゜ヌスおよび Issue Tracker は、https://github.com/oauth-wg/oauth-first-party-apps で参照できたす。

Status of This Memo

この Internet-Draft は、BCP 78 および BCP 79 の芏定に完党に準拠しお提出されおいたす。

Internet-Drafts は、Internet Engineering Task ForceIETFの䜜業文曞です。他のグルヌプも䜜業文曞を Internet-Drafts ずしお配垃する堎合があるこずに泚意しおください。珟圚の Internet-Drafts の䞀芧は、https://datatracker.ietf.org/drafts/current/ にありたす。

Internet-Drafts は、最倧 6 か月間有効なドラフト文曞であり、い぀でも曎新、眮換、たたは他の文曞によっお廃止される可胜性がありたす。Internet-Drafts を参照資料ずしお䜿甚したり、「䜜業䞭work in progress」ずしお以倖に匕甚したりするこずは䞍適切です。

この Internet-Draft は 2026幎4月23日に期限切れずなりたす。

Copyright (c) 2025 IETF Trust および文曞の著者ずしお特定された個人。All rights reserved.

この文曞は、この文曞の公開日に有効な、BCP 78 および IETF Trust の「IETF 文曞に関する法的芏定」https://trustee.ietf.org/license-infoの適甚を受けたす。これらの文曞には、この文曞に関するあなたの暩利および制限が蚘茉されおいるため、泚意深く確認しおください。この文曞から抜出されたコヌド構成芁玠は、Trust Legal Provisions の Section 4.e で説明されおいる Revised BSD License の文蚀を含めなければならず、たた Revised

Table of Contents

- 1. Introduction

  • 1.1. 䜿甚方法ず適甚可胜性

  • 1.2. この仕様の制限事項

  • 1.3. ナヌザヌ䜓隓に関する考慮事項

- 2. 慣䟋ず定矩

  • 2.1. 甚語

- 3. プロトコル抂芁

  • 3.1. 初回の認可リク゚スト

  • 3.2. リフレッシュトヌクン・リク゚スト

  • 3.3. リ゜ヌス・リク゚スト

- 4. プロトコル・゚ンドポむント

  • 4.1. 認可チャレンゞ・゚ンドポむント

  • 4.2. トヌクン・゚ンドポむント

- 5. 認可開始

  • 5.1. 認可チャレンゞ・リク゚スト

  • 5.2. 認可チャレンゞ・レスポンス

    • 5.2.1. 認可コヌド・レスポンス

    • 5.2.2. ゚ラヌ・レスポンス

  • 5.3. 䞭間リク゚スト

    • 5.3.1. 認可セッション

- 6. トヌクン・リク゚スト

  • 6.1. トヌクン・゚ンドポむントの成功レスポンス

  • 6.2. トヌクン・゚ンドポむントの゚ラヌ・レスポンス

- 7. リ゜ヌスサヌバヌの゚ラヌ・レスポンス

- 8. 認可サヌバヌのメタデヌタ

- 9. セキュリティに関する考慮事項

  • 9.1. ファヌストパヌティ・アプリケヌション

  • 9.2. フィッシング

  • 9.3. クレデンシャル・スタッフィング攻撃

  • 9.4. クラむアント認蚌

  • 9.5. 送信者制玄付きトヌクン

    • 9.5.1. DPoP所持の蚌明の提瀺

    • 9.5.2. その他の所持蚌明メカニズム

  • 9.6. 認可セッション

    • 9.6.1. 認可セッションの DPoP バむンディング

    • 9.6.2. 認可セッションの存続期間

  • 9.7. 耇数のアプリケヌション

    • 9.7.1. ナヌザヌ䜓隓リスク

    • 9.7.2. 技術的リスク

    • 9.7.3. 緩和策

  • 9.8. シングルペヌゞ・アプリケヌション

- 10. IANA に関する考慮事項

  • 10.1. OAuth パラメヌタ登録

  • 10.2. OAuth サヌバヌ・メタデヌタ登録

- 11. References

  • 11.1. 芏範的参照

  • 11.2. 参考参照

  • Appendix A. 䟋のナヌザヌ䜓隓

  • A.1. パスキヌ

  • A.2. 認可サヌバヌぞのリダむレクト

  • A.3. パスワヌドレスなワンタむムパスワヌドOTP

  • A.4. Eメヌル確認コヌド

  • A.5. モバむル確認コヌド

  • A.6. 1週間埌に OTP を䜿っおアプリに再認蚌する

  • A.7. 確認 SMS を甚いたステップアップ認蚌

  • A.8. 登録

  • Appendix B. 実装䟋

  • B.1. 認可チャレンゞ・リク゚スト・パラメヌタ

  • B.2. 認可チャレンゞ・レスポンス・パラメヌタ

  • B.3. 䟋のシヌケンス

  • Appendix C. 蚭蚈目暙

  • Appendix D. 文曞履歎

  • Acknowledgments

  • Authors' Addresses

1. Introduction

この文曞「OAuth for First-Party AppsFiPA」は、OAuth 2.0 Authorization FrameworkRFC6749を、新しい゚ンドポむント authorization_challenge_endpoint により拡匵し、ネむティブな䜓隓を甚いおナヌザヌから認可を取埗するプロセスを制埡したいファヌストパヌティ・アプリケヌションをサポヌトしたす。

クラむアントはナヌザヌから任意の初期情報を収集し、その情報に加えおクラむアントのリク゚ストに関する情報を Authorization Challenge Endpoint に POST し、応答ずしお認可コヌドたたぱラヌコヌドのいずれかを受け取りたす。゚ラヌコヌドは、クラむアントが远加情報を埗るためにナヌザヌぞのプロンプトを継続できるこずを瀺す堎合もあれば、ナヌザヌがブラりザでフロヌを完了するためにクラむアントがブラりザを起動する必芁があるこずを瀺す堎合もありたす。

Authorization Challenge Endpoint は、認可゚ンドポむントぞのリダむレクトたたはブラりザ起動の代わりに OAuth フロヌを開始するために䜿甚されたす。

リダむレクトベヌスの Authorization Code グラントを甚いる完党委任型アプロヌチが䞀般に望たしい䞀方で、このドラフトはクラむアントがナヌザヌず盎接やり取りできるメカニズムを提䟛したす。これは、通垞ファヌストパヌティ・アプリケヌションにおいおそうであるように認可サヌバヌずクラむアントの間に高床な信頌を必芁ずしたす。ネむティブのモバむルたたはデスクトップ・アプリケヌションなど、リダむレクトベヌスのアプロヌチにナヌザビリティ䞊の懞念がある堎合にのみ怜蚎されるべきです。

このドラフトはたた、トヌクンレスポンス通垞はリフレッシュトヌクン・リク゚ストぞの応答で䜿甚されるおよびリ゜ヌスサヌバヌのレスポンスを拡匵し、認可サヌバヌたたはリ゜ヌスサヌバヌが、クラむアントはナヌザヌに察しお認可を再芁求すべきであるこずを瀺せるようにしたす。これには、RFC9470 で定矩されたパラメヌタを含めるこずにより、ステップアップ認蚌の芁求を含めるこずもできたす。

1.1. Usage and Applicability

この仕様は、ファヌストパヌティ・アプリケヌションによっおのみ䜿甚されなければなりたせんMUST。ここでファヌストパヌティ・アプリケヌションずは、認可サヌバヌずアプリケヌションが同䞀の䞻䜓によっお管理され、ナヌザヌが䞡者を同䞀䞻䜓ずしお理解しおいる堎合を指したす。

この仕様はサヌドパヌティ・アプリケヌションによっお䜿甚されおはなりたせんMUST NOT。たた認可サヌバヌは、サヌドパヌティ・アプリケヌションによる䜿甚を防止するための措眮を講じるべきですSHOULD。䟋特定のクラむアント ID に察しおのみこのグラントを有効化し、可胜な堎合にはファヌストパヌティ・アプリを認蚌するための措眮を講じる。䟋えば、I-D.ietf-oauth-attestation-based-client-auth で説明されおいるアプリのアテステヌションを䜿甚する、など。

ここで説明した以倖のシナリオでこの仕様を䜿甚するず、ナヌザヌおよびサヌビス提䟛者にずっお意図しないセキュリティおよびプラむバシヌの問題に぀ながりたす。

この仕様は、ファヌストパヌティのネむティブアプリケヌションモバむルアプリケヌションおよびデスクトップアプリケヌションの䞡方を含むで䜿甚されるよう蚭蚈されおいたす。

耇数のアプリを提䟛しおおり、ナヌザヌが同䞀デバむス䞊で耇数のアプリを䜿甚するこずを想定しおいる堎合、各アプリがこの仕様を実装する、たたはこの仕様を実装する SDK を䜿甚する以倖に、アプリ間でナヌザヌのログむンを共有するより良い方法があるかもしれたせん。䟋えば OpenID.Native-SSO は、ナヌザヌずの䞀切の察話なしに、あるアプリが別のアプリのトヌクンを亀換するこずで新しいトヌクンを取埗するためのメカニズムを提䟛したす。詳现は Section 9.7 を参照しおください。

1.2. Limitations of this specification

この仕様のスコヌプは、ファヌストパヌティ・アプリケヌションに限定されたす。Section 9 の党䜓を確認しおください。たた、耇数のファヌストパヌティ・アプリケヌションをサポヌトする堎合は、Section 9.7 も確認しおください。

このドラフトはネむティブ OAuth 䜓隓のための枠組みを提䟛したすが、各実装は、認可サヌバヌずやり取りする OAuth クラむアントに期埅する具䜓的な振る舞いを定矩する必芁がありたす。このように詳现が明確に定矩されないこずは、通垞は盞互運甚性の䜎䞋に぀ながりたすが、この堎合は蚱容されたす。ずいうのも、この仕様はファヌストパヌティ・アプリケヌションにのみ適甚されるため、密結合な環境で展開されるこずを意図しおいるからです。

1.3. User Experience Considerations

異なる認蚌チャレンゞのナヌザヌ䜓隓䞊の圱響、ならびにナヌザヌが認可を詊みおいるデバむスに぀いお考慮するこずが重芁です。

䟋えば、入力制玄のあるデバむス䟋TVでナヌザヌにパスワヌド入力を求めるず、倚くのナヌザヌ摩擊を生むず同時に、郚屋にいる他者ぞナヌザヌのパスワヌドを晒すこずにもなりたす。䞀方で、䟋えば TV リモコン䞊の指王リヌダヌを甚いお FIDO2 のパスキヌ認蚌を可胜にする、ずいったチャレンゞ手法を甚いるこずは良い䜓隓ずなるでしょう。

認可サヌバヌは、認蚌チャレンゞを提瀺する際にナヌザヌのデバむスを考慮するべきですSHOULD。たた開発者は、この仕様を実装するデバむスがナヌザヌにずっお良い䜓隓を提䟛できるかどうかを考慮するべきですSHOULD。ナヌザヌのデバむスず認蚌チャレンゞ手法の組み合わせが、倚くの摩擊たたはセキュリティリスクを生む堎合、OAuth 2.0 Device Authorization GrantRFC8628のような仕様の䜿甚を怜蚎しおください。OAuth 2.0 Device Authorization GrantRFC8628のようにクロスデバむスの認可メカニズムを甚いる堎合は、Cross-Device Flows: Security Best Current PracticeI-D.ietf-oauth-cross-device-securityで特定されたセキュリティのベストプラクティスを取り入れおください。

2. Conventions and Definitions

この文曞䞭のキヌワヌド「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「NOT RECOMMENDED」「MAY」「OPTIONAL」は、BCP 14RFC2119RFC8174で説明されおいるずおりに解釈されたす。ただし、ここに瀺すように、これらがすべお倧文字で珟れる堎合、か぀その堎合に限りたす。

2.1. Terminology

この仕様は、RFC6749 により定矩される甚語「Access Token」「Authorization Code」「Authorization Endpoint」「Authorization ServerAS」「Client」「Client Authentication」「Client Identifier」「Client Secret」「Grant Type」「Protected Resource」「Redirection URI」「Refresh Token」「Resource Owner」「Resource ServerRS」「Token Endpoint」を䜿甚したす。

TODO: RFC6749 ぞの参照を OAuth 2.1 に眮き換える

3. Protocol Overview

この仕様が OAuth システムのさたざたな郚分を拡匵する䞻芁な方法は 3 ぀ありたす。

3.1. Initial Authorization Request

                                                +-------------------+
                                                |   Authorization   |
                          (B)Authorization      |      Server       |
             +----------+    Challenge Request  |+-----------------+|
(A)Client+---|  First-  |---------------------->||  Authorization  ||
   Starts|   |  Party   |                       ||   Challenge     ||
   Flow  +-->|  Client  |<----------------------||    Endpoint     ||
             |          | (C)Authorization      ||                 ||
             |          |    Error Response     ||                 ||
             |          |         :             ||                 ||
             |          |         :             ||                 ||
             |          | (D)Authorization      ||                 ||
             |          |    Challenge Request  ||                 ||
             |          |---------------------->||                 ||
             |          |                       ||                 ||
             |          |<----------------------||                 ||
             |          | (E) Authorization     |+-----------------+|
             |          |     Code Response     |                   |
             |          |                       |                   |
             |          |                       |                   |
             |          |                       |                   |
             |          | (F) Token             |                   |
             |          |     Request           |+-----------------+|
             |          |---------------------->||      Token      ||
             |          |                       ||     Endpoint    ||
             |          |<----------------------||                 ||
             |          | (G) Access Token      |+-----------------+|
             |          |                       |                   |
             +----------+                       +-------------------+

図: ファヌストパヌティ・クラむアントの認可コヌド・リク゚スト

  • (A) ファヌストパヌティ・クラむアントは、ナヌザヌに「サむンむン」ボタンを提瀺する、たたはナヌザヌからメヌルアドレスやナヌザヌ名などの情報を収集するこずにより、フロヌを開始したす。

  • (B) クラむアントは、Authorization Challenge Endpoint に察しお POST リク゚ストを行うこずにより認可リク゚ストを開始したす。必芁に応じお、ナヌザヌから収集した情報䟋メヌルアドレスたたはナヌザヌ名を含めたす。

  • (C) 認可サヌバヌは、Authorization Challenge Endpoint に提䟛された情報が認可を付䞎するのに十分かどうかを刀断し、認可コヌドで応答するか、たたぱラヌで応答したす。この䟋では、远加情報が必芁であるず刀断し、゚ラヌで応答したす。この゚ラヌには、次に収集すべき情報に぀いおクラむアントを導くための远加情報が含たれる堎合がありたす。情報を収集しお Authorization Challenge Endpoint に送信し、その埌゚ラヌたたは認可コヌドを受け取るずいうこのパタヌンは、数回繰り返される可胜性がありたす。

  • (D) クラむアントは远加情報䟋眲名枈みのパスキヌ・チャレンゞ、たたはメヌルからのワンタむムコヌドを収集し、Authorization Challenge Endpoint に察しお POST リク゚ストを行いたす。

  • (E) Authorization Challenge Endpoint は認可コヌドを返したす。

  • (F) クラむアントは、ステップ (E) で受け取った認可コヌドを送信し、Token Endpoint からトヌクンを取埗したす。

  • (G) 認可サヌバヌは Token Endpoint から Access Token を返したす。

3.2. Refresh Token Request

クラむアントがリフレッシュトヌクンを䜿甚しお新しいアクセストヌクンを取埗する際、認可サヌバヌは、ナヌザヌの再認蚌が必芁であるこずを瀺すために、゚ラヌで応答しおもよいMAYです。

3.3. Resource Request

リ゜ヌスサヌバヌに察しおリ゜ヌスリク゚ストを行う際、リ゜ヌスサヌバヌは OAuth 2.0 Step-Up Authentication Challenge ProtocolRFC9470に埓っお゚ラヌで応答しおもよくMAY、ナヌザヌの再認蚌が必芁であるこずを瀺したす。

4. Protocol Endpoints

4.1. Authorization Challenge Endpoint

認可チャレンゞ・゚ンドポむントは、この仕様により定矩される新しい゚ンドポむントであり、ファヌストパヌティ・アプリケヌションが認可コヌドを取埗するために䜿甚したす。

認可チャレンゞ・゚ンドポむントは、認可サヌバヌ䞊の HTTP API であり、application/x-www-form-urlencoded 圢匏を甚いお HTTP リク゚ストメッセヌゞボディ内にパラメヌタを含めた HTTP POST リク゚ストを受け付けたす。この圢匏は、RFC6749 の Appendix B に蚘茉されおいるずおり、UTF-8 の文字゚ンコヌディングを持ちたす。認可チャレンゞ・゚ンドポむントの URL は "https" スキヌムを䜿甚しなければなりたせんMUST。

認可サヌバヌが Token Endpoint においおこのクラむアントに察しおクラむアント認蚌を芁求する堎合、認可サヌバヌは Authorization Challenge Endpoint においおもこのクラむアントに察しおクラむアント認蚌を芁求しなければなりたせんMUST。詳现は Section 9.4 を参照しおください。

この仕様をサポヌトする認可サヌバヌは、Section 8 で定矩される authorization_challenge_endpoint パラメヌタを䜿甚しお、認可サヌバヌ・メタデヌタ文曞RFC8414に自身の認可チャレンゞ・゚ンドポむントの URL を含めるべきですSHOULD。

この゚ンドポむントは、認可゚ンドポむント向けに RFC6749 で定矩される認可リク゚スト・パラメヌタに加え、認可゚ンドポむント向けに定矩されるすべおの適甚可胜な拡匵を受け付けたす。そのような拡匵の䟋ずしお、Proof Key for Code ExchangePKCERFC7636、Resource IndicatorsRFC8707、および OpenID ConnectOpenIDがありたす。いく぀かの拡匵パラメヌタはりェブ文脈では意味を持぀䞀方で、ネむティブなメカニズムでは意味を持たないこずに泚意するこずが重芁です䟋response_mode=query。ある拡匵が、このナヌスケヌスで意味を持たないパラメヌタを定矩しおいる堎合に AS が䜕をするかに぀いおはスコヌプ倖です。

クラむアントは、ナヌザヌから収集した情報䟋眲名枈みパスキヌ・チャレンゞたたは MFA コヌドを含めおも含めなくおも、認可フロヌを開始したす。

認可チャレンゞ・゚ンドポむントのレスポンスは、認可コヌドたたぱラヌコヌドのいずれかであり、たたクラむアントが埌続のリク゚ストで䜿甚する auth_session を含む堎合もありたす。

クラむアントず認可サヌバヌの間のさらなる通信は、Authorization Challenge Endpoint たたは認可サヌバヌ䞊のその他のプロプラむ゚タリな゚ンドポむントで発生しおもよいMAYです。

4.2. Token endpoint

トヌクン・゚ンドポむントは、OAuth 2.0RFC6749の Section 3.2 で説明されおいるずおり、クラむアントがその認可グラントたたはリフレッシュトヌクンを提瀺しおアクセストヌクンを取埗するために䜿甚されたす。

この仕様は、認可サヌバヌがナヌザヌに察する远加の認蚌が必芁であるこずを瀺せるようにするため、トヌクン・゚ンドポむントのレスポンスを拡匵したす。

5. Authorization Initiation

クラむアントは、たずナヌザヌに察しおナヌザヌ識別子たたはその他のアカりント情報の入力を促すこずで、認可フロヌを開始したい堎合がありたす。認可チャレンゞ・゚ンドポむントは、このログむンヒントを収集し、次のステップMFA フロヌを行うのか、OAuth のリダむレクトベヌスのフロヌを実行するのかぞクラむアントを誘導するための新しい゚ンドポむントです。

この仕様のセキュリティを維持するために、認可サヌバヌは、認蚌フロヌを続行する前にクラむアントの「ファヌストパヌティ性」を怜蚌しなければなりたせんMUST。远加の考慮事項に぀いおは Section 9.1 を参照しおください。

5.1. Authorization Challenge Request

クラむアントは、HTTP リク゚ストボディにおいお、UTF-8 の文字゚ンコヌディングを持぀ application/x-www-form-urlencoded 圢匏を䜿甚し、以䞋のパラメヌタに加えお任意の拡匵からのパラメヌタを远加するこずにより、認可チャレンゞ・゚ンドポむントぞリク゚ストを行いたす。

"client_id":

クラむアントが認可サヌバヌに察しお認蚌を行っおおらず、か぀ auth_session が含たれおいない堎合に REQUIRED です。

"scope":

OPTIONAL。RFC6749 で定矩される OAuth スコヌプです。

"auth_session":

OPTIONAL。クラむアントが以前に auth session を取埗しおいる堎合Section 5.3.1 で説明。

"code_challenge":

OPTIONAL。RFC7636 で定矩される code challenge です。詳现は Section 5.2.2.1 を参照しおください。

"code_challenge_method":

OPTIONAL。RFC7636 で定矩される code challenge method です。詳现は Section 5.2.2.1 を参照しおください。

この゚ンドポむントで䜿甚される远加のパラメヌタは、特定の実装およびこの仕様ぞの拡匵によっお定矩されおもよいMAYです。

䟋えば、ナヌザヌの電話番号を䞎えおフロヌを開始するために、クラむアントは次のリク゚ストを行いたす。改行は説明のためにのみ瀺されおいたす。

POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

login_hint=%2B1-310-123-4567&scope=profile &client_id=bb16c14c73415

5.2. Authorization Challenge Response

認可サヌバヌは、ここたでに提䟛された情報が認可コヌドを発行するのに十分かどうかを刀断し、十分であれば認可コヌドで応答したす。情報が認可コヌドを発行するのに十分でない堎合、認可サヌバヌぱラヌレスポンスで応答しなければなりたせんMUST。

5.2.1. Authorization Code Response

認可サヌバヌは、RFC8259 で定矩される application/json メディアタむプを䜿甚しお HTTP レスポンス・コンテンツを䜜成し、以䞋のパラメヌタず HTTP 200OKステヌタスコヌドにより認可コヌドを発行したす。

"authorization_code":

REQUIRED。認可サヌバヌによっお発行された認可コヌドです。

䟋:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{ "authorization_code": "uY29tL2F1dGhlbnRpY" }

5.2.2. Error Response

リク゚ストに無効なパラメヌタたたは䞍正なデヌタが含たれる堎合、たたは認可サヌバヌがナヌザヌず盎接やり取りしたい堎合、認可サヌバヌは以䞋で別途指定されない限りHTTP 400Bad Requestステヌタスコヌドで応答し、レスポンスに以䞋のパラメヌタを含めたす。

"error":

REQUIRED。以䞋のいずれかの単䞀の ASCIIUSASCII゚ラヌコヌドです。

"invalid_request":

リク゚ストに必須パラメヌタが欠けおいる、サポヌトされないパラメヌタ倀が含たれる、パラメヌタが重耇しおいる、耇数のクレデンシャルが含たれおいる、クラむアント認蚌に耇数のメカニズムが甚いられおいる、たたはその他の理由で䞍正圢匏です。

"invalid_client":

クラむアント認蚌に倱敗したした䟋䞍明なクラむアント、クラむアント認蚌が含たれおいない、たたはサポヌトされない認蚌方匏。認可サヌバヌは、どの HTTP 認蚌スキヌムがサポヌトされおいるかを瀺すために、HTTP 401Unauthorizedステヌタスコヌドを返しおもよいMAYです。クラむアントが Authorization リク゚ストヘッダフィヌルドを介しお認蚌を詊みた堎合、認可サヌバヌは HTTP 401Unauthorizedステヌタスコヌドで応答し、クラむアントが䜿甚した認蚌スキヌムに䞀臎する WWW-Authenticate レスポンスヘッダフィヌルドを含めなければなりたせんMUST。

"unauthorized_client":

認蚌枈みのクラむアントが、この゚ンドポむントの䜿甚を蚱可されおいたせん。

"invalid_session":

提䟛された auth_session が無効、期限切れ、倱効枈み、たたはその他の理由で無効です。

"invalid_scope":

芁求されたスコヌプが無効、䞍明、䞍正圢匏、たたはリ゜ヌスオヌナヌにより付䞎されたスコヌプを超えおいたす。

"insufficient_authorization":

提瀺された認可が䞍十分であり、認可サヌバヌはクラむアントに察しお認可を完了するための远加ステップを取るよう芁求しおいたす。

"redirect_to_web":

リク゚ストは、ナヌザヌずのさらなる盎接的なやり取りによっおは満たすこずができたせん。代わりに、クラむアントは新しい認可コヌド・フロヌを開始し、ナヌザヌがりェブブラりザ内で認可サヌバヌずやり取りできるようにすべきです。詳现は Section 5.2.2.1 を参照しおください。

error パラメヌタの倀は、集合 %x20-21 / %x23-5B / %x5D-7E の倖にある文字を含んではなりたせんMUST NOT。

認可サヌバヌは、認可サヌバヌの芁件に基づいお、これらの゚ラヌコヌドをカスタムメッセヌゞで拡匵しおもよいMAYです。

"error_description":

OPTIONAL。発生した゚ラヌの理解を助けるために、クラむアント開発者を支揎する远加情報を提䟛する、人間が読める ASCIIUSASCIIテキストです。error_description パラメヌタの倀は、集合 %x20-21 / %x23-5B / %x5D-7E の倖にある文字を含んではなりたせんMUST NOT。

"error_uri":

OPTIONAL。゚ラヌに関する情報を含む、人間が読めるりェブペヌゞを識別する URI です。これは、クラむアント開発者に゚ラヌに関する远加情報を提䟛するために䜿甚されたす。error_uri パラメヌタの倀は URI-reference 構文に適合しなければならずMUST、したがっお集合 %x21 / %x23-5B / %x5D-7E の倖にある文字を含んではなりたせんMUST NOT。

"auth_session":

OPTIONAL。auth session により、認可サヌバヌは、このクラむアントによる埌続リク゚ストを、進行䞭の認可リク゚スト・シヌケンスに関連付けるこずができたす。クラむアントは、゚ラヌレスポンスずずもに auth_session を受け取った堎合、認可チャレンゞ・゚ンドポむントぞのフォロヌアップ・リク゚ストに auth_session を含めなければなりたせんMUST。

"request_uri":

OPTIONAL。RFC9126 の Section 2.2 で説明される request URI です。

"expires_in":

OPTIONAL。RFC9126 の Section 2.2 で説明される、request_uri の有効期間秒です。

この仕様は、ナヌザヌを適切に認蚌するためにクラむアントが取らなければならないアクションに関連する新しい゚ラヌコヌドを、認可サヌバヌが定矩するこずを芁求したす。これらの新しい゚ラヌコヌドは、この仕様の認可サヌバヌ実装に固有であり、意図的にスコヌプ倖ずされおいたす。

これらのパラメヌタは、RFC7159 で定矩される application/json メディアタむプを甚いお、HTTP レスポンスのコンテンツに含められたす。パラメヌタは、各パラメヌタを最䞊䜍の構造レベルに远加するこずで JSON 構造ぞ盎列化されたす。パラメヌタ名ず文字列倀は JSON 文字列ずしお含められたす。数倀は JSON 数倀ずしお含められたす。パラメヌタの順序は重芁ではなく、倉わり埗たす。

認可サヌバヌは、実装に応じおレスポンスに远加のパラメヌタを定矩しおもよいMAYです。認可サヌバヌはたた、レスポンスが JSON であり application/<AS-defined>+json に適合する限り、゚ラヌレスポンスに察しおより具䜓的なコンテンツタむプを定矩しおもよいMAYです。

5.2.2.1. Redirect to Web Error Response

認可サヌバヌは、リスク評䟡、アプリケヌションでサポヌトされおいない新しい認蚌方匏の導入、たたはアカりント回埩のような䟋倖フロヌを凊理するために、ナヌザヌず盎接やり取りするこずを遞択する堎合がありたす。クラむアントにこの゚ラヌを瀺すために、認可サヌバヌは、䞊で定矩した redirect_to_web ゚ラヌコヌドを持぀゚ラヌレスポンスを返したす。

この堎合、クラむアントは RFC6749 および RFC7636 に埓っお、PKCE を䌎う新しい OAuth Authorization Code フロヌを開始するこずが期埅されたす。

クラむアントがこの゚ラヌレスポンスの発生頻床が高いず芋蟌む堎合、クラむアントは初回の認可チャレンゞ・リク゚ストに PKCERFC7636の code_challenge を含めおもよいMAYです。これにより、認可サヌバヌは実質的に認可チャレンゞ・リク゚ストを PARRFC9126リク゚ストずしお扱い、゚ラヌレスポンスにおいお RFC9126 で定矩される request_uri および expires_in を返せるようになりたす。その埌、クラむアントは request_uri 倀を䜿甚しお、RFC9126 の Section 4 で定矩される認可リク゚ストを構築したす。

5.3. Intermediate Requests

䞊で説明した insufficient_authorization ゚ラヌを認可サヌバヌが返した堎合、これは、クラむアントがナヌザヌに察しお芁求すべき远加情報があるこずを瀺しおいたす。そしおクラむアントは、認可リク゚ストが満たされ、認可コヌドが返されるたで、ナヌザヌから情報を芁求し続け、認可サヌバヌぞのリク゚ストを継続すべきです。

これらの䞭間リク゚ストはこの仕様のスコヌプ倖であり、認可サヌバヌによっお定矩されるこずが期埅されたす。これらのリク゚ストの圢匏は、初回の認可チャレンゞ・リク゚ストの圢匏に適合する必芁はありたせん䟋リク゚スト圢匏が application/x-www-form-urlencoded ではなく application/json である堎合がありたす。

これらの䞭間リク゚ストは、Authorization Challenge Endpoint ではなく、認可サヌバヌ䞊のプロプラむ゚タリな゚ンドポむントに送信されおもよいMAYです。

5.3.1. Auth Session

auth_session は、同䞀クラむアントからの埌続リク゚ストを関連付けられるようにするために、認可サヌバヌが発行する倀です。これは、ブラりザのクッキヌが同䞀ブラりザによる耇数のリク゚ストを認可サヌバヌに関連付ける方法に類䌌するこずを意図しおいたす。

auth_session の倀はクラむアントにずっお完党に䞍透明であり、そのため認可サヌバヌは、䟋えばランダム文字列を䜿甚する、たたはバック゚ンドで状態を維持しおいない堎合には JWE を䜿甚するなどしお、クラむアントによる倀の怜査からこの倀を適切に保護しなければなりたせんMUST。

クラむアントが auth_session を持っおいる堎合、クラむアントは認可チャレンゞ・゚ンドポむントぞの将来のリク゚ストにそれを含めなければなりたせんMUST。クラむアントは、将来のリク゚ストで䜿甚できるようにするため、認可コヌドの発行埌も auth_session を保存しなければなりたせんMUST。

この仕様で定矩されるすべおのレスポンスは、新しい auth_session 倀を含む堎合がありたす。クラむアントは auth_session 倀が固定であるず仮定しおはならずMUST NOT、レスポンスで auth_session 倀を受け取った堎合に保存枈みの auth_session 倀を曎新できるよう備えなければなりたせんMUST。

セッションハむゞャックのリスクを緩和するため、'auth_session' はデバむスにバむンドされなければならずMUST、認可サヌバヌは、それがバむンドされたデバむスずは異なるデバむスから提瀺された堎合には 'auth_session' を拒吊しなければなりたせんMUST。

远加のセキュリティ䞊の考慮事項に぀いおは Section 9.6 を参照しおください。

6. Token Request

クラむアントは、認可チャレンゞ・゚ンドポむントから取埗した認可コヌドを䜿甚しお、トヌクン・゚ンドポむントぞリク゚ストを行いたす。

この仕様は、RFC6749 の Section 4.1.3 で定矩されるトヌクン・リク゚スト・パラメヌタを超える远加パラメヌタを定矩したせん。しかし泚目すべき点ずしお、このリク゚ストには redirect_uri パラメヌタは含たれたせん。なぜなら、認可リク゚ストに redirect_uri パラメヌタが含たれおいなかったためです。

6.1. Token Endpoint Successful Response

この仕様は、RFC6749 の Section 5.1 で定矩される OAuth 2.0 のトヌクンレスポンスを、Section 5.3.1 で定矩される远加パラメヌタ auth_session によっお拡匵したす。

成功したトヌクンレスポンスの䟋を以䞋に瀺したす。

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{ "access_token": "2YotnFZFEjr1zCsicMWpAA", "token_type": "Bearer",
"expires_in": 3600, "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
"auth_session": "uY29tL2F1dGhlbnRpY" }

このレスポンスには、クラむアントが Section 5.3.1 で説明されるずおり、認可チャレンゞ・゚ンドポむントぞの埌続リク゚ストに含めるこずが期埅される auth_session パラメヌタが含たれおもよいMAYです。auth_session パラメヌタはたた、認可コヌドがこの仕様で定矩されるフロヌではなく、埓来の OAuth 認可コヌド・フロヌにより取埗された堎合であっおも含められおよいMAYです。

トヌクンレスポンスに auth_session パラメヌタを含めるこずで、ステップアップ認蚌RFC9470のようなフロヌが可胜ずなり、認可サヌバヌは以前のセッションのコンテキストを埩元し、必芁なステップアップ芁玠のみを求めおプロンプトできたす。䟋のアプリケヌションに぀いおは Appendix A.7 を参照しおください。

6.2. Token Endpoint Error Response

有効なリフレッシュトヌクンを甚いたリク゚ストを含め、トヌクン・゚ンドポむントぞのあらゆるリク゚ストに察しお、認可サヌバヌは成功したアクセストヌクンレスポンスの代わりに、認可チャレンゞで応答できたす。

認可チャレンゞ・゚ラヌレスポンスは、OAuth 2.0RFC6749の Section 5.2 で定矩される特定皮別の゚ラヌレスポンスであり、゚ラヌコヌドが次の倀に蚭定されたす。

"error": "insufficient_authorization":

提瀺された認可が䞍十分であり、認可サヌバヌはクラむアントに察しお認可を完了するための远加ステップを取るよう芁求しおいたす。

さらに、このレスポンスには、クラむアントが認可チャレンゞ・゚ンドポむントぞの埌続リク゚ストに含めるこずが期埅される auth_session パラメヌタが含たれおもよいMAYです。

"auth_session":

OPTIONAL。任意の auth session 倀により、認可サヌバヌは、このクラむアントによる埌続リク゚ストを進行䞭の認可リク゚スト・シヌケンスに関連付けるこずができたす。クラむアントは、゚ラヌレスポンスずずもに auth_session を受け取った堎合、チャレンゞ・゚ンドポむントぞのフォロヌアップ・リク゚ストに auth_session を含めなければなりたせんMUST。

䟋:

HTTP/1.1 403 Forbidden
Content-Type: application/json
Cache-Control: no-store

{ "error": "insufficient_authorization", "auth_session": "uY29tL2F1dGhlbnRpY"
}

7. Resource Server Error Response

Step-Up AuthenticationRFC9470は、リ゜ヌスサヌバヌがクラむアントに察しお、OpenIDOpenID由来の acr_values および max_age を含む新しい認可リク゚ストを開始するよう䌝えるために䜿甚できる、新しい゚ラヌコヌド倀を定矩したす。この゚ラヌレスポンスを受け取るず、クラむアントは認可チャレンゞ・゚ンドポむントで新しいファヌストパヌティ認可リク゚ストを開始し、゚ラヌレスポンスで返された acr_values、max_age、および scope を含めたす。

この仕様は、RFC9470 および RFC6750 で定矩されるものを超えお、リ゜ヌスサヌバヌの゚ラヌレスポンスのための新しいパラメヌタを定矩したせん。

8. Authorization Server Metadata

以䞋の認可サヌバヌ・メタデヌタ・パラメヌタRFC8414が導入され、ファヌストパヌティ・アプリケヌションに関するサヌバヌの胜力およびポリシヌを瀺したす。

"authorization_challenge_endpoint":

クラむアントが認可リク゚ストを開始し、最終的に認可コヌドを取埗できる認可チャレンゞ・゚ンドポむントの URL です。

9. Security Considerations

9.1. First-Party Applications

ファヌストパヌティ・アプリケヌションずは、アプリケヌションが䜿甚する認可サヌバヌず同䞀の䞻䜓によっお管理され、ナヌザヌが䞡者を同䞀䞻䜓ずしお理解しおいるアプリケヌションです。

ファヌストパヌティ・アプリケヌションにおいおは、ナヌザヌがアプリケヌションず認可サヌバヌが同䞀ブランドに属しおいるず認識するこずが重芁です。䟋えば、銀行が自瀟のモバむルアプリケヌションを公開する堎合です。

この仕様は、クラむアントアプリケヌションが゚ンドナヌザヌず盎接やり取りでき、か぀アプリケヌションがナヌザヌから収集したあらゆる情報を認可サヌバヌぞ送信するこずを扱うため、認可サヌバヌがクラむアントに察しおも高い信頌を有する堎合に、ファヌストパヌティ・アプリケヌションにのみ䜿甚されるこずが期埅されたす。

この仕様は、認可サヌバヌがアプリケヌションのファヌストパヌティ性に察する信頌をどのように確立するかに぀いお芏定的ではありたせん。モバむルプラットフォヌムでは、倚くがアプリストアぞアプリを䜜成眲名アップロヌドした䞻䜓を識別するために利甚できる、アプリケヌション・アテステヌションの䜕らかのメカニズムをサポヌトしおいたす。アプリのアテステヌションは、アテステヌションベヌスのクラむアント認蚌I-D.ietf-oauth-attestation-based-client-authや動的クラむアント登録RFC7591ずいったメカニズムず組み合わせお、クラむアント怜蚌ファヌストパヌティ性に加えお匷力なクラむアント認蚌を可胜にできたす。必芁ずなる正確な手順はこの仕様のスコヌプ倖です。ブラりザ内䟋Single Page Appsずいう文脈で動䜜するアプリケヌションでは、クラむアントのファヌストパヌティ性を怜蚌するこずがはるかに困難である点に泚意しおください。远加の詳现に぀いおは Section 9.8 を参照しおください。

9.2. Phishing

この仕様を䜿甚するずフィッシングのリスクが増加する方法は 2 ぀ありたす。

  1. 悪意あるアプリケヌションこの仕様では、クラむアントが゚ンドナヌザヌず盎接やり取りし、ナヌザヌから提䟛された情報を収集しお認可サヌバヌぞ送信したす。攻撃者がクラむアントになりすたし、ナヌザヌをうたく隙しおそれを利甚させた堎合、ナヌザヌは悪意あるアプリケヌションに察しお自分のクレデンシャルを枡しおいるこずに気付かないかもしれたせん。

  2. ナヌザヌ教育リダむレクトベヌスの認可コヌド・フロヌを甚いる埓来の OAuth 展開では、ナヌザヌは認可サヌバヌでのみクレデンシャルを入力し、他の「停」りェブサむトでクレデンシャルを入力しないよう説明するのは簡単です。この仕様により、ナヌザヌがクレデンシャルを入力するこずが期埅される新しい堎所を導入するこずで、クレデンシャルを盗もうずしおいる可胜性のある他の停のログむンプロンプトを、ナヌザヌがどのように芋分けるべきかを教えるこずがより耇雑になりたす。

これらのリスクのため、認可サヌバヌは、自身のリスク評䟡に基づき、プロセスのいかなる段階においおもナヌザヌにリダむレクトベヌスのフロヌを通らせるこずを芁求するこずを決定しおもよいMAYです。

9.3. Credential Stuffing Attacks

認可チャレンゞ・゚ンドポむントは、ナヌザヌのクレデンシャルを盎接受け取り、認可コヌドを返すこずができたす。これは、アプリケヌションの真正性を確保するための远加措眮が取られない堎合、クレデンシャル・スタッフィング攻撃を実行する新たなベクタを露出させたす。

認可サヌバヌは、ブラりザベヌスの認蚌フロヌにおいおこのリスクを監芖し䜎枛するために、組み蟌みたたはサヌドパヌティのセキュリティツヌルの組み合わせを既に備えおいる堎合がありたす。実装者は、認可チャレンゞ・゚ンドポむントにおいおこのリスクを䜎枛するために、同様のセキュリティ察策を怜蚎するべきですSHOULD。さらに、可胜な堎合にはアテステヌション API を䜿甚し、リク゚ストが同䞀䞻䜓が所有するアプリケヌションから発生しおいるずいう信頌床の氎準を認可サヌバヌぞ䞻匵するべきですSHOULD。

9.4. Client Authentication

通垞、モバむルおよびデスクトップ・アプリケヌションは OAuth においお「パブリッククラむアント」ず芋なされたす。ずいうのも、静的に構成されたクラむアント・クレデンシャルのセットを同梱しお出荷するこずができないためですRFC8252。このため、このパタヌンを展開する者にずっお、クラむアントのなりすたしは懞念事項ずなるべきです。クラむアント認蚌がない堎合、悪意あるナヌザヌたたは攻撃者は、アプリケヌションが認可サヌバヌぞ行うリク゚ストを暡倣し、正圓なクラむアントであるかのように装うこずができたす。

実装者は、オペレヌティングシステムから利甚可胜なアテステヌション API を䜿甚するなど、クラむアントなりすたしのリスクを制限するための远加措眮を怜蚎するべきですSHOULD。

9.5. Sender-Constrained Tokens

認可チャレンゞ・リク゚ストぞの応答ずしお発行されるトヌクンは、トヌクン窃取およびリプレむのリスクを緩和するために、送信者制玄されるべきですSHOULD。

所持蚌明Proof-of-Possession技術は、トヌクンを暗号鍵ぞバむンドするこずで、トヌクンを制玄したす。トヌクンが提瀺されるたびに、そのトヌクンを提瀺しおいるクラむアントが、トヌクンにバむンドされた暗号鍵も制埡しおいるこずを瀺す蚌明を䌎わなければなりたせんMUST。所持蚌明の送信者制玄付きトヌクンが、暗号鍵の有効な所持蚌明なしに提瀺された堎合、それは拒吊されなければなりたせんMUST。

9.5.1. DPoP: Demonstrating Proof-of-Possession

DPoPRFC9449は、OAuthRFC6749のアクセストヌクンおよびリフレッシュトヌクンを送信者制玄するための、アプリケヌション局のメカニズムです。DPoP がトヌクンを送信者制玄するために䜿甚される堎合、クラむアントは、認可サヌバヌぞのあらゆるトヌクンリク゚ストおよびリ゜ヌスサヌバヌずのやり取りのたびに DPoP を䜿甚するべきですSHOULD。

DPoP には、認可コヌドを DPoP 鍵にバむンドしお、認可フロヌ党䜓の゚ンドツヌ゚ンドのバむンディングを可胜にするための、任意の機胜が含たれたす。この仕様のバックチャネル的性質を螏たえるず、リダむレクトベヌスの認可コヌド・フロヌず比范しお、攻撃者が認可コヌドおよび PKCE のコヌド怜蚌子ぞアクセスする機䌚ははるかに少なくなりたす。この仕様では、認可コヌドはバックチャネル・リク゚ストを介しお取埗されたす。それにもかかわらず、認可コヌドのバむンディングを省略するず、DPoP が提䟛する゚ンドツヌ゚ンド保護にギャップが残るため、DPoP の認可コヌド・バむンディングは䜿甚されるべきですSHOULD。

DPoP による認可コヌド・バむンディングのメカニズムは、RFC9449 の Section 10.1 で Pushed Authorization RequestsPARに察しお定矩されるものず同様です。DPoP で認可コヌドをバむンドするために、クラむアントは Authorization Challenge Request に DPoP ヘッダを远加しなければなりたせんMUST。認可サヌバヌは、RFC9449 の Section 4.3 で定矩されるずおり、DPoP ヘッダに含たれおいた DPoP proof JWT を怜蚌しなければなりたせんMUST。認可サヌバヌは、埌続のすべおの Authorization Challenge Request および最終的なトヌクンリク゚ストにおいお同じ鍵が䜿甚されるこずを保蚌しなければなりたせんMUST。認可サヌバヌは、元の Authorization Challenge Request で提瀺された同じ鍵に察する DPoP proof が提䟛されない限り、埌続の Authorization Challenge Request たたは最終的なトヌクンリク゚ストを拒吊しなければなりたせんMUST。

䞊蚘メカニズムは、リク゚ストの皮類に関係なく、クラむアントが認可サヌバヌぞのすべおのリク゚ストに DPoP ヘッダを付䞎できるため、クラむアントの実装を単玔化したす。このメカニズムは、DPoP ヘッダが秘密鍵の所持蚌明を含むため、dpop_jkt パラメヌタを䜿甚するよりも匷いバむンディングを提䟛したす。

9.5.2. Other Proof of Possession Mechanisms

アクセストヌクンおよびリフレッシュトヌクンを送信者制玄するために、他の所持蚌明メカニズムを䜿甚できる可胜性がありたす。これらのメカニズムを定矩するこずは、この仕様のスコヌプ倖です。

9.6. Auth Session

9.6.1. Auth Session DPoP Binding

クラむアントず認可サヌバヌが、アクセストヌクンおよびたたは認可コヌドの DPoP バむンディングを䜿甚しおいる堎合、auth_session 倀も保護されるべきですSHOULD。認可サヌバヌは、auth_session 倀を DPoP 公開鍵に関連付けるべきですSHOULD。これにより、認可サヌバヌが DPoP proof に远加のクレヌムを含める必芁がなくなる䞀方で、proof を提瀺するクラむアントが DPoP 鍵を制埡しおいるずいう保蚌の恩恵を受けられたす。auth_session 倀を DPoP 公開鍵に関連付けるために、認可サヌバヌは次を行いたす。

  • クラむアントが DPoP proof を提瀺する際に、同じ DPoP 公開鍵が䜿甚されおいるこずを確認しなければなりたせんMUST。

  • クラむアントが Section 5.1 で説明されるずおり Authorization Challenge Request に auth_session を含めるたびに、クラむアントが察応する秘密鍵を制埡しおいるこずを保蚌するために DPoP proof を怜蚌しなければなりたせんMUST。

auth_session 倀の DPoP バむンディングにより、auth_session が参照するコンテキストが盗たれお別のデバむスにより再利甚されるこずを防げたす。

9.6.2. Auth Session Lifetime

この仕様は、auth_session 倀の存続期間に぀いお、いかなる芁件も仮定も眮きたせん。存続期間ず倱効は認可サヌバヌの裁量に委ねられ、認可サヌバヌは、予定された期限切れ、セキュリティむベント、たたは倱効むベントなど、いかなる理由によっおもこの倀を無効化するこずを遞択できたす。

クラむアントは、auth_session 倀の特定の存続期間に぀いお、いかなる仮定もしおはならずMUST NOT、たたそれに䟝存しおはなりたせん。

9.7. Multiple Applications

AS が耇数のファヌストパヌティ・アプリケヌションをサポヌトする堎合、远加のリスクをいく぀か考慮するこずが重芁です。これらのリスクは、以䞋で説明する 2 ぀の䞻芁カテゎリ、すなわち「䜓隓リスクExperience Risk」ず「技術的リスクTechnical Risk」に分類されたす。

9.7.1. User Experience Risk

ナヌザヌが異なるナヌザヌ䜓隓の䞭で認蚌クレデンシャルの提䟛を求められるたびに、ナヌザヌが芋た目の異なる䜓隓でクレデンシャルを入力するこずに慣れおしたうため、フィッシング攻撃の被害に遭う可胜性が高たる効果がありたす。耇数のファヌストパヌティ・アプリケヌションがサポヌトされる堎合、実装は、ネむティブ䜓隓がすべおのファヌストパヌティ・アプリケヌションにわたっお同䞀であるこずを保蚌しなければなりたせんMUST。

もう䞀぀の䜓隓リスクは、芋た目の異なる䜓隓や振る舞いによっお匕き起こされるナヌザヌの混乱です。これは、ナヌザヌがファヌストパヌティ・アプリケヌションの認蚌䜓隓を完了しない可胜性を高めるこずがありたす。

9.7.2. Technical Risk

䜓隓䞊のリスクに加えお、ファヌストパヌティ・アプリケヌションにおける耇数の実装は、誀った実装のリスクを高めるずずもに、各実装がそれぞれ固有の匱点を露出し埗るため、攻撃察象領域アタックサヌフェスを拡倧したす。

9.7.3. Mitigation

これらのリスクに察凊するため、耇数のファヌストパヌティ・アプリケヌションをサポヌトしなければならず、か぀ OpenID.Native-SSO のような他の方法が適甚できない堎合には、異なるアプリケヌション間で実装の䞀貫性を確保し、すべおのファヌストパヌティ・アプリでナヌザヌ䜓隓を同䞀にするために、クラむアントサむドの SDK を䜿甚するこずが RECOMMENDED です。

9.8. Single Page Applications

Single Page ApplicationsSPAは、ブラりザむンスタンスのコンテキスト内でスクリプト蚀語ずしお実行されたす。この環境は、ネむティブアプリケヌションず比べお、特に次のようないく぀かの固有の課題を䌎いたす。

  • Cross-Site ScriptingXSS攻撃の可胜性による、重倧な攻撃ベクタ

  • ブラりザベヌスのアプリケヌションのファヌストパヌティ性を安党にアテストするための遞択肢が少ないこず

ブラりザにおける XSS 攻撃のリスクに぀いおの詳现な議論は、I-D.ietf-oauth-browser-based-apps を参照しおください。

さらに、Single-Page App の性質䞊、ナヌザヌは既にブラりザ文脈にいるため、埓来の OAuth Authorization Code Flow のためにフルペヌゞのリダむレクトやポップアップりィンドりを行うナヌザヌ䜓隓䞊のコストは、ネむティブアプリケヌションでそれを行うコストよりはるかに小さくなりたす。ブラりザでこの仕様を実装する耇雑さずリスクは、その文脈で埗られるであろうナヌザヌ䜓隓䞊の利埗を、おそらく䞊回りたせん。

これらの理由により、ブラりザベヌスのアプリケヌションでこの仕様を䜿甚するこずは NOT RECOMMENDED です。

10. IANA Considerations

10.1. OAuth Parameters Registration

IANA は、RFC6749 によっお確立された IANA「OAuth Parameters」レゞストリIANA.oauth-parametersに、以䞋の倀をTBD登録したした。

Parameter name: auth_session

Parameter usage location: トヌクンレスポンス

Change Controller: IETF

Specification Document: この仕様の Section 5.4

10.2. OAuth Server Metadata Registration

IANA は、RFC8414 によっお確立された IANA「OAuth Authorization Server Metadata」レゞストリIANA.oauth-parametersに、以䞋の倀をTBD登録したした。

Metadata Name: authorization_challenge_endpoint

Metadata Description: 認可サヌバヌの認可チャレンゞ・゚ンドポむントの URL。

Change Controller: IESG

Specification Document: この仕様の Section 4.1

11. References

11.1. Normative References

[I-D.ietf-oauth-cross-device-security]

Kasselman, P., Fett, D., and F. Skokan, 「Cross-Device Flows: Security Best Current Practice」, Work in Progress, Internet-Draft, draft-ietf-oauth-cross-device-security-12, 5 September 2025, 。

[IANA.JWT]

「 BROKEN REFERENCE 」。

[IANA.oauth-parameters]

IANA, 「OAuth Parameters」, 。

[OpenID]

Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and C. Mortimore, 「OpenID Connect Core 1.0」, November 2014, 。

[OpenID.Native-SSO]

Fletcher, G., 「OpenID Connect Native SSO for Mobile Apps」, November 2022, 。

[RFC2119]

Bradner, S., 「Key words for use in RFCs to Indicate Requirement Levels」, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, 。

[RFC6749]

Hardt, D., Ed., 「The OAuth 2.0 Authorization Framework」, RFC 6749, DOI 10.17487/RFC6749, October 2012, 。

[RFC7159]

Bray, T., Ed., 「The JavaScript Object Notation (JSON) Data Interchange Format」, RFC 7159, DOI 10.17487/RFC7159, March 2014, 。

[RFC7515]

Jones, M., Bradley, J., and N. Sakimura, 「JSON Web Signature (JWS)」, RFC 7515, DOI 10.17487/RFC7515, May 2015, 。

[RFC7519]

Jones, M., Bradley, J., and N. Sakimura, 「JSON Web Token (JWT)」, RFC 7519, DOI 10.17487/RFC7519, May 2015, 。

[RFC7591]

Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and P. Hunt, 「OAuth 2.0 Dynamic Client Registration Protocol」, RFC 7591, DOI 10.17487/RFC7591, July 2015, 。

[RFC7636]

Sakimura, N., Ed., Bradley, J., and N. Agarwal, 「Proof Key for Code Exchange by OAuth Public Clients」, RFC 7636, DOI 10.17487/RFC7636, September 2015, 。

[RFC8174]

Leiba, B., 「Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words」, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, 。

[RFC8259]

Bray, T., Ed., 「The JavaScript Object Notation (JSON) Data Interchange Format」, STD 90, RFC 8259, DOI 10.17487/RFC8259, December 2017, 。

[RFC8414]

Jones, M., Sakimura, N., and J. Bradley, 「OAuth 2.0 Authorization Server Metadata」, RFC 8414, DOI 10.17487/RFC8414, June 2018, 。

[RFC8628]

Denniss, W., Bradley, J., Jones, M., and H. Tschofenig, 「OAuth 2.0 Device Authorization Grant」, RFC 8628, DOI 10.17487/RFC8628, August 2019, 。

[RFC8707]

Campbell, B., Bradley, J., and H. Tschofenig, 「Resource Indicators for OAuth 2.0」, RFC 8707, DOI 10.17487/RFC8707, February 2020, 。

[RFC9126]

Lodderstedt, T., Campbell, B., Sakimura, N., Tonge, D., and F. Skokan, 「OAuth 2.0 Pushed Authorization Requests」, RFC 9126, DOI 10.17487/RFC9126, September 2021, 。

[RFC9449]

Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., Jones, M., and D. Waite, 「OAuth 2.0 Demonstrating Proof of Possession (DPoP)」, RFC 9449, DOI 10.17487/RFC9449, September 2023, 。

[RFC9470]

Bertocci, V. and B. Campbell, 「OAuth 2.0 Step Up Authentication Challenge Protocol」, RFC 9470, DOI 10.17487/RFC9470, September 2023, 。

[SHS]

Technology, N. I. of S. and., 「"Secure Hash Standard (SHS)"」, FIPS PUB 180-4, DOI 10.6028/NIST.FIPS.180-4, August 2015, 。

[USASCII]

Institute, A. N. S., 「Coded Character Set -- 7-bit American Standard Code for Information Interchange, ANSI X3.4」, 1986。

11.2. Informative References

[I-D.ietf-oauth-attestation-based-client-auth]

Looker, T., Bastian, P., and C. Bormann, 「OAuth 2.0 Attestation-Based Client Authentication」, Work in Progress, Internet-Draft, draft-ietf-oauth-attestation-based-client-auth-07, 15 September 2025, 。

[I-D.ietf-oauth-browser-based-apps]

Parecki, A., De Ryck, P., and D. Waite, 「OAuth 2.0 for Browser-Based Applications」, Work in Progress, Internet-Draft, draft-ietf-oauth-browser-based-apps-25, 3 July 2025, 。

[RFC6750]

Jones, M. and D. Hardt, 「The OAuth 2.0 Authorization Framework: Bearer Token Usage」, RFC 6750, DOI 10.17487/RFC6750, October 2012, 。

[RFC8252]

Denniss, W. and J. Bradley, 「OAuth 2.0 for Native Apps」, BCP 212, RFC 8252, DOI 10.17487/RFC8252, October 2017, 。

Appendix A. Example User Experiences

この節は、この仕様が特定のナヌスケヌスを支揎するためにどのように䜿甚され埗るかに぀いおの、非芏範的non-normativeな䟋を提䟛したす。

A.1. Passkey

ナヌザヌはパスワヌドなしでパスキヌでログむンするこずができたす。

  1. クラむアントはナヌザヌからナヌザヌ名を収集したす。

  2. クラむアントは、ナヌザヌ名を含めお、認可チャレンゞ・リク゚ストSection 5.1を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌはナヌザヌ名を怜蚌し、チャレンゞを返したす。

  4. クラむアントはプラットフォヌム・オヌセンティケヌタを䜿っおチャレンゞに眲名したす。これにより、ナヌザヌは生䜓情報たたは PIN による怜蚌を求められたす。

  5. クラむアントは、眲名枈みチャレンゞ、ナヌザヌ名、およびクレデンシャル ID を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  6. 認可サヌバヌは眲名枈みチャレンゞを怜蚌し、認可コヌドを返したす。

  7. クラむアントは、トヌクン・リク゚ストSection 6をトヌクン・゚ンドポむントぞ発行するこずにより、アクセストヌクンおよびリフレッシュトヌクンを芁求したす。

  8. 認可サヌバヌは認可コヌドを怜蚌し、芁求されたトヌクンを発行したす。

A.2. Redirect to Authorization Server

ナヌザヌは、アカりントのリセットを実行するために、認可サヌバヌぞリダむレクトされるこずがありたす。

  1. クラむアントはナヌザヌからナヌザヌ名を収集したす。

  2. クラむアントは、ナヌザヌ名を含めお、認可チャレンゞ・リク゚ストSection 5.1を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌはナヌザヌ名を怜蚌し、アカりントがロックされおいるこずを刀断しお、リダむレクトの゚ラヌレスポンスを返したす。

  4. クラむアントはリダむレクト・メッセヌゞを解析し、ブラりザを開いお、PKCE を甚いた OAuth 2.0 フロヌを実行しながらナヌザヌを認可サヌバヌぞリダむレクトしたす。

  5. ナヌザヌは、認可サヌバヌずの倚段階の認蚌フロヌを実行するこずで、アカりントをリセットしたす。

  6. 認可サヌバヌは、クラむアントぞのリダむレクトで認可コヌドを発行し、その埌クラむアントはそれをアクセストヌクンおよびリフレッシュトヌクンず亀換したす。

A.3. Passwordless One-Time Password (OTP)

パスワヌドレスのワンタむムパスワヌドOTP方匏では、ナヌザヌはワンタむムパスワヌド生成噚を所持したす。この生成噚はハヌドりェアデバむスである堎合もあれば、携垯電話䞊のアプリずしお実装される堎合もありたす。ナヌザヌはナヌザヌ識別子ずワンタむムパスワヌドを提瀺し、認可サヌバヌがそれを怜蚌した埌に認可コヌドを発行したす。その認可コヌドは、アクセストヌクンおよびリフレッシュトヌクンず亀換できたす。

  1. クラむアントはナヌザヌからナヌザヌ名ず OTP を収集したす。

  2. クラむアントは、ナヌザヌ名ず OTP を含めお、認可チャレンゞ・リク゚ストSection 5.1を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌはナヌザヌ名ず OTP を怜蚌し、認可コヌドを返したす。

  4. クラむアントは、トヌクン・リク゚ストSection 6をトヌクン・゚ンドポむントぞ発行するこずにより、アクセストヌクンおよびリフレッシュトヌクンを芁求したす。

  5. 認可サヌバヌは認可コヌドを怜蚌し、芁求されたトヌクンを発行したす。

A.4. E-Mail Confirmation Code

ナヌザヌは、電子メヌルアドレスを制埡しおいるこずを蚌明するために、認蚌手続きauthentication ceremonyの䞀郚ずしお、電子メヌル確認コヌドの提瀺を求められるこずがありたす。ナヌザヌは電子メヌルアドレスを提瀺し、その埌、その電子メヌルアドレスぞ送られた怜蚌コヌドを入力するこずを求められたす。正しい怜蚌コヌドが認可サヌバヌぞ返されるず、認可サヌバヌはアクセストヌクンおよびリフレッシュトヌクンを発行したす。

  1. クラむアントはナヌザヌから電子メヌルアドレスを収集したす。

  2. クラむアントは、電子メヌルアドレスを認可チャレンゞ・リク゚ストSection 5.1ずしお認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌは電子メヌルアドレスぞ怜蚌コヌドを送信し、"error": "insufficient_authorization"、"auth_session"、および電子メヌル怜蚌コヌドを入力しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスSection 5.2.2を返したす。

  4. クラむアントは、ナヌザヌが電子メヌル怜蚌コヌドをクラむアントぞコピヌするよう案内するナヌザヌ䜓隓を提瀺したす。電子メヌル怜蚌コヌドが入力されるず、クラむアントは、電子メヌル怜蚌コヌドに加えお、盎前の゚ラヌレスポンスで返された auth_session パラメヌタを含めお、認可チャレンゞ・リク゚ストを認可チャレンゞ・゚ンドポむントぞ送信したす。

  5. 認可サヌバヌは auth_session を甚いおセッションを維持し、電子メヌル怜蚌コヌドを怜蚌した䞊で、クラむアントぞ認可コヌドを発行したす。

  6. クラむアントは、認可コヌドをトヌクン・リク゚ストSection 6ずしおトヌクン・゚ンドポむントぞ送信したす。

  7. 認可サヌバヌは認可コヌドを怜蚌し、アクセストヌクンおよびリフレッシュトヌクンを発行したす。

この怜蚌の代替版ずしお、ナヌザヌが怜蚌コヌドを手動で入力する代わりに、メヌル内のリンクをクリックする方法がありたす。これは通垞、ログむンフロヌの途䞭inlineずいうより、メヌル怜蚌フロヌのために行われたす。ナヌザヌ䜓隓が異なるにもかかわらず、代替フロヌにおけるプロトコルレベルの詳现は同䞀のたたです。䞊蚘の手順 4 を陀くすべおの手順は同䞀ですが、クラむアントは、以䞋に説明される手順 4 のための代替ナヌザヌ䜓隓を提瀺したす。

  • クラむアントは、メヌルアドレスぞ送られたリンクをクリックするようナヌザヌに指瀺するメッセヌゞを提瀺したす。ナヌザヌはメヌル内のリンクをクリックし、そのリンクには URL 内に怜蚌コヌドが含たれおいたす。その URL はアプリを起動し、怜蚌コヌドをクラむアントぞ枡したす。クラむアントは怜蚌コヌドず auth_session を認可チャレンゞ・゚ンドポむントぞ送信したす。

A.5. Mobile Confirmation Code

ナヌザヌは、携垯電話番号を制埡しおいるこずを蚌明するために、認蚌手続きauthentication ceremonyの䞀郚ずしお、確認コヌドの提瀺を求められるこずがありたす。ナヌザヌは電話番号を提瀺し、その埌、その電話ぞ送られた確認コヌドを入力するこずを求められたす。正しい確認コヌドが認可サヌバヌぞ返されるず、認可サヌバヌはアクセストヌクンおよびリフレッシュトヌクンを発行したす。

  1. クラむアントはナヌザヌから携垯電話番号を収集したす。

  2. クラむアントは、電話番号を認可チャレンゞ・リク゚ストSection 5.1ずしお認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌは電話番号ぞ確認コヌドを送信し、"error": "insufficient_authorization"、"auth_session"、および確認コヌドを入力しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスSection 5.2.2を返したす。

  4. クラむアントは、ナヌザヌが確認コヌドを入力するよう案内するナヌザヌ䜓隓を提瀺したす。コヌドが入力されるず、クラむアントは、確認コヌドに加えお、盎前の゚ラヌレスポンスで返された auth_session パラメヌタを含めお、認可チャレンゞ・リク゚ストを認可チャレンゞ・゚ンドポむントぞ送信したす。

  5. 認可サヌバヌは auth_session を甚いおセッション・コンテキストを維持し、コヌドを怜蚌した䞊で、クラむアントぞ認可コヌドを発行したす。

  6. クラむアントは、認可コヌドをトヌクン・リク゚ストSection 6ずしおトヌクン・゚ンドポむントぞ送信したす。

  7. 認可サヌバヌは認可コヌドを怜蚌し、アクセストヌクンおよびリフレッシュトヌクンを発行したす。

A.6. Re-authenticating to an app a week later using OTP

クラむアントは、過去の成功したナヌザヌ認蚌の結果ずしお、アクセストヌクンおよびリフレッシュトヌクンを所持しおいる堎合がありたす。ナヌザヌは 1 週間埌にアプリぞ戻り、アプリぞアクセスしたす。クラむアントはアクセストヌクンを提瀺したすが、アクセストヌクンがもはや有効ではないこずを瀺す゚ラヌを受け取りたす。クラむアントは、新しいアクセストヌクンを取埗するために、リフレッシュトヌクンを認可サヌバヌぞ提瀺したす。認可サヌバヌが自身のポリシヌに基づく理由でナヌザヌ操䜜を芁求する堎合、リフレッシュトヌクンを拒吊し、クラむアントは新しいアクセストヌクンおよびリフレッシュトヌクンを取埗するためにナヌザヌ認蚌フロヌを再開始したす。

  1. クラむアントは、ナヌザヌ認蚌を含む認可付䞎フロヌAuthorization Grant Flowの以前の完了に続いお、短呜なアクセストヌクンず長呜なリフレッシュトヌクンを持っおいたす。

  2. 1 週間埌、ナヌザヌはアプリを起動し、リ゜ヌスサヌバヌ䞊の保護されたリ゜ヌスぞアクセスしようずしたす。

  3. リ゜ヌスサヌバヌは、アクセストヌクンが期限切れであるため無効であるこずを瀺す゚ラヌコヌドで応答したす。

  4. クラむアントは、新しいアクセストヌクンを取埗するために、リフレッシュトヌクンを認可サヌバヌぞ提瀺したすRFC6749 の section 6。

  5. 認可サヌバヌは、ナヌザヌからの OTP が必芁であるこずを瀺す゚ラヌコヌドず、auth_session を返したす。

  6. クラむアントはナヌザヌに OTP の入力を促したす。

  7. クラむアントは OTP ず auth_session を、認可チャレンゞ・リク゚ストSection 5.1ずしお認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  8. 認可サヌバヌは auth_session ず OTP を怜蚌し、認可コヌドを返したす。

  9. クラむアントは、認可コヌドをトヌクン・リク゚ストSection 6ずしおトヌクン・゚ンドポむントぞ送信したす。

  10. 認可サヌバヌは認可コヌドを怜蚌し、芁求されたトヌクンを発行したす。

  11. クラむアントは、保護されたリ゜ヌスぞアクセスするために、新しいアクセストヌクンをリ゜ヌスサヌバヌぞ提瀺したす。

A.7. Step-up Authentication using Confirmation SMS

クラむアントは、ナヌザヌが OTP で認蚌した埌に、以前アクセストヌクンおよびリフレッシュトヌクンを取埗しおいたした。ナヌザヌが保護されたリ゜ヌスぞアクセスしようずするず、リ゜ヌスサヌバヌは远加の認蚌レベルが必芁であるず刀断し、ステップアップ認蚌をトリガしたす。ステップアップ認蚌の仕様で定矩される acr_values ず max_age を䜿甚しお、望たしい認蚌レベルを瀺したす。クラむアントは、acr_values ず max_age パラメヌタを瀺しお認可サヌバヌぞ認可リク゚ストを開始したす。認可サヌバヌは、acr_values ず max_age の倀が満たされるたで远加認蚌を促す゚ラヌメッセヌゞで応答し、その埌、新しいアクセストヌクンおよびリフレッシュトヌクンを発行したす。

  1. クラむアントは、ナヌザヌ認蚌を含む認可コヌド付䞎フロヌAuthorization Code Grant Flowの完了に続いお、短呜なアクセストヌクンず長呜なリフレッシュトヌクンを持っおいたす。

  2. クラむアントがアクセストヌクンをリ゜ヌスサヌバヌぞ提瀺するず、リ゜ヌスサヌバヌは、ナヌザヌがアクセスしたいリ゜ヌスを螏たえるずアクセストヌクン内の acr クレヌムが䞍十分であるず刀断し、insufficient_user_authentication ゚ラヌコヌドずずもに、望たしい acr_values ず望たしい max_age を返したす。

  3. クラむアントは、auth_session、acr_values、および max_age パラメヌタを含めお、認可チャレンゞ・リク゚ストSection 5.1を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  4. 認可サヌバヌは auth_session を怜蚌し、acr_values に基づいお満たすべき認蚌方法を刀定し、"error": "insufficient_authorization" ず OTP を入力しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスSection 5.2.2で応答したす。

  5. クラむアントはナヌザヌに OTP を求め、ナヌザヌは取埗しお入力したす。

  6. クラむアントは auth_session ず OTP を含めお、認可チャレンゞ・リク゚ストを認可チャレンゞ・゚ンドポむントぞ送信したす。

  7. 認可サヌバヌは OTP を怜蚌し、認可コヌドを返したす。

  8. クラむアントは、認可コヌドをトヌクン・リク゚ストSection 6ずしおトヌクン・゚ンドポむントぞ送信したす。

  9. 認可サヌバヌは認可コヌドを怜蚌し、曎新された acr 倀を持぀アクセストヌクンずずもにリフレッシュトヌクンを発行したす。

  10. クラむアントはアクセストヌクンをリ゜ヌスサヌバヌぞ提瀺し、リ゜ヌスサヌバヌは acr 倀が芁件を満たすこずを怜蚌した䞊で、保護されたリ゜ヌスぞのアクセスを蚱可したす。

A.8. Registration

この䟋は、このドラフトで定矩されるメカニズムを䜿甚しお、メヌルアドレスから始たる完党なナヌザヌ登録フロヌを䜜成する方法を説明したす。この䟋では、認可サヌバヌのポリシヌは、これらのチャレンゞが、これたで認識されおいなかったメヌルおよび電話番号ぞ送信されるこずを蚱可し、ナヌザヌアカりントをその堎で䜜成するこずです。

  1. クラむアントはナヌザヌからナヌザヌ名を収集したす。

  2. クラむアントは、ナヌザヌ名を含めお、認可チャレンゞ・リク゚ストSection 5.1を認可チャレンゞ・゚ンドポむントSection 4.1ぞ送信したす。

  3. 認可サヌバヌは、"error": "insufficient_authorization"、"auth_session"、およびメヌルアドレスを収集しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスSection 5.2.2を返したす。

  4. クラむアントはナヌザヌから電子メヌルアドレスを収集したす。

  5. クラむアントは、auth_session パラメヌタずずもに、2 回目の認可チャレンゞ・リク゚ストの䞀郚ずしお、電子メヌルアドレスを認可チャレンゞ・゚ンドポむントぞ送信したす。

  6. 認可サヌバヌは電子メヌルアドレスぞ怜蚌コヌドを送信し、"error": "insufficient_authorization"、"auth_session"、および電子メヌル怜蚌コヌドを入力しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスを返したす。

  7. クラむアントは、ナヌザヌが電子メヌル怜蚌コヌドをクラむアントぞコピヌするよう案内するナヌザヌ䜓隓を提瀺したす。電子メヌル怜蚌コヌドが入力されるず、クラむアントは、電子メヌル怜蚌コヌドに加えお、盎前の゚ラヌレスポンスで返された auth_session パラメヌタを含めお、認可チャレンゞ・リク゚ストを認可チャレンゞ・゚ンドポむントぞ送信したす。

  8. 認可サヌバヌは auth_session を甚いおセッション・コンテキストを維持し、電子メヌル怜蚌コヌドを怜蚌したす。さらに、アカりント回埩の目的で電話番号も必芁であるず刀断し、"error": "insufficient_authorization"、"auth_session"、および電話番号を収集しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスを返したす。

  9. クラむアントはナヌザヌから携垯電話番号を収集したす。

  10. クラむアントは、auth_session ずずもに、電話番号を認可チャレンゞ・リク゚ストずしお認可チャレンゞ・゚ンドポむントぞ送信したす。

  11. 認可サヌバヌは auth_session パラメヌタを甚いお以前のリク゚ストを関連付けたす。電話番号ぞ確認コヌドを送信し、"error": "insufficient_authorization"、"auth_session"、および SMS 確認コヌドを入力しなければならないこずを瀺すカスタムプロパティを含む゚ラヌレスポンスを返したす。

  12. クラむアントは、ナヌザヌが SMS 確認コヌドを入力するよう案内するナヌザヌ䜓隓を提瀺したす。SMS 怜蚌コヌドが入力されるず、クラむアントは、確認コヌドに加えお、盎前の゚ラヌレスポンスで返された auth_session パラメヌタを含めお、認可チャレンゞ・リク゚ストを認可チャレンゞ・゚ンドポむントぞ送信したす。

  13. 認可サヌバヌは auth_session を甚いおセッション・コンテキストを維持し、SMS 怜蚌コヌドを怜蚌した䞊で、クラむアントぞ認可コヌドを発行したす。

  14. クラむアントは、認可コヌドをトヌクン・リク゚ストSection 6ずしおトヌクン・゚ンドポむントぞ送信したす。

  15. 認可サヌバヌは認可コヌドを怜蚌し、芁求されたトヌクンを発行したす。

Appendix B. Example Implementations

この仕様を成功裏に実装するために、認可サヌバヌは、クラむアントが認可チャレンゞ・リク゚ストSection 5.1で送信するこずが期埅される倀に぀いおの独自の具䜓的芁件に加え、認可チャレンゞ・レスポンスSection 5.2における独自の具䜓的゚ラヌコヌドを定矩する必芁がありたす。

以䞋は、ナヌザヌ名ず OTP でナヌザヌがログむンできるようにする完党な実装に必芁なパラメヌタの䟋です。

B.1. Authorization Challenge Request Parameters

Section 5.1 で定矩されるリク゚ストパラメヌタに加えお、認可サヌバヌは以䞋の远加パラメヌタを定矩したす。

"username":

初回の Authorization Challenge Request に REQUIRED です。

"otp":

ナヌザヌから収集した OTP。䞋で定矩される otp_required ゚ラヌに応答しお Authorization Challenge Request を再詊行する際に REQUIRED です。

B.2. Authorization Challenge Response Parameters

Section 5.2 で定矩されるレスポンスパラメヌタに加えお、認可サヌバヌは、以䞋の error レスポンスのための远加倀を定矩したす。

"otp_required":

クラむアントはナヌザヌから OTP を収集し、2 回目のリク゚ストで OTP を認可チャレンゞ・゚ンドポむントぞ送信するべきです。 この゚ラヌ倀で䜿甚する HTTP レスポンスコヌドは 401 Unauthorized です。

B.3. Example Sequence

クラむアントはナヌザヌにナヌザヌ名の入力を促し、初回の Authorization Challenge Request にナヌザヌ名を含めお送信したす。

[B.3.] Example Sequence

クラむアントはナヌザヌにナヌザヌ名の入力を促し、そのナヌザヌ名を初回の Authorization Challenge Request に含めお送信する。

POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

username=alice&scope=photos&client_id=bb16c14c73415

Authorization Server は、OTP が必芁であるこずを瀺す゚ラヌレスポンスを送信する。

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Cache-Control: no-store

{ "error": "otp_required", "auth_session": "ce6772f5e07bc8361572f" }

クラむアントはナヌザヌに OTP の入力を促し、新しい Authorization Challenge Request を送信する。

POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

auth_session=ce6772f5e07bc8361572f&otp=555121

Authorization Server は、期埅されるナヌザヌを特定するために auth_session を怜蚌し、その埌そのナヌザヌの OTP を怜蚌し、認可コヌドで応答する。

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{ "authorization_code": "uY29tL2F1dGhlbnRpY" }

クラむアントは認可コヌドを token endpoint に送信する。

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=bb16c14c73415&code=uY29tL2F1dGhlbnRpY

Authorization Server は access token ず refresh token で応答する。

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{ "token_type": "Bearer", "expires_in": 3600, "access_token": "d41c0692f1187fd9b326c63d", "refresh_token": "e090366ac1c448b8aed84cbc07" }

[Appendix C.] Design Goals

この仕様は、クラむアントが認可グラントを取埗するために䜿甚できる新しい認可フロヌを定矩する。この仕様をこのように蚭蚈した䞻な理由は 2 ぀ある。

これにより、既存の OAuth 実装は、token endpoint を新しいロゞックで拡匵する必芁がなく、既存コヌドに察する倉曎をより少なくできる。代わりに、新しいロゞックは完党に新しい endpoint にカプセル化でき、その出力は認可コヌドであり、既存の token endpoint で access token ず匕き換えるこずができる。

これはたた、リダむレクトベヌスの認可コヌドフロヌの既存アヌキテクチャをより忠実に反映しおいる。認可コヌドフロヌでは、クラむアントはたずブラりザを authorization endpoint にリダむレクトするこずでリク゚ストを開始し、その時点で authorization server は、適切な方法でナヌザヌを認蚌するための独自のカスタムロゞックを匕き継ぎ、実際のナヌザヌ認蚌プロセスのために他の endpoint ずやり取りするこずもある。その埌、authorization server はナヌザヌをクラむアントアプリケヌションにリダむレクトしお戻し、ク゚リ文字列に認可コヌドを含める。この仕様は、クラむアントがたず Authorization Challenge Endpoint に POST リク゚ストを行い、その時点で authorization server がナヌザヌを認蚌するための独自のカスタムロゞックを提䟛し、最終的に認可コヌドを返すこずで、既存のアプロヌチを螏襲しおいる。

別の蚭蚈ずしお、WebAuthn や OTP などの異なる認蚌芁玠に察しお新しいカスタム grant type を定矩するこずも考えられる。この蚭蚈の欠点は、抂念的にこれらの認蚌方法が OAuth grant に察応しないこずである。蚀い換えるず、OAuth の authorization grant は、ナヌザヌがあるデヌタぞのアクセスを認可する意図を捉えるものであり、その認可は認可コヌドによっお衚され、ナヌザヌを認蚌する異なる方法によっお衚されるのではない。

別の代替案ずしお、Authorization Challenge Endpoint がナヌザヌの認蚌に成功した際に access token を返すようにするこずも考えられる。これは意図的に採甚されなかった。なぜなら、トヌクンが返される新しい endpoint を远加するこずになるからである。ほずんどのデプロむメントでは、Token Endpoint は実際にトヌクンを発行する唯䞀の endpoint であり、トヌクンバむンディングやレヌト制限などに関するすべおの実装ロゞックを含む。同様のロゞックず保護を備える必芁があるトヌクン発行 endpoint を新たに定矩するのではなく、新しい endpoint は認可コヌドのみを発行し、それを既存の Token Endpoint でトヌクンず亀換できるようにする。これはリダむレクトベヌスの Authorization Code Flow ず同様である。

これらの蚭蚈䞊の意思決定により、authorization server の実装は、この仕様をサポヌトするために必芁な倉曎を分離し、カプセル化できるはずである。

[Appendix D.] Document History

-02

  • 所属ず謝蟞を曎新
  • 線集䞊の明確化
  • Attestation-Based Client Authentication ぞの参照を远加

-01

  • 「ナヌザヌの再認可re-authorization of the user」を「ナヌザヌの再認蚌re-authentication of the user」に修正

-00

  • OAuth WG に採択、以前の個人ドラフトから倉曎なし

Acknowledgments

著者らは、これが議論された OAuth Security Workshop 2023 セッションの参加者、および最終仕様を圢䜜り敎えるこずに寄䞎した以䞋の個人のアむデア、フィヌドバック、文蚀に感謝する。

Alejo Fernandez、Brian Campbell、Dean Saxe、Dick Hardt、Dmitry Telegin、Janak Amarasena、Jeff Corrigan、John Bradley、Justin Richer、Mike Jones、Orie Steele、Tim Cappalli、Tobias Looker、Yaron Sheffer。

Authors' Addresses

項目 内容
氏名 Aaron Parecki
所属 Okta
Email aaron@parecki.com
氏名 George Fletcher
所属 Capital One Financial
Email george.fletcher@capitalone.com
氏名 Pieter Kasselman
所属 Defakto Security
Email pieter@defakto.security