| rfc9560.original | rfc9560.txt | |||
|---|---|---|---|---|
| REGEXT Working Group S. Hollenbeck | Internet Engineering Task Force (IETF) S. Hollenbeck | |||
| Internet-Draft Verisign Labs | Request for Comments: 9560 Verisign Labs | |||
| Intended status: Standards Track 5 November 2023 | Category: Standards Track April 2024 | |||
| Expires: 8 May 2024 | ISSN: 2070-1721 | |||
| Federated Authentication for the Registration Data Access Protocol | Federated Authentication for the Registration Data Access Protocol | |||
| (RDAP) using OpenID Connect | (RDAP) Using OpenID Connect | |||
| draft-ietf-regext-rdap-openid-27 | ||||
| Abstract | Abstract | |||
| The Registration Data Access Protocol (RDAP) provides "RESTful" web | The Registration Data Access Protocol (RDAP) provides | |||
| services to retrieve registration metadata from domain name and | Representational State Transfer (RESTful) web services to retrieve | |||
| regional internet registries. RDAP allows a server to make access | registration metadata from domain name and regional internet | |||
| control decisions based on client identity, and as such it includes | registries. RDAP allows a server to make access control decisions | |||
| support for client identification features provided by the Hypertext | based on client identity, and as such, it includes support for client | |||
| Transfer Protocol (HTTP). Identification methods that require | identification features provided by the Hypertext Transfer Protocol | |||
| clients to obtain and manage credentials from every RDAP server | (HTTP). Identification methods that require clients to obtain and | |||
| operator present management challenges for both clients and servers, | manage credentials from every RDAP server operator present management | |||
| whereas a federated authentication system would make it easier to | challenges for both clients and servers, whereas a federated | |||
| operate and use RDAP without the need to maintain server-specific | authentication system would make it easier to operate and use RDAP | |||
| client credentials. This document describes a federated | without the need to maintain server-specific client credentials. | |||
| authentication system for RDAP based on OpenID Connect. | This document describes a federated authentication system for RDAP | |||
| based on OpenID Connect. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 8 May 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9560. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Problem Statement . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Problem Statement | |||
| 1.2. Approach . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Approach | |||
| 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 | 2. Conventions Used in This Document | |||
| 3. Federated Authentication for RDAP . . . . . . . . . . . . . . 5 | 3. Federated Authentication for RDAP | |||
| 3.1. RDAP and OpenID Connect . . . . . . . . . . . . . . . . . 5 | 3.1. RDAP and OpenID Connect | |||
| 3.1.1. Terminology . . . . . . . . . . . . . . . . . . . . . 6 | 3.1.1. Terminology | |||
| 3.1.2. Client Considerations . . . . . . . . . . . . . . . . 7 | 3.1.2. Client Considerations | |||
| 3.1.3. Overview . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1.3. Overview | |||
| 3.1.4. RDAP Authentication and Authorization Steps . . . . . 12 | 3.1.4. RDAP Authentication and Authorization Steps | |||
| 3.1.4.1. Provider Discovery . . . . . . . . . . . . . . . 12 | 3.1.4.1. Provider Discovery | |||
| 3.1.4.2. Authentication Request . . . . . . . . . . . . . 12 | 3.1.4.2. Authentication Request | |||
| 3.1.4.3. End-User Authorization . . . . . . . . . . . . . 13 | 3.1.4.3. End User Authorization | |||
| 3.1.4.4. Authorization Response and Validation . . . . . . 13 | 3.1.4.4. Authorization Response and Validation | |||
| 3.1.4.5. Token Processing . . . . . . . . . . . . . . . . 14 | 3.1.4.5. Token Processing | |||
| 3.1.4.6. Delivery of User Information . . . . . . . . . . 14 | 3.1.4.6. Delivery of User Information | |||
| 3.1.5. Specialized Claims and Authorization Scope for | 3.1.5. Specialized Claims and Authorization Scope for RDAP | |||
| RDAP . . . . . . . . . . . . . . . . . . . . . . . . 14 | 3.1.5.1. Stated Purposes | |||
| 3.1.5.1. Stated Purposes . . . . . . . . . . . . . . . . . 14 | 3.1.5.2. Do Not Track | |||
| 3.1.5.2. Do Not Track . . . . . . . . . . . . . . . . . . 15 | 4. Common Protocol Features | |||
| 4. Common Protocol Features . . . . . . . . . . . . . . . . . . 16 | 4.1. OpenID Connect Configuration | |||
| 4.1. OpenID Connect Configuration . . . . . . . . . . . . . . 16 | 4.2. RDAP Query Parameters | |||
| 4.2. RDAP Query Parameters . . . . . . . . . . . . . . . . . . 18 | 4.2.1. RDAP Query Purpose | |||
| 4.2.1. RDAP Query Purpose . . . . . . . . . . . . . . . . . 19 | 4.2.2. RDAP Do Not Track | |||
| 4.2.2. RDAP Do Not Track . . . . . . . . . . . . . . . . . . 19 | 4.2.3. Parameter Processing | |||
| 4.2.3. Parameter Processing . . . . . . . . . . . . . . . . 19 | 5. Protocol Features for Session-Oriented Clients | |||
| 5. Protocol Features for Session-Oriented Clients . . . . . . . 20 | 5.1. Data Structures | |||
| 5.1. Data Structures . . . . . . . . . . . . . . . . . . . . . 20 | 5.1.1. Session | |||
| 5.1.1. Session . . . . . . . . . . . . . . . . . . . . . . . 20 | 5.1.2. Device Info | |||
| 5.1.2. Device Info . . . . . . . . . . . . . . . . . . . . . 21 | 5.2. Client Login | |||
| 5.2. Client Login . . . . . . . . . . . . . . . . . . . . . . 22 | 5.2.1. End-User Identifier | |||
| 5.2.1. End-User Identifier . . . . . . . . . . . . . . . . . 23 | 5.2.2. OP Issuer Identifier | |||
| 5.2.2. OP Issuer Identifier . . . . . . . . . . . . . . . . 23 | 5.2.3. Login Response | |||
| 5.2.3. Login Response . . . . . . . . . . . . . . . . . . . 24 | 5.2.4. Clients with Limited User Interfaces | |||
| 5.2.4. Clients with Limited User Interfaces . . . . . . . . 26 | 5.2.4.1. UI-Constrained Client Login | |||
| 5.2.4.1. UI-constrained Client Login . . . . . . . . . . . 26 | 5.2.4.2. UI-Constrained Client Login Polling | |||
| 5.2.4.2. UI-constrained Client Login Polling . . . . . . . 28 | 5.3. Session Status | |||
| 5.4. Session Refresh | ||||
| 5.3. Session Status . . . . . . . . . . . . . . . . . . . . . 29 | 5.5. Client Logout | |||
| 5.4. Session Refresh . . . . . . . . . . . . . . . . . . . . . 31 | 5.6. Request Sequencing | |||
| 5.5. Client Logout . . . . . . . . . . . . . . . . . . . . . . 33 | 6. Protocol Features for Token-Oriented Clients | |||
| 5.6. Request Sequencing . . . . . . . . . . . . . . . . . . . 34 | 6.1. Client Login | |||
| 6. Protocol Features for Token-Oriented Clients . . . . . . . . 35 | 6.2. Client Queries | |||
| 6.1. Client Login . . . . . . . . . . . . . . . . . . . . . . 35 | 6.3. Access Token Validation | |||
| 6.2. Client Queries . . . . . . . . . . . . . . . . . . . . . 36 | 6.4. Token Exchange | |||
| 6.3. Access Token Validation . . . . . . . . . . . . . . . . . 36 | 7. RDAP Query Processing | |||
| 6.4. Token Exchange . . . . . . . . . . . . . . . . . . . . . 36 | 8. RDAP Conformance | |||
| 7. RDAP Query Processing . . . . . . . . . . . . . . . . . . . . 37 | 9. IANA Considerations | |||
| 8. RDAP Conformance . . . . . . . . . . . . . . . . . . . . . . 37 | 9.1. RDAP Extensions Registry | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | 9.2. JSON Web Token Claims Registry | |||
| 9.1. RDAP Extensions Registry . . . . . . . . . . . . . . . . 37 | 9.3. RDAP Query Purpose Registry | |||
| 9.2. JSON Web Token Claims Registry . . . . . . . . . . . . . 37 | 10. Security Considerations | |||
| 9.3. RDAP Query Purpose Registry . . . . . . . . . . . . . . . 38 | 10.1. Authentication and Access Control | |||
| 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 41 | 11. References | |||
| 10.1. Editor Implementation . . . . . . . . . . . . . . . . . 42 | 11.1. Normative References | |||
| 10.2. Verisign Labs . . . . . . . . . . . . . . . . . . . . . 42 | 11.2. Informative References | |||
| 10.3. Viagenie . . . . . . . . . . . . . . . . . . . . . . . . 43 | Acknowledgments | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | Author's Address | |||
| 11.1. Authentication and Access Control . . . . . . . . . . . 44 | ||||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 45 | ||||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 47 | ||||
| Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 48 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| 1. Introduction | 1. Introduction | |||
| The Registration Data Access Protocol (RDAP) provides "RESTful" web | The Registration Data Access Protocol (RDAP) provides | |||
| services to retrieve registration metadata from domain name and | Representational State Transfer (RESTful) web services to retrieve | |||
| regional internet registries. RDAP allows a server to make access | registration metadata from domain name and regional internet | |||
| control decisions based on client identity, and as such it includes | registries. RDAP allows a server to make access control decisions | |||
| support for client identification features provided by the Hypertext | based on client identity, and as such, it includes support for client | |||
| Transfer Protocol (HTTP) [RFC9110]. | identification features provided by the Hypertext Transfer Protocol | |||
| (HTTP) [RFC9110]. | ||||
| RDAP is specified in multiple documents, including "HTTP Usage in the | RDAP is specified in multiple documents, including "HTTP Usage in the | |||
| Registration Data Access Protocol (RDAP)" [RFC7480], "Security | Registration Data Access Protocol (RDAP)" [RFC7480], "Security | |||
| Services for the Registration Data Access Protocol (RDAP)" [RFC7481], | Services for the Registration Data Access Protocol (RDAP)" [RFC7481], | |||
| "Registration Data Access Protocol Query Format" [RFC9082], and "JSON | "Registration Data Access Protocol (RDAP) Query Format" [RFC9082], | |||
| Responses for the Registration Data Access Protocol (RDAP)" | and "JSON Responses for the Registration Data Access Protocol (RDAP)" | |||
| [RFC9083]. RFC 7481 describes client identification and | [RFC9083]. [RFC7481] describes client identification and | |||
| authentication services that can be used with RDAP, but it does not | authentication services that can be used with RDAP, but it does not | |||
| specify how any of these services can (or should) be used with RDAP. | specify how any of these services can (or should) be used with RDAP. | |||
| 1.1. Problem Statement | 1.1. Problem Statement | |||
| The conventional "user name and password" authentication method does | The conventional "username and password" authentication method does | |||
| not scale well in the RDAP ecosystem. Assuming that all domain name | not scale well in the RDAP ecosystem. Assuming that all domain name | |||
| and address registries will eventually provide RDAP service, it is | and address registries will eventually provide RDAP service, it is | |||
| impractical and inefficient for users to secure login credentials | impractical and inefficient for users to secure login credentials | |||
| from the hundreds of different server operators. Authentication | from the hundreds of different server operators. Authentication | |||
| methods based on user names and passwords do not provide information | methods based on usernames and passwords do not provide information | |||
| that describes the user in sufficient detail (while protecting the | that describes the user in sufficient detail (while protecting the | |||
| personal privacy of the user) for server operators to make fine- | personal privacy of the user) for server operators to make fine- | |||
| grained access control decisions based on the user's identity. The | grained access control decisions based on the user's identity. The | |||
| authentication system used for RDAP needs to address all of these | authentication system used for RDAP needs to address all of these | |||
| needs. | needs. | |||
| 1.2. Approach | 1.2. Approach | |||
| A basic level of RDAP service can be provided to users who possess an | A basic level of RDAP service can be provided to users who possess an | |||
| identifier issued by a recognized provider who can authenticate and | identifier issued by a recognized provider who can authenticate and | |||
| validate the user. The identifiers issued by social media services, | validate the user. For example, the identifiers issued by social | |||
| for example, can be used. Users who require higher levels of service | media services can be used. Users who require higher levels of | |||
| (and who are willing to share more information about themselves to | service (and who are willing to share more information about | |||
| gain access to that service) can secure identifiers from specialized | themselves to gain access to that service) can secure identifiers | |||
| providers who are or will be able to provide more detailed | from specialized providers who are or will be able to provide more | |||
| information about the user. Server operators can then make access | detailed information about the user. Server operators can then make | |||
| control decisions based on the identification information provided by | access control decisions based on the identification information | |||
| the user. | provided by the user. | |||
| A federated authentication system in which an RDAP server outsources | A federated authentication system in which an RDAP server outsources | |||
| identification and authentication services to a trusted identity | identification and authentication services to a trusted identity | |||
| provider would make it easier to operate and use RDAP by reusing | provider would make it easier to operate and use RDAP by reusing | |||
| existing identifiers to provide a basic level of access. It can also | existing identifiers to provide a basic level of access. It can also | |||
| provide the ability to collect additional user identification | provide the ability to collect additional user identification | |||
| information, and that information can be shared with the RDAP server | information, and that information can be shared with the RDAP server | |||
| operator with the consent of the user in order to help the server | operator with the consent of the user in order to help the server | |||
| operator make access control decisions. This type of system allows | operator make access control decisions. This type of system allows | |||
| an RDAP server to make access control decisions based on the nature | an RDAP server to make access control decisions based on the nature | |||
| skipping to change at page 5, line 9 ¶ | skipping to change at line 188 ¶ | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| All of the HTTP requests described in this document that are sent | All of the HTTP requests described in this document that are sent | |||
| from an RDAP client to an RDAP server use the HTTP GET method as | from an RDAP client to an RDAP server use the HTTP GET method as | |||
| specified in [RFC9110]. | specified in [RFC9110]. | |||
| Long lines in examples are wrapped using the "The Single Backslash | Long lines in examples are wrapped using "The Single Backslash | |||
| Strategy" described in RFC 8792 [RFC8792]. | Strategy" described in [RFC8792]. | |||
| 3. Federated Authentication for RDAP | 3. Federated Authentication for RDAP | |||
| RDAP itself does not include built-in security services. Instead, | RDAP itself does not include built-in security services. Instead, | |||
| RDAP relies on features that are available in other protocol layers | RDAP relies on features that are available in other protocol layers | |||
| to provide needed security services including access control, | to provide needed security services including access control, | |||
| authentication, authorization, availability, data confidentiality, | authentication, authorization, availability, data confidentiality, | |||
| data integrity, and identification. A description of each of these | data integrity, and identification. A description of each of these | |||
| security services can be found in "Internet Security Glossary, | security services can be found in "Internet Security Glossary, | |||
| Version 2" [RFC4949]. This document focuses on a federated | Version 2" [RFC4949]. This document focuses on a federated | |||
| authentication system for RDAP that provides services for | authentication system for RDAP that provides services for | |||
| authentication, authorization, and identification, allowing a server | authentication, authorization, and identification, allowing a server | |||
| operator to make access control decisions. Section 3 of RFC 7481 | operator to make access control decisions. Section 3 of [RFC7481] | |||
| [RFC7481] describes general considerations for RDAP access control, | describes general considerations for RDAP access control, | |||
| authentication, and authorization. | authentication, and authorization. | |||
| The conventional client-server authentication model requires clients | The conventional client-server authentication model requires clients | |||
| to maintain distinct credentials for every RDAP server. This | to maintain distinct credentials for every RDAP server. This | |||
| situation can become unwieldy as the number of RDAP servers | situation can become unwieldy as the number of RDAP servers | |||
| increases. Federated authentication mechanisms allow clients to use | increases. Federated authentication mechanisms allow clients to use | |||
| one credential to access multiple RDAP servers and reduce client | one credential to access multiple RDAP servers and reduce client | |||
| credential management complexity. | credential management complexity. | |||
| 3.1. RDAP and OpenID Connect | 3.1. RDAP and OpenID Connect | |||
| OpenID Connect 1.0 [OIDCC] is a decentralized, single sign-on (SSO) | OpenID Connect 1.0 [OIDCC] is a decentralized, Single Sign-On (SSO) | |||
| federated authentication system that allows users to access multiple | federated authentication system that allows users to access multiple | |||
| web resources with one identifier instead of having to create | web resources with one identifier instead of having to create | |||
| multiple server-specific identifiers. Users acquire identifiers from | multiple server-specific identifiers. Users acquire identifiers from | |||
| OpenID Providers, or OPs. Relying Parties, or RPs, are applications | OpenID Providers (OPs). Relying Parties (RPs) are applications (such | |||
| (such as RDAP) that outsource their user authentication function to | as RDAP) that outsource their user authentication function to an OP. | |||
| an OP. OpenID Connect is built on top of the authorization framework | OpenID Connect is built on top of the authorization framework | |||
| provided by the OAuth 2.0 [RFC6749] protocol. | provided by the OAuth 2.0 protocol [RFC6749]. | |||
| The OAuth authorization framework describes a method for users to | The OAuth authorization framework describes a method for users to | |||
| access protected web resources without having to hand out their | access protected web resources without having to hand out their | |||
| credentials. Instead, clients are issued Access Tokens by OpenID | credentials. Instead, clients are issued access tokens by OPs with | |||
| Providers with the permission of the resource owners. Using OpenID | the permission of the resource owners. Using OpenID Connect and | |||
| Connect and OAuth, multiple RDAP servers can form a federation and | OAuth, multiple RDAP servers can form a federation, and clients can | |||
| clients can access any server in the federation by providing one | access any server in the federation by providing one credential | |||
| credential registered with any OP in that federation. The OAuth | registered with any OP in that federation. The OAuth authorization | |||
| authorization framework is designed for use with HTTP and thus can be | framework is designed for use with HTTP and thus can be used with | |||
| used with RDAP. | RDAP. | |||
| 3.1.1. Terminology | 3.1.1. Terminology | |||
| This document uses the terms "client" and "server" as defined by RDAP | This document uses the following terminology. | |||
| [RFC7480]. | ||||
| This document uses the terms "Access Token", "Authorization Code", | Terms defined by [RFC7480]: | |||
| "Authorization Endpoint", "Authorization Grant", "Client | ||||
| Authentication", "Client Identifier", "Protected Resource", "Refresh | * client | |||
| Token", "Resource Owner", "Resource Server", and "Token Endpoint" | ||||
| defined by OAuth 2.0 [RFC6749]; the terms "Claim Name", "Claim | * server | |||
| Value", and "JSON Web Token (JWT)" defined by JSON Web Token (JWT) | ||||
| [RFC7519]; the terms "ID Token" and "UserInfo Endpoint" defined by | Terms defined by [RFC6749]: | |||
| OpenID Connect Core 1.0 [OIDCC]; and the term "JWT Access Token" | ||||
| defined by RFC 9068 [RFC9068]. Additional terms from Section 1.2 of | * access token | |||
| the OpenID Connect Core specification are incorporated by reference. | ||||
| * authorization code | ||||
| * authorization endpoint | ||||
| * authorization grant | ||||
| * client authentication | ||||
| * client identifier | ||||
| * protected resource | ||||
| * refresh token | ||||
| * resource owner | ||||
| * resource server | ||||
| * token endpoint | ||||
| Terms defined by [RFC7519]: | ||||
| * claim name | ||||
| * claim value | ||||
| * JSON Web Token (JWT) | ||||
| Terms defined by [OIDCC]: | ||||
| * ID Token | ||||
| * UserInfo Endpoint | ||||
| Term defined by [RFC9068]: | ||||
| * JWT access token | ||||
| Additional terms from Section 1.2 of the OpenID Connect Core | ||||
| specification are incorporated by reference. | ||||
| This document uses the terms "remote" and "default" to describe the | This document uses the terms "remote" and "default" to describe the | |||
| relationship between an RDAP server and the OpenID Providers that it | relationship between an RDAP server and the OPs that it interacts | |||
| interacts with. A "remote" OpenID Provider is one that is identified | with. A "remote" OP is one that is identified by the RDAP client by | |||
| by the RDAP Client by providing either an Issuer Identifier or an | providing either an Issuer Identifier or an end-user identifier in a | |||
| End-User Identifier in a login request. Whether an Issuer Identifier | login request. Whether an Issuer Identifier or end-user identifier | |||
| or End-User Identifier can be provided in the login request for the | can be provided in the login request for the purposes of selecting an | |||
| purposes of selecting an OpenID Provider can be determined by | OP can be determined by retrieving the RDAP server's OIDC | |||
| retrieving the RDAP Server's OIDC configuration details (see | configuration details (see Section 4.1). A "default" OP is one that | |||
| Section 4.1). A "default" OpenID Provider is one that the RDAP | the RDAP server will use when the RDAP client does not provide an | |||
| Server will use when the RDAP Client does not provide an Issuer | Issuer Identifier or an end-user identifier in the login request. | |||
| Identifier or an End-User Identifier in the login request. | ||||
| This document uses the term "session" to describe a set of | This document uses the term "session" to describe a set of | |||
| interactions between an RDAP client and an RDAP server during a given | interactions between an RDAP client and an RDAP server during a given | |||
| period of time. For session-oriented clients (see Section 3.1.2), | period of time. For session-oriented clients (see Section 3.1.2), | |||
| the RDAP session is a typical HTTP session starting with a | the RDAP session is a typical HTTP session starting with a | |||
| farv1_session/login request and ending with either a farv1_session/ | farv1_session/login request and ending with either a farv1_session/ | |||
| logout request (see Section 5 for a description of both path | logout request (see Section 5 for a description of both path | |||
| segments) or a timeout. For token-oriented clients (see | segments) or a timeout. For token-oriented clients (see Sections | |||
| Section 3.1.2 and Section 6), the RDAP session corresponds to the | 3.1.2 and 6), the RDAP session corresponds to the lifespan of an | |||
| lifespan of an authorization obtained from an OP and the | authorization obtained from an OP and the corresponding access token, | |||
| corresponding Access Token, including any refreshed Access Token. | including any refreshed access tokens. | |||
| 3.1.2. Client Considerations | 3.1.2. Client Considerations | |||
| Clients that delegate OIDC Authentication to an RDAP server as part | Clients that delegate OIDC authentication to an RDAP server as part | |||
| of session-oriented interactions, and can accept and process HTTP | of session-oriented interactions and can accept and process HTTP | |||
| cookies [RFC6265] to maintain the session, are known as "session- | cookies [RFC6265] to maintain the session are known as "session- | |||
| oriented" clients. This type of RDAP client performs the role of | oriented" clients. This type of RDAP client performs the role of a | |||
| user agent [RFC9110]. An RDAP server performs the role of an OpenID | user agent [RFC9110]. An RDAP server performs the role of an OpenID | |||
| Connect Core Relying Party (RP). A web browser used to send queries | Connect Core Relying Party (RP). A web browser used to send queries | |||
| directly to an RDAP server is an example of a session-oriented | directly to an RDAP server is an example of a session-oriented | |||
| client. Specifications for this type of client can be found in | client. Specifications for this type of client can be found in | |||
| Section 5. | Section 5. | |||
| Clients that perform OIDC Authentication directly, taking the role of | Clients that perform OIDC authentication directly, taking the role of | |||
| an RP in interactions with an OP and sending Access Tokens [RFC6749] | an RP in interactions with an OP and sending access tokens [RFC6749] | |||
| to an RDAP server to authorize RDAP queries, are known as "token- | to an RDAP server to authorize RDAP queries, are known as "token- | |||
| oriented" clients. An RDAP server performs resource server [RFC6749] | oriented" clients. An RDAP server performs resource server [RFC6749] | |||
| functions to verify the tokens received from the client, and RP | functions to verify the tokens received from the client and RP | |||
| functions to retrieve information from the OP as necessary to make | functions to retrieve information from the OP as necessary to make | |||
| access control decisions. A web browser running JavaScript received | access control decisions. A web browser running JavaScript received | |||
| from a web service that sends queries to an RDAP server directly or | from a web service that sends queries to an RDAP server directly or | |||
| through its back-end web service is an example of a token-oriented | through its back-end web service is an example of a token-oriented | |||
| client. Specifications for this type of client can be found in | client. Specifications for this type of client can be found in | |||
| Section 6. | Section 6. | |||
| Clients MAY operate as either session-oriented or token-oriented | Clients MAY operate as either session-oriented or token-oriented | |||
| clients, but they MUST do so consistently by not mixing token- | clients, but they MUST do so consistently by not mixing token- | |||
| oriented and session-oriented requests while interacting with an OP. | oriented and session-oriented requests while interacting with an OP. | |||
| Servers SHOULD support both types of client to maximize | Servers SHOULD support both types of client to maximize | |||
| interoperability, but MAY choose to support only one type of client | interoperability but MAY choose to support only one type of client as | |||
| as required by local policy or operating conditions. A server that | required by local policy or operating conditions. A server that does | |||
| does not support a particular client type will not support the | not support a particular client type will not support the protocol | |||
| protocol features (the data structures, path segments, parameters, | features (the data structures, path segments, parameters, and | |||
| and interactions) specified for that client type. Server signaling | interactions) specified for that client type. Server signaling of | |||
| of supported client types is described in Section 4.1. | supported client types is described in Section 4.1. | |||
| 3.1.3. Overview | 3.1.3. Overview | |||
| At a high level, RDAP authentication of a session-oriented client | At a high level, RDAP authentication of a session-oriented client | |||
| using OpenID Connect requires completion of the following steps: | using OpenID Connect requires completion of the following steps: | |||
| 1. An RDAP client sends an RDAP "help" query to an RDAP server to | 1. An RDAP client sends an RDAP "help" query to an RDAP server to | |||
| determine the type and capabilities of the OpenID Providers that | determine the types and capabilities of the OPs that are used by | |||
| are used by the RDAP server. This information is returned in | the RDAP server. This information is returned in the | |||
| the rdapConformance section of the response. A value of "farv1" | "rdapConformance" section of the response. A value of "farv1" | |||
| indicates support for the extension described in this | indicates support for the extension described in this | |||
| specification. If one or more remote OpenID Providers are | specification. If one or more remote OPs are supported, the | |||
| supported, the RDAP client SHOULD evaluate the additional | RDAP client SHOULD evaluate the additional information described | |||
| information described in Section 4.1 in order to discover the | in Section 4.1 in order to discover the capabilities of the RDAP | |||
| capabilities of the RDAP server and optionally obtain the set of | server and optionally obtain the set of supported OPs unless | |||
| supported OPs unless that information is available from a | that information is available from a trusted out-of-band source | |||
| trusted out-of-band source and has already been processed. | and has already been processed. | |||
| 2. An RDAP client sends an RDAP "login" request to an RDAP server | 2. An RDAP client sends an RDAP "login" request to an RDAP server | |||
| as described in Section 5.2. | as described in Section 5.2. | |||
| 3. The RDAP server prepares an Authentication Request containing | 3. The RDAP server prepares an Authentication Request containing | |||
| the desired request parameters. | the desired request parameters. | |||
| 4. The RDAP server sends an Authentication Request to an OpenID | ||||
| Provider (OP) Authorization Endpoint and redirects the RDAP | 4. The RDAP server sends an Authentication Request to an OP | |||
| client to the OpenID Provider using an HTTP redirect. | authorization endpoint and redirects the RDAP client to the OP | |||
| 5. The OpenID Provider authenticates the End-User. | using an HTTP redirect. | |||
| 6. The OpenID Provider obtains End-User consent/authorization. | ||||
| 7. The OpenID Provider sends the RDAP Client back to the RDAP | 5. The OP authenticates the end user. | |||
| server with an Authorization Code using an HTTP redirect. | ||||
| 8. The RDAP server requests tokens using the Authorization Code at | 6. The OP obtains end-user consent and authorization. | |||
| the OpenID Provider's Token Endpoint. | ||||
| 7. The OP sends the RDAP client back to the RDAP server with an | ||||
| authorization code using an HTTP redirect. | ||||
| 8. The RDAP server requests tokens using the authorization code at | ||||
| the OP's token endpoint. | ||||
| 9. The RDAP server receives a response that contains an ID Token | 9. The RDAP server receives a response that contains an ID Token | |||
| and Access Token in the response body. | and access token in the response body. | |||
| 10. The RDAP server validates the tokens as described in [OIDCC] and | 10. The RDAP server validates the tokens as described in [OIDCC] and | |||
| retrieves the claims associated with the End-User's identity | retrieves the claims associated with the end user's identity | |||
| from the OpenID Provider's UserInfo Endpoint. | from the OP's UserInfo Endpoint. | |||
| The steps above can be described in a sequence diagram: | The steps above can be described in a sequence diagram: | |||
| End OpenID RDAP RDAP | End OpenID RDAP RDAP | |||
| User Provider Client Server | User Provider Client Server | |||
| | | | | | | | | | | |||
| | | |-----Help Query---->| | | | |-----Help Query---->| | |||
| | | | | | | | | | | |||
| | | |<---Help Response---| | | | |<---Help Response---| | |||
| | | | | | | | | | | |||
| skipping to change at page 9, line 49 ¶ | skipping to change at line 436 ¶ | |||
| | | | | | | | | | | |||
| | | |-----RDAP Query---->| | | | |-----RDAP Query---->| | |||
| | | | | | | | | | | |||
| | | |<---RDAP Response---| | | | |<---RDAP Response---| | |||
| | | | | | | | | | | |||
| |<------RDAP Response-------| | | |<------RDAP Response-------| | | |||
| Figure 1 | Figure 1 | |||
| The RDAP server can then make identification, authorization, and | The RDAP server can then make identification, authorization, and | |||
| access control decisions based on End-User identity information and | access control decisions based on end-user identity information and | |||
| local policies. Note that OpenID Connect describes different process | local policies. Note that OpenID Connect describes different process | |||
| flows for other types of clients, such as script-based or command | flows for other types of clients, such as script-based or command- | |||
| line clients. | line clients. | |||
| RDAP authentication of a token-oriented client using OpenID Connect | RDAP authentication of a token-oriented client using OpenID Connect | |||
| requires completion of the following steps: | requires completion of the following steps: | |||
| 1. An RDAP client sends an RDAP "help" query to an RDAP server to | 1. An RDAP client sends an RDAP "help" query to an RDAP server to | |||
| determine the type and capabilities of the OpenID Providers | determine the type and capabilities of the OPs that are used by | |||
| (OPs) that are used by the RDAP server. This information is | the RDAP server. This information is returned in the | |||
| returned in the rdapConformance section of the response. A | "rdapConformance" section of the response. A value of "farv1" | |||
| value of "farv1" indicates support for the extension described | indicates support for the extension described in this | |||
| in this specification. If one or more remote OpenID Providers | specification. If one or more remote OPs are supported, the | |||
| are supported, the RDAP client SHOULD evaluate the additional | RDAP client SHOULD evaluate the additional information described | |||
| information described in Section 4.1 in order to discover the | in Section 4.1 in order to discover the capabilities of the RDAP | |||
| capabilities of the RDAP server and optionally obtain the set of | server and optionally obtain the set of supported OPs. Support | |||
| supported OPs. Support for token-oriented clients requires a | for token-oriented clients requires a default OP. | |||
| default OP. | ||||
| 2. The RDAP client determines the End-User's OP and confirms that | 2. The RDAP client determines the end user's OP and confirms that | |||
| it's supported by the RDAP server. | it's supported by the RDAP server. | |||
| 3. The RDAP client sends an Authentication Request to the OP's | 3. The RDAP client sends an Authentication Request to the OP's | |||
| Authorization Endpoint. | authorization endpoint. | |||
| 4. The OP authenticates the End-User. | ||||
| 5. The OP obtains End-User consent/authorization. | 4. The OP authenticates the end user. | |||
| 6. The OP returns an Authorization Code to the RDAP client. | ||||
| 7. The RDAP client requests tokens using the Authorization Code at | 5. The OP obtains end-user consent or authorization. | |||
| the OP's Token Endpoint. | ||||
| 6. The OP returns an authorization code to the RDAP client. | ||||
| 7. The RDAP client requests tokens using the authorization code at | ||||
| the OP's token endpoint. | ||||
| 8. The RDAP client receives a response that contains an ID Token | 8. The RDAP client receives a response that contains an ID Token | |||
| and an Access Token in the response body. | and an access token in the response body. | |||
| 9. The RDAP client monitors the token validity period and either | 9. The RDAP client monitors the token validity period and either | |||
| refreshes the token or requests new tokens as necessary. | refreshes the token or requests new tokens as necessary. | |||
| 10. The RDAP client sends queries that require user identification, | 10. The RDAP client sends queries that require user identification, | |||
| authentication, and authorization to an RDAP server that include | authentication, and authorization to an RDAP server that include | |||
| an Access Token in an HTTP "Authorization" header using the | an access token in an HTTP "authorization" header using the | |||
| "Bearer" authentication scheme described in RFC 6750 [RFC6750]. | "bearer" authentication scheme described in [RFC6750]. | |||
| 11. The RDAP server validates the Access Token and retrieves the | ||||
| claims associated with the End-User's identity from the OP's | 11. The RDAP server validates the access token and retrieves the | |||
| claims associated with the end user's identity from the OP's | ||||
| UserInfo Endpoint. | UserInfo Endpoint. | |||
| 12. The RDAP server determines the End-User's authorization level | ||||
| 12. The RDAP server determines the end user's authorization level | ||||
| and processes the query in accordance with server policies. | and processes the query in accordance with server policies. | |||
| The steps above can be described in a sequence diagram: | The steps above can be described in a sequence diagram: | |||
| End OpenID RDAP RDAP | End OpenID RDAP RDAP | |||
| User Provider Client Server | User Provider Client Server | |||
| | | | | | | | | | | |||
| | | |-----Help Query---->| | | | |-----Help Query---->| | |||
| | | | | | | | | | | |||
| | | |<----Help Response--| | | | |<----Help Response--| | |||
| skipping to change at page 12, line 7 ¶ | skipping to change at line 537 ¶ | |||
| | | Response------------->| | | | Response------------->| | |||
| | | | | | | | | | | |||
| | | |<---RDAP Response---| | | | |<---RDAP Response---| | |||
| | | | | | | | | | | |||
| |<----RDAP Response---------| | | |<----RDAP Response---------| | | |||
| Figure 2 | Figure 2 | |||
| 3.1.4. RDAP Authentication and Authorization Steps | 3.1.4. RDAP Authentication and Authorization Steps | |||
| End-Users MAY present an identifier (an OpenID) issued by an OP to | End users MAY present an identifier (an OpenID) issued by an OP to | |||
| use OpenID Connect with RDAP. If the RDAP server supports a default | use OpenID Connect with RDAP. If the RDAP server supports a default | |||
| OpenID Provider or provider discovery is not supported, the End-User | OP or if provider discovery is not supported, the end-user identifier | |||
| identifier MAY be omitted. An OP SHOULD include support for the | MAY be omitted. An OP SHOULD include support for the claims | |||
| claims described in Section 3.1.5 to provide additional information | described in Section 3.1.5 to provide additional information needed | |||
| needed for RDAP End-User authorization; in the absence of these | for RDAP end-user authorization; in the absence of these claims, | |||
| claims clients and servers MAY make authorization and access control | clients and servers MAY make authorization and access control | |||
| decisions as appropriate given any other information returned from | decisions as appropriate given any other information returned from | |||
| the OP. OpenID Connect requires RPs to register with OPs to use | the OP. OpenID Connect requires RPs to register with OPs to use | |||
| OpenID Connect services for an End-User. The registration process is | OpenID Connect services for an end user. The registration process is | |||
| often completed using out-of-band methods, but it is also possible to | often completed using out-of-band methods, but it is also possible to | |||
| use the automated method described by the "OpenID Connect Dynamic | use the automated method described by the OpenID Connect Dynamic | |||
| Client Registration" protocol [OIDCR]. The parties involved can use | Client Registration protocol [OIDCR]. The parties involved can use | |||
| any method that is mutually acceptable. | any method that is mutually acceptable. | |||
| 3.1.4.1. Provider Discovery | 3.1.4.1. Provider Discovery | |||
| An RDAP server/RP needs to be able to map an End-User's identifier to | An RDAP server acting as an RP needs to be able to map an end user's | |||
| an OP. This can be accomplished using the OPTIONAL "OpenID Connect | identifier to an OP. This can be accomplished using the OPTIONAL | |||
| Discovery" protocol [OIDCD], but that protocol is not widely | OpenID Connect Discovery protocol [OIDCD], but that protocol is not | |||
| implemented. Out-of-band methods are also possible and can be more | widely implemented. Out-of-band methods are also possible and can be | |||
| dependable. For example, an RP can support a limited number of OPs | more dependable. For example, an RP can support a limited number of | |||
| and maintain internal associations of those identifiers with the OPs | OPs and maintain internal associations of those identifiers with the | |||
| that issued them. | OPs that issued them. | |||
| Alternatively, if mapping of an End-User's identifier is not | Alternatively, if mapping an end user's identifier is not possible, | |||
| possible, or not supported by the RDAP server, the RDAP server SHOULD | or not supported by the RDAP server, the RDAP server SHOULD support | |||
| support explicit specification of a remote OP by the RDAP client in | explicit specification of a remote OP by the RDAP client in the form | |||
| the form of a query parameter as described in Section 5.2.2 unless | of a query parameter as described in Section 5.2.2 unless the remote | |||
| the remote OP has been identified using an out-of-band mechanism. An | OP has been identified using an out-of-band mechanism. An RDAP | |||
| RDAP server MUST provide information about its capabilities and | server MUST provide information about its capabilities and supported | |||
| supported OPs in the "help" query response in the | OPs in the "help" query response in the "farv1_openidcConfiguration" | |||
| "farv1_openidcConfiguration" data structure described in Section 4.1. | data structure described in Section 4.1. An RDAP server acting as an | |||
| An RDAP server/RP MUST support at least one of these methods of OP | RP MUST support at least one of these methods of OP discovery. | |||
| discovery. | ||||
| 3.1.4.2. Authentication Request | 3.1.4.2. Authentication Request | |||
| Once the OP is known, an RP MUST form an Authentication Request and | Once the OP is known, an RP MUST form an Authentication Request and | |||
| send it to the OP as described in Section 3 of the OpenID Connect | send it to the OP as described in Section 3 of [OIDCC]. The | |||
| Core protocol [OIDCC]. The authentication path followed | authentication path followed (authorization, implicit, or hybrid) | |||
| (authorization, implicit, or hybrid) will depend on the | will depend on the Authentication Request response_type set by the | |||
| Authentication Request response_type set by the RP. The remainder of | RP. The remainder of the processing steps described here assume that | |||
| the processing steps described here assume that the Authorization | the authorization code flow is being used by setting | |||
| Code Flow is being used by setting "response_type=code" in the | "response_type=code" in the Authentication Request. | |||
| Authentication Request. | ||||
| The benefits of using the Authorization Code Flow for authenticating | The benefits of using the authorization code flow for authenticating | |||
| a human user are described in Section 3.1 of the OpenID Connect Core | a human user are described in Section 3.1 of [OIDCC]. The Implicit | |||
| protocol. The Implicit Flow is more commonly used by clients | Flow is more commonly used by clients implemented in a web browser | |||
| implemented in a web browser using a scripting language; it is | using a scripting language; it is described in Section 3.2 of | |||
| described in Section 3.2 of the OpenID Connect Core protocol. At the | [OIDCC]. At the time of this writing, the Implicit Flow is | |||
| time of this writing, the Implicit Flow is considered insecure and | considered insecure and efforts are being made to deprecate the flow. | |||
| efforts are being made to deprecate the flow. The Hybrid Flow | The Hybrid Flow (described in Section 3.3 of [OIDCC]) combines | |||
| (described in Section 3.3 of the OpenID Connect Core protocol) | elements of the authorization code and Implicit Flows by returning | |||
| combines elements of the Authorization Code and Implicit Flows by | some tokens from the authorization endpoint and others from the token | |||
| returning some tokens from the Authorization Endpoint and others from | endpoint. | |||
| the Token Endpoint. | ||||
| An Authentication Request can contain several parameters. REQUIRED | An Authentication Request can contain several parameters. REQUIRED | |||
| parameters are specified in Section 3.1.2.1 of the OpenID Connect | parameters are specified in Section 3.1.2.1 of [OIDCC]. Apart from | |||
| Core protocol [OIDCC]. Apart from these parameters, it is | these parameters, it is RECOMMENDED that the RP include the optional | |||
| RECOMMENDED that the RP include the optional "login_hint" parameter | "login_hint" parameter in the request, with the value being that of | |||
| in the request, with the value being that of the "farv1_id" query | the "farv1_id" query parameter of the end user's RDAP "login" | |||
| parameter of the End-User's RDAP "login" request, if provided. | request, if provided. Passing the "login_hint" parameter allows a | |||
| Passing the "login_hint" parameter allows a client to pre-fill login | client to pre-fill login form information, so logging in can be more | |||
| form information, so logging in can be more convenient for users. | convenient for users. Other parameters MAY be included. | |||
| Other parameters MAY be included. | ||||
| The OP receives the Authentication Request and attempts to validate | The OP receives the Authentication Request and attempts to validate | |||
| it as described in Section 3.1.2.2 of the OpenID Connect Core | it as described in Section 3.1.2.2 of [OIDCC]. If the request is | |||
| protocol [OIDCC]. If the request is valid, the OP attempts to | valid, the OP attempts to authenticate the end user as described in | |||
| authenticate the End-User as described in Section 3.1.2.3 of the | Section 3.1.2.3 of [OIDCC]. The OP returns an error response if the | |||
| OpenID Connect Core protocol [OIDCC]. The OP returns an error | request is not valid or if any error is encountered. | |||
| response if the request is not valid or if any error is encountered. | ||||
| 3.1.4.3. End-User Authorization | 3.1.4.3. End User Authorization | |||
| After the End-User is authenticated, the OP MUST obtain consent from | After the end user is authenticated, the OP MUST obtain consent from | |||
| the End-User to release authorization information to the RDAP Server/ | the end user to release authorization information to the RDAP server | |||
| RP. This process is described in Section 3.1.2.4 of the OpenID | acting as an RP. This process is described in Section 3.1.2.4 of | |||
| Connect Core protocol [OIDCC]. | [OIDCC]. | |||
| 3.1.4.4. Authorization Response and Validation | 3.1.4.4. Authorization Response and Validation | |||
| After obtaining an authorization result, the OP will send a response | After obtaining an authorization result, the OP will send a response | |||
| to the RP that provides the result of the authorization process using | to the RP that provides the result of the authorization process using | |||
| an Authorization Code. The RP MUST validate the response. This | an authorization code. The RP MUST validate the response. This | |||
| process is described in Sections 3.1.2.5 - 3.1.2.7 of the OpenID | process is described in Sections 3.1.2.5 - 3.1.2.7 of [OIDCC]. | |||
| Connect Core protocol [OIDCC]. | ||||
| 3.1.4.5. Token Processing | 3.1.4.5. Token Processing | |||
| The RP sends a Token Request using the Authorization Grant to a Token | The RP sends a token request using the authorization grant to a token | |||
| Endpoint to obtain a Token Response containing an Access Token, ID | endpoint to obtain a token response containing an access token, ID | |||
| Token, and an OPTIONAL Refresh Token. The RP MUST validate the Token | Token, and an OPTIONAL refresh token. The RP MUST validate the token | |||
| Response. This process is described in Section 3.1.3.5 of the OpenID | response. This process is described in Section 3.1.3.5 [OIDCC]. | |||
| Connect Core protocol [OIDCC]. | ||||
| 3.1.4.6. Delivery of User Information | 3.1.4.6. Delivery of User Information | |||
| The set of claims can be retrieved by sending a request to a UserInfo | The set of claims can be retrieved by sending a request to a UserInfo | |||
| Endpoint using the Access Token. The claims are returned in the ID | Endpoint using the access token. The claims are returned in the ID | |||
| Token. The process of retrieving claims from a UserInfo Endpoint is | Token. The process of retrieving claims from a UserInfo Endpoint is | |||
| described in Section 5.3 of the OpenID Connect Core protocol [OIDCC]. | described in Section 5.3 of [OIDCC]. | |||
| OpenID Connect specifies a set of standard claims in Section 5.1 of | OpenID Connect specifies a set of standard claims in Section 5.1 of | |||
| the OpenID Connect Core protocol [OIDCC]. Additional claims for RDAP | [OIDCC]. Additional claims for RDAP are described in Section 3.1.5. | |||
| are described in Section 3.1.5. | ||||
| 3.1.5. Specialized Claims and Authorization Scope for RDAP | 3.1.5. Specialized Claims and Authorization Scope for RDAP | |||
| OpenID Connect claims are pieces of information used to make | OpenID Connect claims are pieces of information used to make | |||
| assertions about an entity. Section 5 of the OpenID Connect Core | assertions about an entity. Section 5 of [OIDCC] describes a set of | |||
| protocol [OIDCC] describes a set of standard claims. Section 5.1.2 | standard claims. Section 5.1.2 of [OIDCC] notes that additional | |||
| notes that additional claims MAY be used, and it describes a method | claims MAY be used, and it describes a method to create them. The | |||
| to create them. The set of claims that are specific to RDAP are | set of claims that are specific to RDAP are associated with an OAuth | |||
| associated with an OAuth scope request parameter value (see | scope request parameter value (see Section 3.3 of [RFC6749]) of | |||
| Section 3.3 of RFC 6749 ([RFC6749])) of "rdap". | "rdap". | |||
| 3.1.5.1. Stated Purposes | 3.1.5.1. Stated Purposes | |||
| Communities of RDAP users and operators may wish to make and validate | Communities of RDAP users and operators may wish to make and validate | |||
| claims about a user's "need to know" when it comes to requesting | claims about a user's "need to know" when it comes to requesting | |||
| access to a protected resource. For example, a law enforcement agent | access to a protected resource. For example, a law enforcement agent | |||
| or a trademark attorney may wish to be able to assert that they have | or a trademark attorney may wish to be able to assert that they have | |||
| a legal right to access a protected resource, and a server operator | a legal right to access a protected resource, and a server operator | |||
| may need to be able to receive and validate that claim. These needs | may need to be able to receive and validate that claim. These needs | |||
| can be met by defining and using an additional | can be met by defining and using an additional | |||
| "rdap_allowed_purposes" claim. | "rdap_allowed_purposes" claim. | |||
| The "rdap_allowed_purposes" claim identifies the purposes for which | The "rdap_allowed_purposes" claim identifies the purposes for which | |||
| access to a protected resource can be requested by an End-User. Use | access to a protected resource can be requested by an end user. Use | |||
| of the "rdap_allowed_purposes" claim is OPTIONAL; processing of this | of the "rdap_allowed_purposes" claim is OPTIONAL; processing of this | |||
| claim is subject to server acceptance of the purposes, the trust | claim is subject to server acceptance of the purposes, the trust | |||
| level assigned to this claim by the server, and successful | level assigned to this claim by the server, and successful | |||
| authentication of the End-User. Unrecognized purpose values MUST be | authentication of the end user. Unrecognized purpose values MUST be | |||
| ignored and the associated query MUST be processed as if the | ignored, and the associated query MUST be processed as if the | |||
| unrecognized purpose value was not present at all. See Section 9.3 | unrecognized purpose value was not present at all. See Section 9.3 | |||
| for a description of the IANA considerations associated with this | for a description of the IANA considerations associated with this | |||
| claim. | claim. | |||
| The "rdap_allowed_purposes" claim is represented as an array of case- | The "rdap_allowed_purposes" claim is represented as an array of case- | |||
| sensitive StringOrURI values as specified in Section 2 of the JSON | sensitive StringOrURI values as specified in Section 2 of [RFC7519]. | |||
| Web Token (JWT) specification ([RFC7519]). An example: | An example: | |||
| "rdap_allowed_purposes": ["domainNameControl","dnsTransparency"] | "rdap_allowed_purposes": ["domainNameControl","dnsTransparency"] | |||
| Purpose values are assigned to an End User's credential by an | Purpose values are assigned to an end user's credential by an | |||
| Identity Provider. Identity Providers MUST ensure that appropriate | identity provider. Identity providers MUST ensure that appropriate | |||
| purpose values are only assigned to End User identities that are | purpose values are only assigned to end user identities that are | |||
| authorized to use them. | authorized to use them. | |||
| 3.1.5.2. Do Not Track | 3.1.5.2. Do Not Track | |||
| Communities of RDAP users and operators may wish to make and validate | Communities of RDAP users and operators may wish to make and validate | |||
| claims about a user's wish to not have their queries logged, tracked, | claims about a user's wish to not have their queries logged, tracked, | |||
| or recorded. For example, a law enforcement agent may wish to assert | or recorded. For example, a law enforcement agent may wish to assert | |||
| that their queries are part of a criminal investigation and should | that their queries are part of a criminal investigation and should | |||
| not be tracked due to a risk of query exposure compromising the | not be tracked due to a risk of query exposure compromising the | |||
| investigation, and a server operator may need to be able to receive | investigation, and a server operator may need to be able to receive | |||
| and validate that claim. These needs can be met by defining and | and validate that claim. These needs can be met by defining and | |||
| using an additional "do not track" claim. | using an additional "do not track" claim. | |||
| The "do not track" ("rdap_dnt_allowed") claim can be used to identify | The "do not track" ("rdap_dnt_allowed") claim can be used to identify | |||
| an End-User that is authorized to perform queries without the End- | an end user that is authorized to perform queries without the end | |||
| User's association with those queries being logged, tracked, or | user's association with those queries being logged, tracked, or | |||
| recorded by the server. Client use of the "rdap_dnt_allowed" claim | recorded by the server. Client use of the "rdap_dnt_allowed" claim | |||
| is OPTIONAL. Server operators MUST NOT log, track, or record any | is OPTIONAL. Server operators MUST NOT log, track, or record any | |||
| association of the query and the End-User's identity if the End-User | association of the query and the end user's identity if the end user | |||
| is successfully identified and authorized, the "rdap_dnt_allowed" | is successfully identified and authorized, if the "rdap_dnt_allowed" | |||
| claim is present, the value of the claim is "true", and accepting the | claim is present, if the value of the claim is "true", and if | |||
| claim complies with local regulations regarding logging and tracking. | accepting the claim complies with local regulations regarding logging | |||
| and tracking. | ||||
| The "rdap_dnt_allowed" value is represented as a JSON boolean | The "rdap_dnt_allowed" value is represented as a JSON boolean | |||
| literal. An example: | literal. An example: | |||
| rdap_dnt_allowed: true | rdap_dnt_allowed: true | |||
| No special query tracking processing is required if this claim is not | No special query tracking processing is required if this claim is not | |||
| present or if the value of the claim is "false". Use of this claim | present or if the value of the claim is "false". Use of this claim | |||
| MUST be limited to End-Users who are granted "do not track" | MUST be limited to end users who are granted "do not track" | |||
| privileges in accordance with service policies and regulations. | privileges in accordance with service policies and regulations. | |||
| Specification of these policies and regulations is beyond the scope | Specification of these policies and regulations is beyond the scope | |||
| of this document. | of this document. | |||
| 4. Common Protocol Features | 4. Common Protocol Features | |||
| As described in Section 3.1.4.1, an RDAP server MUST provide | As described in Section 3.1.4.1, an RDAP server MUST provide | |||
| information about its capabilities and supported OPs in a "help" | information about its capabilities and supported OPs in a "help" | |||
| query response. This specification describes a new | query response. This specification describes a new | |||
| "farv1_openidcConfiguration" data structure that describes the OpenID | "farv1_openidcConfiguration" data structure that describes the OpenID | |||
| Connect configuration and related extension features supported by the | Connect configuration and related extension features supported by the | |||
| RDAP server. This data structure is returned to all client types. | RDAP server. This data structure is returned to all client types. | |||
| 4.1. OpenID Connect Configuration | 4.1. OpenID Connect Configuration | |||
| The "farv1_openidcConfiguration" data structure is an object with the | The "farv1_openidcConfiguration" data structure is an object with the | |||
| following members: | following members: | |||
| 1. "sessionClientSupported": (REQUIRED) a boolean value that | "sessionClientSupported": (REQUIRED) a boolean value that describes | |||
| describes RDAP server support for session-oriented clients (see | RDAP server support for session-oriented clients (see | |||
| Section 3.1.2). | Section 3.1.2). | |||
| 2. "tokenClientSupported": (REQUIRED) a boolean value that describes | ||||
| RDAP server support for token-oriented clients (see | ||||
| Section 3.1.2). | ||||
| 3. "dntSupported": (REQUIRED) a boolean value that describes RDAP | ||||
| server support for the "farv1_dnt" query parameter (see | ||||
| Section 4.2.2). | ||||
| 4. "providerDiscoverySupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for discovery of providers of End- | ||||
| User identifiers. The default value is "true". | ||||
| 5. "issuerIdentifierSupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for explicit client specification | ||||
| of an Issuer Identifier. The default value is "true". | ||||
| 6. "implicitTokenRefreshSupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for implicit token refresh. The | ||||
| default value is "false". | ||||
| 7. "openidcProviders": (OPTIONAL) a list of objects with the | ||||
| following members that describes the set of OPs that are | ||||
| supported by the RDAP server. This data is RECOMMENDED if the | ||||
| value of issuerIdentifierSupported is "true": | ||||
| a. "iss": (REQUIRED) a URI value that represents the Issuer | ||||
| Identifier of the OP as per the OpenID Connect Core | ||||
| specification [OIDCC] | ||||
| b. "name": (REQUIRED) a string value representing the human- | ||||
| friendly name of the OP. | ||||
| c. "default": (OPTIONAL) a boolean value that describes RDAP | "tokenClientSupported": (REQUIRED) a boolean value that describes | |||
| server support for an OPTIONAL default OP that will be used | RDAP server support for token-oriented clients (see | |||
| when a client omits the "farv1_id" and "farv1_iss" query | Section 3.1.2). | |||
| parameters from a "farv1_session/login" request. Only one | ||||
| member of this set can be identified as the default OP by | ||||
| setting a value of "true". The default value is "false". | ||||
| d. "additionalAuthorizationQueryParams": (OPTIONAL) an object | ||||
| where each member represents an OAuth authorization request | ||||
| parameter name-value pair supported by the OP. The name | ||||
| represents an OAuth query parameter and the value is the | ||||
| query parameter value. A token-oriented RDAP client SHOULD | ||||
| add these query parameters and their corresponding values to | ||||
| the Authentication Request URL when requesting authorization | ||||
| by a specified OP through a proxy OP. | ||||
| An RDAP server MUST set either the "sessionClientSupported" or | "dntSupported": (REQUIRED) a boolean value that describes RDAP | |||
| server support for the "farv1_dnt" query parameter (see | ||||
| Section 4.2.2). | ||||
| "providerDiscoverySupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for discovery of providers of end- | ||||
| user identifiers. The default value is "true". | ||||
| "issuerIdentifierSupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for explicit client specification of | ||||
| an Issuer Identifier. The default value is "true". | ||||
| "implicitTokenRefreshSupported": (OPTIONAL) a boolean value that | ||||
| describes RDAP server support for implicit token refresh. The | ||||
| default value is "false". | ||||
| "openidcProviders": (OPTIONAL) a list of objects with the following | ||||
| members that describes the set of OPs that are supported by the | ||||
| RDAP server. This data is RECOMMENDED if the value of | ||||
| issuerIdentifierSupported is "true": | ||||
| "iss": (REQUIRED) a URI value that represents the Issuer | ||||
| Identifier of the OP as per the OpenID Connect Core | ||||
| specification [OIDCC]. | ||||
| "name": (REQUIRED) a string value representing the human-friendly | ||||
| name of the OP. | ||||
| "default": (OPTIONAL) a boolean value that describes RDAP server | ||||
| support for an OPTIONAL default OP that will be used when a | ||||
| client omits the "farv1_id" and "farv1_iss" query parameters | ||||
| from a "farv1_session/login" request. Only one member of this | ||||
| set can be identified as the default OP by setting a value of | ||||
| "true". The default value is "false". | ||||
| "additionalAuthorizationQueryParams": (OPTIONAL) an object where | ||||
| each member represents an OAuth authorization request parameter | ||||
| name-value pair supported by the OP. The name represents an | ||||
| OAuth query parameter, and the value is the query parameter | ||||
| value. A token-oriented RDAP client SHOULD add these query | ||||
| parameters and their corresponding values to the Authentication | ||||
| Request URL when requesting authorization by a specified OP | ||||
| through a proxy OP. | ||||
| An RDAP server MUST set either the "sessionClientSupported" or the | ||||
| "tokenClientSupported" value to "true". Both values MAY be set to | "tokenClientSupported" value to "true". Both values MAY be set to | |||
| "true" if an RDAP server supports both types of client. | "true" if an RDAP server supports both types of clients. | |||
| The "providerDiscoverySupported" value has a direct impact on the use | The "providerDiscoverySupported" value has a direct impact on the use | |||
| of the "farv1_id" query parameter described in Section 3.1.4.2 and | of the "farv1_id" query parameter described in Sections 3.1.4.2 and | |||
| Section 5.2.1. The value of "providerDiscoverySupported" MUST be | 5.2.1. The value of "providerDiscoverySupported" MUST be "true" for | |||
| "true" for an RDAP server to properly accept and process "farv1_id" | an RDAP server to properly accept and process "farv1_id" query | |||
| query parameters. Similarly, The "issuerIdentifierSupported" value | parameters. Similarly, the "issuerIdentifierSupported" value has a | |||
| has a direct impact on the use of the "farv1_iss" query parameter | direct impact on the use of the "farv1_iss" query parameter described | |||
| described in Section 5.2.2. The value of "issuerIdentifierSupported" | in Section 5.2.2. The value of "issuerIdentifierSupported" MUST be | |||
| MUST be "true" for an RDAP server to properly accept and process | "true" for an RDAP server to properly accept and process "farv1_iss" | |||
| "farv1_iss" query parameters. | query parameters. | |||
| An example of a "farv1_openidcConfiguration" data structure: | An example of a "farv1_openidcConfiguration" data structure: | |||
| "farv1_openidcConfiguration": { | "farv1_openidcConfiguration": { | |||
| "sessionClientSupported": true, | "sessionClientSupported": true, | |||
| "tokenClientSupported": true, | "tokenClientSupported": true, | |||
| "dntSupported": false, | "dntSupported": false, | |||
| "providerDiscoverySupported": true, | "providerDiscoverySupported": true, | |||
| "issuerIdentifierSupported": true, | "issuerIdentifierSupported": true, | |||
| "openidcProviders": | "openidcProviders": | |||
| skipping to change at page 18, line 40 ¶ | skipping to change at line 833 ¶ | |||
| } | } | |||
| Figure 3 | Figure 3 | |||
| 4.2. RDAP Query Parameters | 4.2. RDAP Query Parameters | |||
| This specification describes two OPTIONAL query parameters for use | This specification describes two OPTIONAL query parameters for use | |||
| with RDAP queries that request access to information associated with | with RDAP queries that request access to information associated with | |||
| protected resources: | protected resources: | |||
| 1. "farv1_qp": A query parameter to identify the purpose of the | "farv1_qp": A query parameter to identify the purpose of the query. | |||
| query. | ||||
| 2. "farv1_dnt": A query parameter to request that the server not log | "farv1_dnt": A query parameter to request that the server not log or | |||
| or otherwise record information about the identity associated | otherwise record information about the identity associated with a | |||
| with a query. | query. | |||
| One or both parameters MAY be added to an RDAP request URI using the | One or both parameters MAY be added to an RDAP request URI using the | |||
| syntax described in the "application/x-www-form-urlencoded" section | syntax described in Section "application/x-www-form-urlencoded" of | |||
| of the WHATWG URL Standard [HTMLURL]. | [HTMLURL]. | |||
| 4.2.1. RDAP Query Purpose | 4.2.1. RDAP Query Purpose | |||
| This query is represented as a "key=value" pair using a key value of | This query is represented as a "key=value" pair using a key value of | |||
| "farv1_qp" and a value component that contains a single query purpose | "farv1_qp" and a value component that contains a single query purpose | |||
| string from the set of allowed purposes associated with the End- | string from the set of allowed purposes associated with the end | |||
| User's identity (see Section 3.1.5.1). If present, the server SHOULD | user's identity (see Section 3.1.5.1). If present, the server SHOULD | |||
| compare the value of the parameter to the "rdap_allowed_purposes" | compare the value of the parameter to the "rdap_allowed_purposes" | |||
| claim values associated with the End-User's identity and ensure that | claim values associated with the end user's identity and ensure that | |||
| the requested purpose is present in the set of allowed purposes. The | the requested purpose is present in the set of allowed purposes. The | |||
| RDAP server MAY choose to ignore both requested purpose and the | RDAP server MAY choose to ignore both the requested purpose and the | |||
| "rdap_allowed_purposes" claim values if they are inconsistent with | "rdap_allowed_purposes" claim values if they are inconsistent with | |||
| local server policy. The server MUST return an HTTP 403 (Forbidden) | local server policy. The server MUST return an HTTP 403 (Forbidden) | |||
| response if the requested purpose is not an allowed purpose. If the | response if the requested purpose is not an allowed purpose. If the | |||
| "farv1_qp" parameter is not present, the server MUST process the | "farv1_qp" parameter is not present, the server MUST process the | |||
| query and make an access control decision based on any other | query and make an access control decision based on any other | |||
| information known to the server about the End-User and the | information known to the server about the end user and the | |||
| information they are requesting. For example, a server MAY treat the | information they are requesting. For example, a server MAY treat the | |||
| request as one performed by an unidentified or unauthenticated user | request as one performed by an unidentified or unauthenticated user | |||
| and return either an error or an appropriate subset of the available | and return either an error or an appropriate subset of the available | |||
| data. An example domain query using the "farv1_qp" query parameter: | data. An example domain query using the "farv1_qp" query parameter: | |||
| https://example.com/rdap/domain/example.com?farv1_qp=legalActions | https://example.com/rdap/domain/example.com?farv1_qp=legalActions | |||
| Figure 4 | ||||
| 4.2.2. RDAP Do Not Track | 4.2.2. RDAP Do Not Track | |||
| This query is represented as a "key=value" pair using a key value of | This query is represented as a "key=value" pair using a key value of | |||
| "farv1_dnt" and a value component that contains a single boolean | "farv1_dnt" and a value component that contains a single boolean | |||
| value. A value of "true" indicates that the End-User is requesting | value. A value of "true" indicates that the end user is requesting | |||
| that their query is not tracked or logged in accordance with server | that their query is not tracked or logged in accordance with server | |||
| policy. A value of "false" indicates that the End-User is accepting | policy. A value of "false" indicates that the end user is accepting | |||
| that their query can be tracked or logged in accordance with server | that their query can be tracked or logged in accordance with server | |||
| policy. The server MUST return an HTTP 403 (Forbidden) response if | policy. The server MUST return an HTTP 403 (Forbidden) response if | |||
| the server is unable to perform the action requested by this query | the server is unable to perform the action requested by this query | |||
| parameter. An example domain query using the "farv1_dnt" query | parameter. An example domain query using the "farv1_dnt" query | |||
| parameter: | parameter: | |||
| https://example.com/rdap/domain/example.com?farv1_dnt=true | https://example.com/rdap/domain/example.com?farv1_dnt=true | |||
| Figure 5 | ||||
| 4.2.3. Parameter Processing | 4.2.3. Parameter Processing | |||
| Unrecognized query parameters MUST be ignored. An RDAP server that | Unrecognized query parameters MUST be ignored. An RDAP server that | |||
| processes an authenticated query MUST determine if the End-User | processes an authenticated query MUST determine if the end-user | |||
| identification information is associated with an OP that is | identification information is associated with an OP that is | |||
| recognized and supported by the server. RDAP servers MUST reject | recognized and supported by the server. RDAP servers MUST reject | |||
| queries that include identification information that is not | queries that include identification information that is not | |||
| associated with a supported OP by returning an HTTP 400 (Bad Request) | associated with a supported OP by returning an HTTP 400 (Bad Request) | |||
| response. An RDAP server that receives a query containing | response. An RDAP server that receives a query containing | |||
| identification information associated with a recognized OP MUST | identification information associated with a recognized OP MUST | |||
| perform the steps required to authenticate the user with the OP, | perform the steps required to authenticate the user with the OP, | |||
| process the query, and return an RDAP response that is appropriate | process the query, and return an RDAP response that is appropriate | |||
| for the End-User's level of authorization and access. | for the end user's level of authorization and access. | |||
| 5. Protocol Features for Session-Oriented Clients | 5. Protocol Features for Session-Oriented Clients | |||
| This specification adds the following features to RDAP that are | This specification adds the following features to RDAP that are | |||
| commonly used by session-oriented clients: | commonly used by session-oriented clients: | |||
| 1. Data structures to return information that describes an | 1. Data structures to return information that describes an | |||
| established session and the information needed to establish a | established session and the information needed to establish a | |||
| session for a UI-constrained device. | session for a UI-constrained device. | |||
| 2. A query parameter to request authentication for a specific End- | ||||
| User identity. | 2. A query parameter to request authentication for a specific end- | |||
| 3. A query parameter to support authentication for a specific End- | user identity. | |||
| User identity on a device with a constrained user interface. | ||||
| 3. A query parameter to support authentication for a specific end- | ||||
| user identity on a device with a constrained user interface. | ||||
| 4. A query parameter to identify the purpose of the query. | 4. A query parameter to identify the purpose of the query. | |||
| 5. A query parameter to request that the server not log or otherwise | 5. A query parameter to request that the server not log or otherwise | |||
| record information about the identity associated with a query. | record information about the identity associated with a query. | |||
| 6. Path segments to start, stop, refresh, and determine the status | 6. Path segments to start, stop, refresh, and determine the status | |||
| of an authenticated session for a specific End-User identity. | of an authenticated session for a specific end-user identity. | |||
| 5.1. Data Structures | 5.1. Data Structures | |||
| This specification describes two new data structures that are used to | This specification describes two new data structures that are used to | |||
| return information to a session-oriented client: a "farv1_session" | return information to a session-oriented client: | |||
| data structure that contains information that describes an | ||||
| established session, and a "farv1_deviceInfo" data structure that | "farv1_session": A data structure that contains information that | |||
| contains information that describes an active attempt to establish a | describes an established session. | |||
| session on a UI-constrained device. | ||||
| "farv1_deviceInfo": A data structure that contains information that | ||||
| describes an active attempt to establish a session on a UI- | ||||
| constrained device. | ||||
| 5.1.1. Session | 5.1.1. Session | |||
| The "farv1_session" data structure is an object that contains the | The "farv1_session" data structure is an object that contains the | |||
| following members: | following members: | |||
| 1. "userID": an OPTIONAL string value that represents the End-User | "userID": an OPTIONAL string value that represents the end-user | |||
| identifier associated with the session. | identifier associated with the session. | |||
| 2. "iss": an OPTIONAL URI value that represents the issuer of the | ||||
| End-User identifier associated with the session. | ||||
| 3. "userClaims": an OPTIONAL object that contains the set of claims | ||||
| associated with the End-User's identity based on the user | ||||
| information provided by the OP as described in Section 3.1.4.6 | ||||
| and processed by the RDAP server in the authentication and | ||||
| authorization process. The set of possible values is determined | ||||
| by OP policy and RDAP server policy. | ||||
| 4. "sessionInfo": an OPTIONAL object that contains two members: | ||||
| a. "tokenExpiration": an integer value that represents the | "iss": an OPTIONAL URI value that represents the issuer of the end- | |||
| number of seconds that remain in the lifetime of the Access | user identifier associated with the session. | |||
| Token, and | ||||
| b. "tokenRefresh": a boolean value that indicates if the OP | "userClaims": an OPTIONAL object that contains the set of claims | |||
| supports refresh tokens. As described in RFC 6749 [RFC6749], | associated with the end user's identity based on the user | |||
| support for refresh tokens is OPTIONAL. | information provided by the OP as described in Section 3.1.4.6 and | |||
| processed by the RDAP server in the authentication and | ||||
| authorization process. The set of possible values is determined | ||||
| by OP policy and RDAP server policy. | ||||
| "sessionInfo": an OPTIONAL object that contains two members: | ||||
| "tokenExpiration": an integer value that represents the number of | ||||
| seconds that remain in the lifetime of the access token. | ||||
| "tokenRefresh": a boolean value that indicates if the OP supports | ||||
| refresh tokens. As described in [RFC6749], support for refresh | ||||
| tokens is OPTIONAL. | ||||
| Note that all of the members of the "farv1_session" data structure | Note that all of the members of the "farv1_session" data structure | |||
| are OPTIONAL. See Section 5.2.3 for instructions describing when to | are OPTIONAL. See Section 5.2.3 for instructions describing when to | |||
| return the minimum set of members. | return the minimum set of members. | |||
| An example of a "farv1_session" data structure: | An example of a "farv1_session" data structure: | |||
| "farv1_session": { | "farv1_session": { | |||
| "userID": "user.idp.example", | "userID": "user.idp.example", | |||
| "iss": "https://idp.example.com", | "iss": "https://idp.example.com", | |||
| skipping to change at page 21, line 42 ¶ | skipping to change at line 991 ¶ | |||
| "personalDataProtection" | "personalDataProtection" | |||
| ], | ], | |||
| "rdap_dnt_allowed": false | "rdap_dnt_allowed": false | |||
| }, | }, | |||
| "sessionInfo": { | "sessionInfo": { | |||
| "tokenExpiration": 3599, | "tokenExpiration": 3599, | |||
| "tokenRefresh": true | "tokenRefresh": true | |||
| } | } | |||
| } | } | |||
| Figure 4 | Figure 6 | |||
| 5.1.2. Device Info | 5.1.2. Device Info | |||
| The flow described in Section 3.1.4 requires an End-User to interact | The flow described in Section 3.1.4 requires an end user to interact | |||
| with a server using a user interface that can process HTTP. This | with a server using a user interface that can process HTTP. This | |||
| will not work well in situations where the client is automated or an | will not work well in situations where the client is automated or an | |||
| End-User is using a command line user interface such as curl | end user is using a command-line user interface such as curl | |||
| (https://curl.se/) or wget (https://www.gnu.org/software/wget/). | (https://curl.se/) or wget (https://www.gnu.org/software/wget/). | |||
| This limitation can be addressed using a web browser on a second | This limitation can be addressed using a web browser on a second | |||
| device. The information that needs to be entered using the web | device. The information that needs to be entered using the web | |||
| browser is contained in the "farv1_deviceInfo" data structure, an | browser is contained in the "farv1_deviceInfo" data structure, an | |||
| object that contains members as described in Section 3.2 ("Device | object that contains members as described in Section 3.2 of | |||
| Authorization Response") of RFC 8628 [RFC8628]. | [RFC8628]. | |||
| An example of a "farv1_deviceInfo" data structure: | An example of a "farv1_deviceInfo" data structure: | |||
| "farv1_deviceInfo": { | "farv1_deviceInfo": { | |||
| "device_code": "AH-1ng2ezu", | "device_code": "AH-1ng2ezu", | |||
| "user_code": "NJJQ-GJFC", | "user_code": "NJJQ-GJFC", | |||
| "verification_uri": "https://www.example.com/device", | "verification_uri": "https://www.example.com/device", | |||
| "verification_uri_complete": | "verification_uri_complete": | |||
| "https://www.example.com/device?user_code=NJJQ-GJFC", | "https://www.example.com/device?user_code=NJJQ-GJFC", | |||
| "expires_in": 1800, | "expires_in": 1800, | |||
| "interval": 5 | "interval": 5 | |||
| } | } | |||
| Figure 5 | Figure 7 | |||
| 5.2. Client Login | 5.2. Client Login | |||
| Client authentication is requested by sending a "farv1_session/login" | Client authentication is requested by sending a "farv1_session/login" | |||
| request to an RDAP server. If the RDAP server supports only remote | request to an RDAP server. If the RDAP server supports only remote | |||
| OpenID Providers, the "farv1_session/login" request MUST include at | OPs, the "farv1_session/login" request MUST include at least one end- | |||
| least one of an End-User Identifier or an OP Issuer Identifier. | user identifier or OP Issuer Identifier. | |||
| The server sets an HTTP cookie as described in RFC 6265 [RFC6265] | The server sets an HTTP cookie as described in [RFC6265] when the | |||
| when the "farv1_session/login" request is received and processed | "farv1_session/login" request is received and processed successfully. | |||
| successfully. The client MUST include the session cookie received | The client MUST include the session cookie received from the server | |||
| from the server in any RDAP request within the scope of that session, | in any RDAP request within the scope of that session, including | |||
| including "farv1_session/refresh", "farv1_session/status" and | "farv1_session/refresh", "farv1_session/status", and "farv1_session/ | |||
| "farv1_session/logout". A "farv1_session/login" followed by another | logout". A "farv1_session/login" followed by another "farv1_session/ | |||
| "farv1_session/login" that does not include an HTTP cookie MUST start | login" that does not include an HTTP cookie MUST start a new session | |||
| a new session on the server that includes a new cookie. A server | on the server that includes a new cookie. A server that receives a | |||
| that receives a "farv1_session/login" followed by another | "farv1_session/login" followed by another "farv1_session/login" that | |||
| "farv1_session/login" that includes an HTTP cookie MUST return an | includes an HTTP cookie MUST return an HTTP 409 (Conflict) response. | |||
| HTTP 409 (Conflict) response. | ||||
| To help reduce the risk of resource starvation, a server MAY reject a | To help reduce the risk of resource starvation, a server MAY reject a | |||
| "farv1_session/login" request and refuse to start a new session by | "farv1_session/login" request and refuse to start a new session by | |||
| returning an HTTP 409 (Conflict) response if a server-side maximum | returning an HTTP 409 (Conflict) response if a server-side maximum | |||
| number of concurrent sessions per user exists and the client exceeds | number of concurrent sessions per user exists and the client exceeds | |||
| that limit. Additionally, an active session MAY be removed by the | that limit. Additionally, an active session MAY be removed by the | |||
| server due to timeout expiration or because a maximum session | server due to timeout expiration or because a maximum session | |||
| lifetime has been exceeded. Clients SHOULD proactively monitor the | lifetime has been exceeded. Clients SHOULD proactively monitor the | |||
| "tokenExpiration" value associated with an active session and refresh | "tokenExpiration" value associated with an active session and refresh | |||
| the session as appropriate to provide a positive user experience. | the session as appropriate to provide a positive user experience. | |||
| 5.2.1. End-User Identifier | 5.2.1. End-User Identifier | |||
| The End-User identifier is delivered using one of two methods: by | The end-user identifier is delivered using one of two methods: by | |||
| adding a query component to an RDAP request URI using the syntax | adding a query component to an RDAP request URI using the syntax | |||
| described in the "application/x-www-form-urlencoded" section of | described in Section "application/x-www-form-urlencoded" of [HTMLURL] | |||
| WHATWG URL Standard [HTMLURL], or by including an HTTP | or by including an HTTP "authorization" request header for the Basic | |||
| "Authorization" request header for the Basic authentication scheme as | authentication scheme as described in [RFC7617]. Clients can use | |||
| described in RFC 7617 [RFC7617]. Clients can use either of these | either of these methods to deliver the end-user identifier to a | |||
| methods to deliver the End-User identifier to a server that supports | server that supports remote OPs and provider discovery. Servers that | |||
| remote OpenID Providers and provider discovery. Servers that support | support remote OPs and provider discovery MUST accept both methods. | |||
| remote OpenID Providers and provider discovery MUST accept both | If the RDAP server supports a default OP or if provider discovery is | |||
| methods. If the RDAP server supports a default OpenID Provider or | not supported, the end-user identifier MAY be omitted. | |||
| provider discovery is not supported, the End-User identifier MAY be | ||||
| omitted. | ||||
| The query parameter used to deliver the End-User identifier is | The query parameter used to deliver the end-user identifier is | |||
| represented as an OPTIONAL "key=value" pair using a key value of | represented as an OPTIONAL "key=value" pair using a key value of | |||
| "farv1_id" and a value component that contains the client identifier | "farv1_id" and a value component that contains the client identifier | |||
| issued by an OP. An example for client identifier | issued by an OP. An example for client identifier | |||
| "user.idp.example": | "user.idp.example": | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ========== NOTE: '\' line wrapping per RFC 8792 =========== | |||
| https://example.com/rdap/farv1_session/\ | https://example.com/rdap/farv1_session/\ | |||
| login?farv1_id=user.idp.example | login?farv1_id=user.idp.example | |||
| Figure 8 | ||||
| The authorization header for the Basic authentication scheme contains | The authorization header for the Basic authentication scheme contains | |||
| a Base64-encoded representation of the client identifier issued by an | a base64-encoded representation of the client identifier issued by an | |||
| OP. No password is provided. An example for client identifier | OP. No password is provided. An example for client identifier | |||
| "user.idp.example": | "user.idp.example": | |||
| https://example.com/rdap/farv1_session/login | https://example.com/rdap/farv1_session/login | |||
| Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ== | Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ== | |||
| An example for use with a default OpenID Provider: | Figure 9 | |||
| An example for use with a default OP: | ||||
| https://example.com/rdap/farv1_session/login | https://example.com/rdap/farv1_session/login | |||
| Figure 10 | ||||
| 5.2.2. OP Issuer Identifier | 5.2.2. OP Issuer Identifier | |||
| The OP's Issuer Identifier is delivered by adding a query component | The OP's Issuer Identifier is delivered by adding a query component | |||
| to an RDAP request URI using the syntax described in the | to an RDAP request URI using the syntax described in Section | |||
| "application/x-www-form-urlencoded" section of WHATWG URL Standard | "application/x-www-form-urlencoded" of [HTMLURL]. If the RDAP server | |||
| [HTMLURL]. If the RDAP server supports a default OpenID Provider, | supports a default OP, the Issuer Identifier MAY be omitted. | |||
| the Issuer Identifier MAY be omitted. | ||||
| The query parameter used to deliver the OP's Issuer Identifier is | The query parameter used to deliver the OP's Issuer Identifier is | |||
| represented as an OPTIONAL "key=value" pair using a key value of | represented as an OPTIONAL "key=value" pair using a key value of | |||
| "farv1_iss" and a value component that contains the Issuer Identifier | "farv1_iss" and a value component that contains the Issuer Identifier | |||
| associated with an OP. An RDAP server MAY accept Issuer Identifiers | associated with an OP. An RDAP server MAY accept Issuer Identifiers | |||
| not specified in the "farv1_openidcConfiguration" data structure and | not specified in the "farv1_openidcConfiguration" data structure and | |||
| MAY also decide to accept specific Issuer Identifiers only from | MAY also decide to accept specific Issuer Identifiers only from | |||
| specific clients. An example for Issuer Identifier | specific clients. An example for Issuer Identifier | |||
| "https://idp.example.com": | "https://idp.example.com": | |||
| skipping to change at page 24, line 15 ¶ | skipping to change at line 1106 ¶ | |||
| The query parameter used to deliver the OP's Issuer Identifier is | The query parameter used to deliver the OP's Issuer Identifier is | |||
| represented as an OPTIONAL "key=value" pair using a key value of | represented as an OPTIONAL "key=value" pair using a key value of | |||
| "farv1_iss" and a value component that contains the Issuer Identifier | "farv1_iss" and a value component that contains the Issuer Identifier | |||
| associated with an OP. An RDAP server MAY accept Issuer Identifiers | associated with an OP. An RDAP server MAY accept Issuer Identifiers | |||
| not specified in the "farv1_openidcConfiguration" data structure and | not specified in the "farv1_openidcConfiguration" data structure and | |||
| MAY also decide to accept specific Issuer Identifiers only from | MAY also decide to accept specific Issuer Identifiers only from | |||
| specific clients. An example for Issuer Identifier | specific clients. An example for Issuer Identifier | |||
| "https://idp.example.com": | "https://idp.example.com": | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ========== NOTE: '\' line wrapping per RFC 8792 =========== | |||
| https://example.com/rdap/farv1_session/\ | https://example.com/rdap/farv1_session/\ | |||
| login?farv1_iss=https://idp.example.com | login?farv1_iss=https://idp.example.com | |||
| Figure 11 | ||||
| 5.2.3. Login Response | 5.2.3. Login Response | |||
| The response to this request MUST be a valid RDAP response, per RFC | The response to this request MUST be a valid RDAP response per | |||
| 9083 [RFC9083]. It MUST NOT include any members that relate to a | [RFC9083]. It MUST NOT include any members that relate to a specific | |||
| specific RDAP object type (e.g., "events", "status"). In addition, | RDAP object type (e.g., "events" or "status"). In addition, the | |||
| the response MAY include an indication of the requested operation's | response MAY include an indication of the requested operation's | |||
| success or failure in the "notices" data structure. If successful, | success or failure in the "notices" data structure. If successful, | |||
| the response MUST include a "farv1_session" data structure that | the response MUST include a "farv1_session" data structure that | |||
| includes a "sessionInfo" object and an OPTIONAL "userClaims" object. | includes a "sessionInfo" object and an OPTIONAL "userClaims" object. | |||
| If unsuccessful, the response MUST include a "farv1_session" data | If unsuccessful, the response MUST include a "farv1_session" data | |||
| structure that omits the "userClaims" and "sessionInfo" objects. | structure that omits the "userClaims" and "sessionInfo" objects. | |||
| An example of a successful "farv1_session/login" response: | An example of a successful "farv1_session/login" response: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| skipping to change at page 25, line 43 ¶ | skipping to change at line 1163 ¶ | |||
| ], | ], | |||
| "rdap_dnt_allowed": false | "rdap_dnt_allowed": false | |||
| }, | }, | |||
| "sessionInfo": { | "sessionInfo": { | |||
| "tokenExpiration": 3599, | "tokenExpiration": 3599, | |||
| "tokenRefresh": true | "tokenRefresh": true | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 6 | Figure 12 | |||
| An example of a failed "farv1_session/login" response: | An example of a failed "farv1_session/login" response: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| ], | ], | |||
| "lang": "en-US", | "lang": "en-US", | |||
| "notices": [ | "notices": [ | |||
| { | { | |||
| skipping to change at page 26, line 24 ¶ | skipping to change at line 1186 ¶ | |||
| "Login failed" | "Login failed" | |||
| ] | ] | |||
| } | } | |||
| ], | ], | |||
| "farv1_session": { | "farv1_session": { | |||
| "userID": "user.idp.example", | "userID": "user.idp.example", | |||
| "iss": "https://idp.example.com" | "iss": "https://idp.example.com" | |||
| } | } | |||
| } | } | |||
| Figure 7 | Figure 13 | |||
| 5.2.4. Clients with Limited User Interfaces | 5.2.4. Clients with Limited User Interfaces | |||
| The "OAuth 2.0 Device Authorization Grant" [RFC8628] provides an | "OAuth 2.0 Device Authorization Grant" [RFC8628] provides an OPTIONAL | |||
| OPTIONAL method to request user authorization from devices that have | method to request user authorization from devices that have an | |||
| an Internet connection, but lack a suitable browser for a more | Internet connection but lack a suitable browser for a more | |||
| conventional OAuth flow. This method requires an End-User to use a | conventional OAuth flow. This method requires an end user to use a | |||
| second device (such as a smart telephone) that has access to a web | second device (such as a smartphone) that has access to a web browser | |||
| browser for entry of a code sequence that is presented on the UI- | for entry of a code sequence that is presented on the UI-constrained | |||
| constrained device. | device. | |||
| 5.2.4.1. UI-constrained Client Login | 5.2.4.1. UI-Constrained Client Login | |||
| Client authentication is requested by sending a "farv1_session/ | Client authentication is requested by sending a "farv1_session/ | |||
| device" request to an RDAP server. If the RDAP server supports only | device" request to an RDAP server. If the RDAP server supports only | |||
| remote OpenID Providers, the "farv1_session/device" request MUST | remote OPs, the "farv1_session/device" request MUST include either an | |||
| include either an End-User identifier as described in Section 5.2.1 | end-user identifier as described in Section 5.2.1 or an OP Issuer | |||
| or an OP Issuer Identifier as described in Section 5.2.2. | Identifier as described in Section 5.2.2. | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| An example using wget for client identifier "user.idp.example": | An example using wget for client identifier "user.idp.example": | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| wget -qO- "https://example.com/rdap/farv1_session/device\ | wget -qO- "https://example.com/rdap/farv1_session/device\ | |||
| ?farv1_id=user.idp.example" | ?farv1_id=user.idp.example" | |||
| Figure 8 | Figure 14 | |||
| The authorization header for the Basic authentication scheme contains | The authorization header for the Basic authentication scheme contains | |||
| a Base64-encoded representation of the client identifier issued by an | a base64-encoded representation of the client identifier issued by an | |||
| OP. No password is provided. | OP. No password is provided. | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| An example using curl and an authorization header: | An example using curl and an authorization header: | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| curl -H "Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ=="\ | curl -H "Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ=="\ | |||
| "https://example.com/rdap/farv1_session/device" | "https://example.com/rdap/farv1_session/device" | |||
| Figure 9 | Figure 15 | |||
| The response to this request MUST be a valid RDAP response, per RFC | The response to this request MUST be a valid RDAP response per | |||
| 9083 [RFC9083]. It MUST NOT include any members that relate to a | [RFC9083]. It MUST NOT include any members that relate to a specific | |||
| specific RDAP object type (e.g., "events", "status"). In addition, | RDAP object type (e.g., "events" or "status"). In addition, the | |||
| the response MAY include an indication of the requested operation's | response MAY include an indication of the requested operation's | |||
| success or failure in the "notices" data structure, and, if | success or failure in the "notices" data structure and, if | |||
| successful, a "farv1_deviceInfo" data structure. | successful, a "farv1_deviceInfo" data structure. | |||
| An example of a "farv1_session/device" response: | An example of a "farv1_session/device" response: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| ], | ], | |||
| "lang": "en-US", | "lang": "en-US", | |||
| "notices": [ | "notices": [ | |||
| skipping to change at page 27, line 51 ¶ | skipping to change at line 1259 ¶ | |||
| "device_code": "AH-1ng2ezu", | "device_code": "AH-1ng2ezu", | |||
| "user_code": "NJJQ-GJFC", | "user_code": "NJJQ-GJFC", | |||
| "verification_uri": "https://www.example.com/device", | "verification_uri": "https://www.example.com/device", | |||
| "verification_uri_complete": | "verification_uri_complete": | |||
| "https://www.example.com/device?user_code=NJJQ-GJFC", | "https://www.example.com/device?user_code=NJJQ-GJFC", | |||
| "expires_in": 1800, | "expires_in": 1800, | |||
| "interval": 5 | "interval": 5 | |||
| } | } | |||
| } | } | |||
| Figure 10 | Figure 16 | |||
| 5.2.4.2. UI-constrained Client Login Polling | 5.2.4.2. UI-Constrained Client Login Polling | |||
| After successful processing of the "farv1_session/device" request, | After successful processing of the "farv1_session/device" request, | |||
| the client MUST send a "farv1_session/devicepoll" request to the RDAP | the client MUST send a "farv1_session/devicepoll" request to the RDAP | |||
| server to continue the login process. This request initiates the | server to continue the login process. This request initiates the | |||
| polling function described in RFC 8628 [RFC8628] on the RDAP server. | polling function described in [RFC8628] on the RDAP server. The RDAP | |||
| The RDAP server polls the OP as described in Section 3.4 of RFC 8628, | server polls the OP as described in Section 3.4 of [RFC8628], | |||
| allowing the RDAP server to wait for the End-User to enter the | allowing the RDAP server to wait for the end user to enter the | |||
| information returned from the "farv1_session/device" request using | information returned from the "farv1_session/device" request using | |||
| the interface on their second device. After the End-User has | the interface on their second device. After the end user has | |||
| completed that process, or if the process fails or times out, the OP | completed that process, or if the process fails or times out, the OP | |||
| will respond to the polling requests with an indication of success or | will respond to the polling requests with an indication of success or | |||
| failure. If the RDAP server supports only remote OpenID Providers, | failure. If the RDAP server supports only remote OPs, the | |||
| the "farv1_session/devicepoll" request MUST include either an End- | "farv1_session/devicepoll" request MUST include either an end-user | |||
| User identifier as described in Section 5.2.1 or an OP Issuer | identifier as described in Section 5.2.1 or an OP Issuer Identifier | |||
| Identifier as described in Section 5.2.2. | as described in Section 5.2.2. | |||
| The "farv1_session/devicepoll" request MUST also include a "farv1_dc" | The "farv1_session/devicepoll" request MUST also include a "farv1_dc" | |||
| query parameter. The query parameter is represented as an OPTIONAL | query parameter. The query parameter is represented as an OPTIONAL | |||
| "key=value" pair using a key value of "farv1_dc" and a value | "key=value" pair using a key value of "farv1_dc" and a value | |||
| component that contains the value of the device_code that was | component that contains the value of the device_code that was | |||
| returned in the response to the "farv1_session/device" request. | returned in the response to the "farv1_session/device" request. | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| An example using wget: | An example using wget: | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| wget -qO- --keep-session-cookies --save-cookies cookie.txt\ | wget -qO- --keep-session-cookies --save-cookies cookie.txt\ | |||
| "https://example.com/rdap/farv1_session/devicepoll\ | "https://example.com/rdap/farv1_session/devicepoll\ | |||
| ?farv1_id=user.idp.example&farv1_dc=AH-1ng2ezu" | ?farv1_id=user.idp.example&farv1_dc=AH-1ng2ezu" | |||
| Figure 11 | Figure 17 | |||
| An example using curl: | An example using curl: | |||
| ========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
| curl -c cookie.txt "https://example.com/rdap/farv1_session/\ | curl -c cookie.txt "https://example.com/rdap/farv1_session/\ | |||
| devicepoll?farv1_id=user.idp.example&farv1_dc=AH-1ng2ezu" | devicepoll?farv1_id=user.idp.example&farv1_dc=AH-1ng2ezu" | |||
| Figure 12 | Figure 18 | |||
| The response to this request MUST use the response structures | The response to this request MUST use the response structures | |||
| described in Section 5.2. RDAP query processing can continue | described in Section 5.2. RDAP query processing can continue | |||
| normally on the UI-constrained device once the device polling process | normally on the UI-constrained device once the device polling process | |||
| has been completed successfully. | has been completed successfully. | |||
| 5.3. Session Status | 5.3. Session Status | |||
| Clients MAY send a query to an RDAP server to determine the status of | Clients MAY send a query to an RDAP server to determine the status of | |||
| an existing login session using a "farv1_session/status" path | an existing login session using a "farv1_session/status" path | |||
| segment. An example "farv1_session/status" request: | segment. An example "farv1_session/status" request: | |||
| https://example.com/rdap/farv1_session/status | https://example.com/rdap/farv1_session/status | |||
| The response to this request MUST be a valid RDAP response, per RFC | Figure 19 | |||
| 9083 [RFC9083]. It MUST NOT include any members that relate to a | ||||
| specific RDAP object type (e.g., "events", "status"). In addition, | The response to this request MUST be a valid RDAP response per | |||
| the response MAY include an indication of the requested operation's | [RFC9083]. It MUST NOT include any members that relate to a specific | |||
| RDAP object type (e.g., "events" or "status"). In addition, the | ||||
| response MAY include an indication of the requested operation's | ||||
| success or failure in the "notices" data structure. If the operation | success or failure in the "notices" data structure. If the operation | |||
| is successful, and an active session exists, the response MUST | is successful and an active session exists, the response MUST include | |||
| include a "farv1_session" data structure that includes a | a "farv1_session" data structure that includes a "sessionInfo" object | |||
| "sessionInfo" object and an OPTIONAL "userClaims" object. If the | and an OPTIONAL "userClaims" object. If the operation is | |||
| operation is unsuccessful, or if no active session exists, the | unsuccessful or if no active session exists, the response MUST NOT | |||
| response MUST NOT include a "farv1_session" object. | include a "farv1_session" object. | |||
| An example of a "farv1_session/status" response for an active | An example of a "farv1_session/status" response for an active | |||
| session: | session: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| ], | ], | |||
| "lang": "en-US", | "lang": "en-US", | |||
| "notices": [ | "notices": [ | |||
| skipping to change at page 30, line 43 ¶ | skipping to change at line 1368 ¶ | |||
| ], | ], | |||
| "rdap_dnt_allowed": false | "rdap_dnt_allowed": false | |||
| }, | }, | |||
| "sessionInfo": { | "sessionInfo": { | |||
| "tokenExpiration": 3490, | "tokenExpiration": 3490, | |||
| "tokenRefresh": true | "tokenRefresh": true | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 13 | Figure 20 | |||
| If the operation is successful, and an active session does not exist, | If the operation is successful and an active session does not exist, | |||
| the response MAY note the lack of an active session in the "notices" | the response MAY note the lack of an active session in the "notices" | |||
| data structure. The "farv1_session" data structure MUST be omitted. | data structure. The "farv1_session" data structure MUST be omitted. | |||
| An example of a "farv1_session/status" response with no active | An example of a "farv1_session/status" response with no active | |||
| session: | session: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| ], | ], | |||
| skipping to change at page 31, line 21 ¶ | skipping to change at line 1393 ¶ | |||
| { | { | |||
| "title": "Session Status Result", | "title": "Session Status Result", | |||
| "description": [ | "description": [ | |||
| "Session status succeeded", | "Session status succeeded", | |||
| "No active session" | "No active session" | |||
| ] | ] | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Figure 14 | Figure 21 | |||
| 5.4. Session Refresh | 5.4. Session Refresh | |||
| Clients MAY send a request to an RDAP server to refresh, or extend, | Clients MAY send a request to an RDAP server to refresh or extend an | |||
| an existing login session using a "farv1_session/refresh" path | existing login session using a "farv1_session/refresh" path segment. | |||
| segment. The RDAP server MAY attempt to refresh the Access Token | The RDAP server MAY attempt to refresh the access token associated | |||
| associated with the current session as part of extending the session | with the current session as part of extending the session for a | |||
| for a period of time determined by the RDAP server. As described in | period of time determined by the RDAP server. As described in | |||
| RFC 6749 [RFC6749], OP support for refresh tokens is OPTIONAL. An | [RFC6749], OP support for refresh tokens is OPTIONAL. An RDAP server | |||
| RDAP server MUST determine if the OP supports token refresh and | MUST determine if the OP supports token refresh and process the | |||
| process the refresh request by either requesting refresh of the | refresh request by either requesting refresh of the access token or | |||
| Access Token or by returning a response that indicates that token | returning a response that indicates that token refresh is not | |||
| refresh is not supported by the OP in the "notices" data structure. | supported by the OP in the "notices" data structure. An example | |||
| An example "farv1_session/refresh" request: | "farv1_session/refresh" request: | |||
| https://example.com/rdap/farv1_session/refresh | https://example.com/rdap/farv1_session/refresh | |||
| The response to this request MUST be a valid RDAP response, per RFC | Figure 22 | |||
| 9083 [RFC9083]. It MUST NOT include any members that relate to a | ||||
| specific RDAP object type (e.g., "events", "status"). In addition, | The response to this request MUST be a valid RDAP response per | |||
| the response MAY include an indication of the requested operation's | [RFC9083]. It MUST NOT include any members that relate to a specific | |||
| RDAP object type (e.g., "events" or "status"). In addition, the | ||||
| response MAY include an indication of the requested operation's | ||||
| success or failure in the "notices" data structure. The response | success or failure in the "notices" data structure. The response | |||
| MUST include a "farv1_session" data structure that includes a | MUST include a "farv1_session" data structure that includes a | |||
| "sessionInfo" object and an OPTIONAL "userClaims" object. If | "sessionInfo" object and an OPTIONAL "userClaims" object. If | |||
| unsuccessful, but an active session exists, the response MUST include | unsuccessful but an active session exists, the response MUST include | |||
| a "farv1_session" data structure that includes a "sessionInfo" object | a "farv1_session" data structure that includes a "sessionInfo" object | |||
| and an OPTIONAL "userClaims" object. If unsuccessful, and no active | and an OPTIONAL "userClaims" object. If unsuccessful and no active | |||
| session exists, the response MUST omit the "farv1_session" data | session exists, the response MUST omit the "farv1_session" data | |||
| structure. | structure. | |||
| An example of a successful "farv1_session/refresh" response: | An example of a successful "farv1_session/refresh" response: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| ], | ], | |||
| "lang": "en-US", | "lang": "en-US", | |||
| skipping to change at page 32, line 44 ¶ | skipping to change at line 1467 ¶ | |||
| ], | ], | |||
| "rdap_dnt_allowed": false | "rdap_dnt_allowed": false | |||
| }, | }, | |||
| "sessionInfo": { | "sessionInfo": { | |||
| "tokenExpiration": 3599, | "tokenExpiration": 3599, | |||
| "tokenRefresh": true | "tokenRefresh": true | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 15 | Figure 23 | |||
| Alternatively, an RDAP server MAY attempt to refresh an Access Token | Alternatively, an RDAP server MAY attempt to refresh an access token | |||
| upon receipt of a query if the Access Token associated with an | upon receipt of a query if the access token associated with an | |||
| existing session has expired and the corresponding OP supports token | existing session has expired and the corresponding OP supports token | |||
| refresh. The default RDAP server behavior is described in the | refresh. The default RDAP server behavior is described in the | |||
| "implicitTokenRefreshSupported" value that's included in the | "implicitTokenRefreshSupported" value that's included in the | |||
| "farv1_openidcConfiguration" data structure (see Section 4.1). | "farv1_openidcConfiguration" data structure (see Section 4.1). | |||
| If the value of "implicitTokenRefreshSupported" is "true", the client | If the value of "implicitTokenRefreshSupported" is "true", the client | |||
| MAY either explicitly attempt to refresh the session using the | MAY either explicitly attempt to refresh the session using the | |||
| "farv1_session/refresh" query, or it MAY depend on the RDAP server to | "farv1_session/refresh" query or depend on the RDAP server to attempt | |||
| attempt to refresh the session as necessary when an RDAP query is | to refresh the session as necessary when an RDAP query is received by | |||
| received by the server. In this case, a server MUST attempt to | the server. In this case, a server MUST attempt to refresh the | |||
| refresh the Access Token upon receipt of a query if the Access Token | access token upon receipt of a query if the access token associated | |||
| associated with an existing session has expired and the corresponding | with an existing session has expired and the corresponding OP | |||
| OP supports token refresh. Servers MUST return an HTTP 401 | supports token refresh. Servers MUST return an HTTP 401 | |||
| (Unauthorized) response to a query if an attempt to implicitly | (Unauthorized) response to a query if an attempt to implicitly | |||
| refresh an existing session fails. | refresh an existing session fails. | |||
| If the value of "implicitTokenRefreshSupported" is "false", the | If the value of "implicitTokenRefreshSupported" is "false", the | |||
| client MUST explicitly attempt to refresh the session using the | client MUST explicitly attempt to refresh the session using the | |||
| "farv1_session/refresh" query to extend an existing session. If a | "farv1_session/refresh" query to extend an existing session. If a | |||
| session cannot be extended for any reason, the client MUST establish | session cannot be extended for any reason, the client MUST establish | |||
| a new session to continue authenticated query processing by | a new session to continue authenticated query processing by | |||
| submitting a "farv1_session/login" query. If the OP does not support | submitting a "farv1_session/login" query. If the OP does not support | |||
| token refresh, the client MUST submit a new "farv1_session/login" | token refresh, the client MUST submit a new "farv1_session/login" | |||
| request to establish a new session once an Access Token has expired. | request to establish a new session once an access token has expired. | |||
| Clients SHOULD NOT send a "farv1_session/refresh" request in the | Clients SHOULD NOT send a "farv1_session/refresh" request in the | |||
| absence of an active login session because the request conflicts with | absence of an active login session because the request conflicts with | |||
| the current state of the server. Servers MUST return an HTTP 409 | the current state of the server. Servers MUST return an HTTP 409 | |||
| (Conflict) response if a "farv1_session/refresh" request is received | (Conflict) response if a "farv1_session/refresh" request is received | |||
| in the absence of a session cookie. | in the absence of a session cookie. | |||
| 5.5. Client Logout | 5.5. Client Logout | |||
| Clients MAY send a request to an RDAP server to terminate an existing | Clients MAY send a request to an RDAP server to terminate an existing | |||
| login session. Termination of a session is requested using a | login session. Termination of a session is requested using a | |||
| "farv1_session/logout" path segment. Access and refresh tokens can | "farv1_session/logout" path segment. Access and refresh tokens can | |||
| be revoked during the "farv1_session/logout" process as described in | be revoked during the "farv1_session/logout" process as described in | |||
| RFC 7009 [RFC7009] if supported by the OP (token revocation endpoint | [RFC7009] if supported by the OP (token revocation endpoint support | |||
| support is OPTIONAL per RFC 8414 [RFC8414]). If supported, this | is OPTIONAL per [RFC8414]). If supported, this feature SHOULD be | |||
| feature SHOULD be used to ensure that the tokens are not mistakenly | used to ensure that the tokens are not mistakenly associated with a | |||
| associated with a future RDAP session. Alternatively, an RDAP server | future RDAP session. Alternatively, an RDAP server MAY attempt to | |||
| MAY attempt to log out from the OP using the "OpenID Connect RP- | log out from the OP using the OpenID Connect RP-Initiated Logout | |||
| Initiated Logout" protocol ([OIDCL]) if that protocol is supported by | protocol [OIDCL] if that protocol is supported by the OP. In any | |||
| the OP. In any case, to prevent abuse before the cookie times out an | case, to prevent abuse before the cookie times out, an RDAP server | |||
| RDAP server SHOULD invalidate the HTTP cookie associated with the | SHOULD invalidate the HTTP cookie associated with the session as part | |||
| session as part of terminating the session. | of terminating the session. | |||
| An example "farv1_session/logout" request: | An example "farv1_session/logout" request: | |||
| https://example.com/rdap/farv1_session/logout | https://example.com/rdap/farv1_session/logout | |||
| The response to this request MUST be a valid RDAP response, per RFC | ||||
| 9083 [RFC9083]. It MUST NOT include any members that relate to a | Figure 24 | |||
| specific RDAP object type (e.g., "events", "status"). In addition, | ||||
| the response MAY include an indication of the requested operation's | The response to this request MUST be a valid RDAP response per | |||
| [RFC9083]. It MUST NOT include any members that relate to a specific | ||||
| RDAP object type (e.g., "events" or "status"). In addition, the | ||||
| response MAY include an indication of the requested operation's | ||||
| success or failure in the "notices" data structure. The "notices" | success or failure in the "notices" data structure. The "notices" | |||
| data structure MAY include an indication of the success or failure of | data structure MAY include an indication of the success or failure of | |||
| any attempt to logout from the OP or to revoke the tokens issued by | any attempt to logout from the OP or to revoke the tokens issued by | |||
| the OP. | the OP. | |||
| An example of a "farv1_session/logout" response: | An example of a "farv1_session/logout" response: | |||
| { | { | |||
| "rdapConformance": [ | "rdapConformance": [ | |||
| "farv1" | "farv1" | |||
| skipping to change at page 34, line 32 ¶ | skipping to change at line 1552 ¶ | |||
| "title": "Logout Result", | "title": "Logout Result", | |||
| "description": [ | "description": [ | |||
| "Logout succeeded" | "Logout succeeded" | |||
| "Provider logout failed: Not supported by provider.", | "Provider logout failed: Not supported by provider.", | |||
| "Token revocation successful." | "Token revocation successful." | |||
| ] | ] | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Figure 16 | Figure 25 | |||
| In the absence of a "logout" request, an RDAP session MUST be | In the absence of a "logout" request, an RDAP session MUST be | |||
| terminated by the RDAP server after a server-defined period of time. | terminated by the RDAP server after a server-defined period of time. | |||
| The server SHOULD also take appropriate steps to ensure that the | The server SHOULD also take appropriate steps to ensure that the | |||
| tokens associated with the terminated session cannot be reused. This | tokens associated with the terminated session cannot be reused. This | |||
| SHOULD include revoking the tokens or logging out from the OP if | SHOULD include revoking the tokens or logging out from the OP if | |||
| either operation is supported by the OP. | either operation is supported by the OP. | |||
| 5.6. Request Sequencing | 5.6. Request Sequencing | |||
| The requests described in this document are typically performed in a | The requests described in this document are typically performed in a | |||
| specific sequence: "farv1_session/login" (or the related | specific sequence: | |||
| "farv1_session/device" and "farv1_session/devicepoll" requests) to | ||||
| start a session, "farv1_session/status" and/or "farv1_session/ | 1. "farv1_session/login" (or the related "farv1_session/device" and | |||
| refresh" to manage a session, and "farv1_session/logout" to end a | "farv1_session/devicepoll" requests) to start a session, | |||
| session. If a client sends a "farv1_session/status", "farv1_session/ | ||||
| refresh", or "farv1_session/logout" request in the absence of a | 2. "farv1_session/status" and/or "farv1_session/refresh" to manage a | |||
| session cookie, the server MUST return an HTTP 409 (Conflict) error. | session, | |||
| 3. and "farv1_session/logout" to end a session. | ||||
| If a client sends a "farv1_session/status", "farv1_session/refresh", | ||||
| or "farv1_session/logout" request in the absence of a session cookie, | ||||
| the server MUST return an HTTP 409 (Conflict) error. | ||||
| A client can end a session explicitly by sending a "farv1_session/ | A client can end a session explicitly by sending a "farv1_session/ | |||
| logout" request to the RDAP server. A session can also be ended | logout" request to the RDAP server. A session can also be ended | |||
| implicitly by the server after a server-defined period of time. The | implicitly by the server after a server-defined period of time. The | |||
| status of a session can be determined at any time by sending a | status of a session can be determined at any time by sending a | |||
| "farv1_session/status" query to the RDAP server. | "farv1_session/status" query to the RDAP server. | |||
| An RDAP server MUST maintain session state information for the | An RDAP server MUST maintain session state information for the | |||
| duration of an active session. This is commonly done using HTTP | duration of an active session. This is commonly done using HTTP | |||
| cookies as described in RFC 6265 [RFC6265]. Doing so allows End-User | cookies as described in [RFC6265]. Doing so allows end users to | |||
| to submit queries without having to explicitly identify and | submit queries without having to explicitly identify and authenticate | |||
| authenticate themselves for every query. | themselves for every query. | |||
| An RDAP server can receive queries that include a session cookie | An RDAP server can receive queries that include a session cookie | |||
| where the associated session has expired or is otherwise unavailable | where the associated session has expired or is otherwise unavailable | |||
| (e.g., due to the user requesting explicit logout for the associated | (e.g., due to the user requesting explicit logout for the associated | |||
| session). The server MUST return an HTTP 401 (Unauthorized) error in | session). The server MUST return an HTTP 401 (Unauthorized) error in | |||
| response to such queries. | response to such queries. | |||
| 6. Protocol Features for Token-Oriented Clients | 6. Protocol Features for Token-Oriented Clients | |||
| This specification adds additional processing steps for token- | This specification adds additional processing steps for token- | |||
| oriented clients as described in this section and Section 3.1.3. It | oriented clients as described in this section and Section 3.1.3. It | |||
| does not define additional data structures or RDAP-specific protocol | does not define additional data structures or RDAP-specific protocol | |||
| parameters specifically for token-oriented clients. | parameters specifically for token-oriented clients. | |||
| 6.1. Client Login | 6.1. Client Login | |||
| Clients identify and authenticate End-Users by exchanging information | Clients identify and authenticate end users by exchanging information | |||
| with an OP that is recognized by the RDAP server as described in | with an OP that is recognized by the RDAP server as described in | |||
| Section 3.1.4.2, Section 3.1.4.3, and Section 3.1.4.4. A client | Sections 3.1.4.2, 3.1.4.3, and 3.1.4.4. A client SHOULD append the | |||
| SHOULD append the "additionalAuthorizationQueryParams" values | "additionalAuthorizationQueryParams" values retrieved from the | |||
| retrieved from the "openidcProviders" array described in Section 4.1 | "openidcProviders" array described in Section 4.1 to the | |||
| to the Authorization Endpoint URL when requesting authorization from | authorization endpoint URL when requesting authorization from the OP. | |||
| the OP. Once these processes are completed successfully, the client | Once these processes are completed successfully, the client can | |||
| can request tokens from the OP as described in Section 3.1.4.5. The | request tokens from the OP as described in Section 3.1.4.5. The OP | |||
| OP SHOULD include the RDAP server's client_id in the "aud" claim | SHOULD include the RDAP server's client_id in the "aud" claim value | |||
| value of an issued ID token. The RDAP server MAY choose to ignore | of an issued ID Token. The RDAP server MAY choose to ignore the | |||
| the value of the "aud" claim or exchange the token as described in | value of the "aud" claim or exchange the token as described in | |||
| Section 6.4. With these steps completed, the Access Token received | Section 6.4. With these steps completed, the access token received | |||
| from the OP can be passed to an RDAP server in an HTTP | from the OP can be passed to an RDAP server in an HTTP | |||
| "Authorization" request header [RFC6750] for RDAP queries that | "authorization" request header [RFC6750] for RDAP queries that | |||
| require End-User identification, authentication, and authorization. | require end-user identification, authentication, and authorization. | |||
| 6.2. Client Queries | 6.2. Client Queries | |||
| An RDAP server that receives a bearer token in an HTTP | An RDAP server that receives a bearer token in an HTTP | |||
| "Authorization" request header as part of an RDAP object query MUST | "authorization" request header as part of an RDAP object query MUST | |||
| validate the token in accordance with local policy and confirm that | validate the token in accordance with local policy and confirm that | |||
| the token is a legitimate Access Token. Once validated, the Access | the token is a legitimate access token. Once validated, the access | |||
| Token MAY be used to retrieve the claims associated with the End- | token MAY be used to retrieve the claims associated with the end | |||
| User's identity, including claims associated with the "rdap" scope | user's identity, including claims associated with the "rdap" scope | |||
| that are not already included in the Access Token, as described in | that are not already included in the access token, as described in | |||
| Section 3.1.4.6. The RDAP server can then evaluate the End-User's | Section 3.1.4.6. The RDAP server can then evaluate the end user's | |||
| identity information to determine the End-User's authorization level | identity information to determine the end user's authorization level | |||
| and process the query in accordance with server policies. A client | and process the query in accordance with server policies. A client | |||
| MUST include the "farv1_iss" query parameter and issuer identifier | MUST include the "farv1_iss" query parameter and Issuer Identifier | |||
| value with an RDAP query if the token was issued by a remote OP. | value with an RDAP query if the token was issued by a remote OP. | |||
| 6.3. Access Token Validation | 6.3. Access Token Validation | |||
| An RDAP server MUST validate a received Access Token prior to using | An RDAP server MUST validate a received access token prior to using | |||
| that token for access control purposes. Validation MAY include token | that token for access control purposes. Validation MAY include token | |||
| introspection [RFC7662] using the issuing OP, or analysis of the | introspection [RFC7662] using the issuing OP or analysis of the | |||
| values included in a JWT Access Token. Once an Access Token is | values included in a JWT access token. Once an access token is | |||
| validated, an RDAP server MAY use that token to request user claims | validated, an RDAP server MAY use that token to request user claims | |||
| from the issuing OP. | from the issuing OP. | |||
| There are performance considerations associated with the process of | There are performance considerations associated with the process of | |||
| validating a token and requesting user claims as part of processing | validating a token and requesting user claims as part of processing | |||
| every received RDAP query. An RDAP server MAY cache validated | every received RDAP query. An RDAP server MAY cache validated | |||
| information and use that cached information to reduce the amount of | information and use that cached information to reduce the amount of | |||
| time needed to process subsequent RDAP queries associated with the | time needed to process subsequent RDAP queries associated with the | |||
| same Access Token as long as the token has not expired. The client | same access token as long as the token has not expired. The client | |||
| SHOULD monitor the token expiration time and refresh the token as | SHOULD monitor the token expiration time and refresh the token as | |||
| needed. | needed. | |||
| 6.4. Token Exchange | 6.4. Token Exchange | |||
| Tokens can include an "aud" (audience) claim that contains the OAuth | Tokens can include an "aud" (audience) claim that contains the OAuth | |||
| 2.0 client_id of the RP as an audience value. In some operational | 2.0 client_id of the RP as an audience value. In some operational | |||
| scenarios (such as a client that is providing a proxy service), an RP | scenarios (such as a client that is providing a proxy service), an RP | |||
| can receive tokens with an "aud" claim value that does not include | can receive tokens with an "aud" claim value that does not include | |||
| the RP's client_id. These tokens might not be trusted by the RP, and | the RP's client_id. These tokens might not be trusted by the RP, and | |||
| the RP might refuse to accept the tokens. This situation can be | the RP might refuse to accept the tokens. This situation can be | |||
| remedied by having the RP exchange the Access Token with the OP for a | remedied by having the RP exchange the access token with the OP for a | |||
| set of trusted tokens that reset the "aud" claim. The token exchange | set of trusted tokens that reset the "aud" claim. The token exchange | |||
| protocol is described in RFC 8693 [RFC8693]. | protocol is described in [RFC8693]. | |||
| 7. RDAP Query Processing | 7. RDAP Query Processing | |||
| Once an RDAP session is active, an RDAP server MUST determine if the | Once an RDAP session is active, an RDAP server MUST determine if the | |||
| End-User is authorized to perform any queries that are received | end user is authorized to perform any queries that are received | |||
| during the duration of the session. This MAY include rejecting | during the duration of the session. This MAY include rejecting | |||
| queries outright, and it MAY include omitting or otherwise redacting | queries outright, and it MAY include omitting or otherwise redacting | |||
| information that the End-User is not authorized to receive. Specific | information that the end user is not authorized to receive. Specific | |||
| processing requirements are beyond the scope of this document. | processing requirements are beyond the scope of this document. | |||
| 8. RDAP Conformance | 8. RDAP Conformance | |||
| RDAP responses that contain values described in this document MUST | RDAP responses that contain values described in this document MUST | |||
| indicate conformance with this specification by including an | indicate conformance with this specification by including an | |||
| rdapConformance ([RFC9083]) value of "farv1" (Federated | rdapConformance [RFC9083] value of "farv1" (federated authentication | |||
| Authentication for RDAP version 1). The information needed to | method for RDAP version 1). The information needed to register this | |||
| register this value in the RDAP Extensions Registry is described in | value in the "RDAP Extensions" registry is described in Section 9.1. | |||
| Section 9.1. | ||||
| Example rdapConformance structure with extension specified: | Example rdapConformance structure with extension specified: | |||
| "rdapConformance" : | "rdapConformance" : | |||
| [ | [ | |||
| "rdap_level_0", | "rdap_level_0", | |||
| "farv1" | "farv1" | |||
| ] | ] | |||
| Figure 17 | Figure 26 | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| 9.1. RDAP Extensions Registry | 9.1. RDAP Extensions Registry | |||
| IANA is requested to register the following value in the RDAP | IANA has registered the following value in the "RDAP Extensions" | |||
| Extensions Registry: | registry: | |||
| Extension identifier: farv1 | Extension Identifier: farv1 | |||
| Registry operator: Any | Registry Operator: Any | |||
| Published specification: This document. | Specification: RFC 9560 | |||
| Contact: IETF <iesg@ietf.org> | Contact: IETF <iesg@ietf.org> | |||
| Intended usage: This extension describes version 1 of a federated | Intended Usage: This extension describes federated authentication | |||
| authentication method for RDAP using OAuth 2.0 and OpenID Connect. | method for RDAP version 1 using OAuth 2.0 and OpenID Connect. | |||
| 9.2. JSON Web Token Claims Registry | 9.2. JSON Web Token Claims Registry | |||
| IANA is requested to register the following values in the JSON Web | IANA has registered the following values in the "JSON Web Token | |||
| Token Claims Registry: | Claims" registry: | |||
| Claim Name: "rdap_allowed_purposes" | Claim Name: rdap_allowed_purposes | |||
| Claim Description: This claim describes the set of RDAP query | Claim Description: This claim describes the set of RDAP query | |||
| purposes that are available to an identity that is presented for | purposes that are available to an identity that is presented for | |||
| access to a protected RDAP resource. | access to a protected RDAP resource. | |||
| Change Controller: IETF | Change Controller: IETF | |||
| Specification Document(s): Section 3.1.5.1 of this document. | Reference: Section 3.1.5.1 of RFC 9560. | |||
| Claim Name: "rdap_dnt_allowed" | Claim Name: rdap_dnt_allowed | |||
| Claim Description: This claim contains a JSON boolean literal that | Claim Description: This claim contains a JSON boolean literal that | |||
| describes a "do not track" request for server-side tracking, | describes a "do not track" request for server-side tracking, | |||
| logging, or recording of an identity that is presented for access | logging, or recording of an identity that is presented for access | |||
| to a protected RDAP resource. | to a protected RDAP resource. | |||
| Change Controller: IETF | Change Controller: IETF | |||
| Specification Document(s): Section 3.1.5.2 of this document. | Reference: Section 3.1.5.2 of RFC 9560. | |||
| 9.3. RDAP Query Purpose Registry | 9.3. RDAP Query Purpose Registry | |||
| IANA is requested to create a new protocol registry to manage RDAP | IANA has created a new protocol registry to manage RDAP query purpose | |||
| query purpose values. | values. | |||
| Section at https://www.iana.org/protocols: Registration Data Access | ||||
| Protocol (RDAP) | ||||
| Name of registry: Registration Data Access Protocol (RDAP) Query | ||||
| Purpose Values | ||||
| Registration policy: This registry is operated under the | ||||
| "Specification Required" policy defined in RFC 8126 ([RFC8126]). The | ||||
| Designated Expert must ensure that requests to add values to this | ||||
| registry meet the syntax, value, and description requirements | ||||
| described in this section. | ||||
| Required information: Registration requests are described in a | ||||
| specification that's consistent with the "Specification Required" | ||||
| policy defined in RFC 8126 ([RFC8126]). The specification must | ||||
| include one or more purpose values as described below. | ||||
| Size, format, and syntax of registry entries: | Section at https://www.iana.org/protocols: Registration Data Access | |||
| Protocol (RDAP) | ||||
| Registry Name: Registration Data Access Protocol (RDAP) Query | ||||
| Purpose Values | ||||
| Registration Procedure(s): This registry is operated under the | ||||
| "Specification Required" policy defined in [RFC8126]. The | ||||
| designated expert must ensure that requests to add values to this | ||||
| registry meet the syntax, value, and description requirements | ||||
| described in this section. | ||||
| Required Information: Registration requests are described in a | ||||
| specification that's consistent with the "Specification Required" | ||||
| policy defined in [RFC8126]. The specification must include one | ||||
| or more purpose values as described below. | ||||
| Individual purpose values are registered with IANA. Each entry in | Individual purpose values are registered with IANA. Each entry in | |||
| the registry contains the following fields: | the registry contains the following fields: | |||
| Value: the purpose string value being registered. Value strings can | Value: The purpose string value being registered. Value strings can | |||
| contain upper case ASCII characters from "A" to "Z", lower case ASCII | contain uppercase ASCII characters from "A" to "Z", lowercase | |||
| characters from "a" to "z", and the underscore ("_") character. | ASCII characters from "a" to "z", and the underscore ("_") | |||
| Value strings contain at least one character and no more than 64 | character. Value strings contain at least one character and no | |||
| characters. | more than 64 characters. | |||
| Description: One or two sentences in English describing the meaning | ||||
| Description: a one- or two-sentence, English language description of | of the purpose value, how it might be used, and/or how it should | |||
| the meaning of the purpose value, how it might be used, and/or how it | be interpreted by clients and servers. | |||
| should be interpreted by clients and servers. | Reference: RFC 9560 | |||
| Initial assignments and reservations: | ||||
| The set of initial values used to populate the registry as described | The set of initial values used to populate the registry as described | |||
| here are taken from the final report | below are derived from the final report produced by the Expert | |||
| (https://www.icann.org/en/system/files/files/final-report- | Working Group on gTLD Directory Services chartered by the Internet | |||
| 06jun14-en.pdf) produced by the Expert Working Group on gTLD | Corporation for Assigned Names and Numbers (ICANN) [gTLD]. | |||
| Directory Services chartered by the Internet Corporation for Assigned | ||||
| Names and Numbers (ICANN). | ||||
| -----BEGIN FORM----- | ||||
| Value: domainNameControl | ||||
| Description: Tasks within the scope of this purpose include | ||||
| creating and managing and monitoring a registrant's own domain | ||||
| name, including creating the domain name, updating information | ||||
| about the domain name, transferring the domain name, renewing the | ||||
| domain name, deleting the domain name, maintaining a domain name | ||||
| portfolio, and detecting fraudulent use of the Registrant's own | ||||
| contact information. | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | ||||
| Value: personalDataProtection | ||||
| Description: Tasks within the scope of this purpose include | ||||
| identifying the accredited privacy/proxy provider associated with | ||||
| a domain name and reporting abuse, requesting reveal, or otherwise | ||||
| contacting the provider. | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | Value: domainNameControl | |||
| Description: Tasks within the scope of this purpose include, for a | ||||
| registrant's own domain name, creating the domain name, updating | ||||
| information about the domain name, transferring the domain name, | ||||
| renewing the domain name, deleting the domain name, maintaining a | ||||
| domain name portfolio, and detecting fraudulent use of the | ||||
| registrant's own contact information. | ||||
| Reference: RFC 9560 | ||||
| Value: technicalIssueResolution | Value: personalDataProtection | |||
| Description: Tasks within the scope of this purpose include | ||||
| identifying the accredited privacy or proxy provider associated | ||||
| with a domain name, reporting abuse, requesting reveal, or | ||||
| otherwise contacting the provider. | ||||
| Reference: RFC 9560 | ||||
| Description: Tasks within the scope of this purpose include (but | Value: technicalIssueResolution | |||
| are not limited to) working to resolve technical issues, including | Description: Tasks within the scope of this purpose include (but are | |||
| not limited to) working to resolve technical issues, including | ||||
| email delivery issues, DNS resolution failures, and website | email delivery issues, DNS resolution failures, and website | |||
| functional issues. | functionality issues. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | ||||
| Value: domainNameCertification | ||||
| Description: Tasks within the scope of this purpose include a | Value: domainNameCertification | |||
| Description: Tasks within the scope of this purpose include a | ||||
| Certification Authority (CA) issuing an X.509 certificate to a | Certification Authority (CA) issuing an X.509 certificate to a | |||
| subject identified by a domain name. | subject identified by a domain name. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | Value: individualInternetUse | |||
| Description: Tasks within the scope of this purpose include | ||||
| -----BEGIN FORM----- | ||||
| Value: individualInternetUse | ||||
| Description: Tasks within the scope of this purpose include | ||||
| identifying the organization using a domain name to instill | identifying the organization using a domain name to instill | |||
| consumer trust, or contacting that organization to raise a | consumer trust or contacting that organization to raise a customer | |||
| customer complaint to them or file a complaint about them. | complaint to them or file a complaint about them. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | ||||
| Value: businessDomainNamePurchaseOrSale | ||||
| Description: Tasks within the scope of this purpose include making | Value: businessDomainNamePurchaseOrSale | |||
| Description: Tasks within the scope of this purpose include making | ||||
| purchase queries about a domain name, acquiring a domain name from | purchase queries about a domain name, acquiring a domain name from | |||
| a registrant, and enabling due diligence research. | a registrant, and enabling due diligence research. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | Value: academicPublicInterestDNSResearch | |||
| Description: Tasks within the scope of this purpose include academic | ||||
| -----BEGIN FORM----- | public interest research studies about domain names published in | |||
| the registration data service, including public information about | ||||
| Value: academicPublicInterestDNSResearch | the registrant and designated contacts, the domain name's history | |||
| and status, and domain names registered by a given registrant | ||||
| Description: Tasks within the scope of this purpose include | (reverse query). | |||
| academic public interest research studies about domain names | Reference: RFC 9560 | |||
| published in the registration data service, including public | ||||
| information about the registrant and designated contacts, the | ||||
| domain name's history and status, and domain names registered by a | ||||
| given registrant (reverse query). | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | ||||
| Value: legalActions | Value: legalActions | |||
| Description: Tasks within the scope of this purpose include | Description: Tasks within the scope of this purpose include | |||
| investigating possible fraudulent use of a registrant's name or | investigating possible fraudulent use of a registrant's name or | |||
| address by other domain names, investigating possible trademark | address by other domain names, investigating possible trademark | |||
| infringement, contacting a registrant/licensee's legal | infringement, contacting a registrant's or licensee's legal | |||
| representative prior to taking legal action and then taking a | representative prior to taking legal action, and then taking a | |||
| legal action if the concern is not satisfactorily addressed. | legal action if the concern is not satisfactorily addressed. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | Value: regulatoryAndContractEnforcement | |||
| Description: Tasks within the scope of this purpose include | ||||
| -----BEGIN FORM----- | investigating the tax authority of businesses with online | |||
| presences, investigating Uniform Domain-Name Dispute-Resolution | ||||
| Value: regulatoryAndContractEnforcement | Policy (UDRP), investigating contractual compliance, and | |||
| registering data escrow audits. | ||||
| Description: Tasks within the scope of this purpose include tax | Reference: RFC 9560 | |||
| authority investigation of businesses with online presence, | ||||
| Uniform Dispute Resolution Policy (UDRP) investigation, | ||||
| contractual compliance investigation, and registration data escrow | ||||
| audits. | ||||
| -----END FORM----- | ||||
| -----BEGIN FORM----- | ||||
| Value: criminalInvestigationAndDNSAbuseMitigation | ||||
| Description: Tasks within the scope of this purpose include | Value: criminalInvestigationAndDNSAbuseMitigation | |||
| Description: Tasks within the scope of this purpose include | ||||
| reporting abuse to someone who can investigate and address that | reporting abuse to someone who can investigate and address that | |||
| abuse, or contacting entities associated with a domain name during | abuse or contacting entities associated with a domain name during | |||
| an offline criminal investigation. | an offline criminal investigation. | |||
| Reference: RFC 9560 | ||||
| -----END FORM----- | Value: dnsTransparency | |||
| Description: Tasks within the scope of this purpose involve querying | ||||
| -----BEGIN FORM----- | the registration data made public by registrants to satisfy a wide | |||
| variety of use cases around informing the public. | ||||
| Value: dnsTransparency | Reference: RFC 9560 | |||
| Description: Tasks within the scope of this purpose involve | ||||
| querying the registration data made public by registrants to | ||||
| satisfy a wide variety of use cases around informing the public. | ||||
| -----END FORM----- | ||||
| 10. Implementation Status | ||||
| NOTE: Please remove this section and the reference to RFC 7942 prior | ||||
| to publication as an RFC. | ||||
| This section records the status of known implementations of the | ||||
| protocol defined by this specification at the time of posting of this | ||||
| Internet-Draft, and is based on a proposal described in RFC 7942 | ||||
| [RFC7942]. The description of implementations in this section is | ||||
| intended to assist the IETF in its decision processes in progressing | ||||
| drafts to RFCs. Please note that the listing of any individual | ||||
| implementation here does not imply endorsement by the IETF. | ||||
| Furthermore, no effort has been spent to verify the information | ||||
| presented here that was supplied by IETF contributors. This is not | ||||
| intended as, and must not be construed to be, a catalog of available | ||||
| implementations or their features. Readers are advised to note that | ||||
| other implementations may exist. | ||||
| According to RFC 7942, "this will allow reviewers and working groups | ||||
| to assign due consideration to documents that have the benefit of | ||||
| running code, which may serve as evidence of valuable experimentation | ||||
| and feedback that have made the implemented protocols more mature. | ||||
| It is up to the individual working groups to use this information as | ||||
| they see fit". | ||||
| Version -09 of this specification introduced changes that are | ||||
| incompatible with earlier implementations. Implementations that are | ||||
| consistent with this specification will be added as they are | ||||
| identified. | ||||
| 10.1. Editor Implementation | ||||
| Location: https://procuratus.net/rdap/ | ||||
| Description: This implementation is a functionally limited RDAP | ||||
| server that supports only the path segments described in this | ||||
| specification. It uses the "jumbojett/OpenID-Connect-PHP" library | ||||
| found on GitHub, which appears to be minimally maintained. The | ||||
| library was modified to add support for the device authorization | ||||
| grant. Session variable management is still a little buggy. | ||||
| Supported OPs include Google (Gmail) and Yahoo. | ||||
| Level of Maturity: This is a "proof of concept" research | ||||
| implementation. | ||||
| Coverage: This implementation includes all the features described | ||||
| in this specification. | ||||
| Version compatibility: Version -11+ of this specification. | ||||
| Contact Information: Scott Hollenbeck, shollenbeck@verisign.com | ||||
| 10.2. Verisign Labs | ||||
| Responsible Organization: Verisign Labs | ||||
| Location: https://rdap.verisignlabs.com/ | ||||
| Description: This implementation includes support for domain | ||||
| registry RDAP queries using live data from the .cc and .tv country | ||||
| code top-level domains and the .career generic top-level domain. | ||||
| Three access levels are provided based on the authenticated | ||||
| identity of the client: | ||||
| 1. Unauthenticated: Limited information is returned in response | ||||
| to queries from unauthenticated clients. | ||||
| 2. Basic: Clients who authenticate using a publicly available | ||||
| identity provider like Google Gmail or Microsoft Hotmail will | ||||
| receive all the information available to an unauthenticated | ||||
| client plus additional registration metadata, but no | ||||
| personally identifiable information associated with entities. | ||||
| 3. Advanced: Clients who authenticate using a more restrictive | ||||
| identity provider will receive all the information available | ||||
| to a Basic client plus whatever information the server | ||||
| operator deems appropriate for a fully authorized client. | ||||
| Supported identity providers include those developed by | ||||
| Verisign Labs (https://testprovider.rdap.verisignlabs.com/) | ||||
| and CZ.NIC (https://www.mojeid.cz/). | ||||
| Level of Maturity: This is a "proof of concept" research | ||||
| implementation. | ||||
| Coverage: This implementation includes all the features described | ||||
| in this specification. | ||||
| Version compatibility: Version -07 of this specification. | ||||
| Contact Information: Scott Hollenbeck, shollenbeck@verisign.com | ||||
| 10.3. Viagenie | ||||
| Responsible Organization: Viagenie | ||||
| Location: https://auth.viagenie.ca | ||||
| Description: This implementation is an OpenID identity provider | ||||
| enabling users and registries to connect to the federation. It | ||||
| also includes a barebone RDAP client and RDAP server in order to | ||||
| test the authentication framework. Various levels of purpose are | ||||
| available for testing. | ||||
| Level of Maturity: This is a "proof of concept" research | ||||
| implementation. | ||||
| Coverage: This implementation includes most features described in | ||||
| this specification as an identity provider. | ||||
| Version compatibility: Version -07 of this specification. | ||||
| Contact Information: Marc Blanchet, marc.blanchet@viagenie.ca | ||||
| 11. Security Considerations | 10. Security Considerations | |||
| Security considerations for RDAP can be found in RFC 7481 [RFC7481]. | Security considerations for RDAP can be found in [RFC7481]. Security | |||
| Security considerations for OpenID Connect Core [OIDCC] and OAuth 2.0 | considerations for OpenID Connect Core [OIDCC] and OAuth 2.0 | |||
| [RFC6749] can be found in their reference specifications; best | [RFC6749] can be found in their reference specifications; best | |||
| current security practice for OAuth 2.0 can be found in RFC TBD | current security practice for OAuth 2.0 can be found in | |||
| [I-D.ietf-oauth-security-topics]. Additionally, the practices | [OAUTH-SECURITY]. Additionally, the practices described in [RFC9325] | |||
| described in RFC 9325 [RFC9325] MUST be followed when the Transport | MUST be followed when the Transport Layer Security (TLS) protocol is | |||
| Layer Security (TLS) protocol is used. | used. | |||
| As described in Section 3.1.4.2, the OAuth 2.0 Implicit Flow | As described in Section 3.1.4.2, the OAuth 2.0 Implicit Flow | |||
| [RFC6749] is considered insecure and efforts are being made to | [RFC6749] is considered insecure, and efforts are being made to | |||
| deprecate the flow. It MUST NOT be used. | deprecate the flow. It MUST NOT be used. | |||
| Some of the responses described in this specification return | Some of the responses described in this specification return | |||
| information to a client from an RDAP server that is intended to help | information to a client from an RDAP server that is intended to help | |||
| the client match responses to queries and manage sessions. Some of | the client match responses to queries and manage sessions. Some of | |||
| that information, such as the "userClaims" described in | that information, such as the "userClaims" described in | |||
| Section 5.1.1, can be personally identifiable and considered | Section 5.1.1, can be personally identifiable and considered | |||
| sensitive if disclosed to unauthorized parties. An RDAP server | sensitive if disclosed to unauthorized parties. An RDAP server | |||
| operator must develop policies for information disclosure to ensure | operator must develop policies for information disclosure to ensure | |||
| that personally identifiable information is disclosed only to clients | that personally identifiable information is disclosed only to clients | |||
| that are authorized to process that information. | that are authorized to process that information. | |||
| The "do not track" claim relies on the good will of the RDAP server | The "do not track" claim relies on the good will of the RDAP server | |||
| and associated proxies. As such, use and processing of this claim | and associated proxies. As such, using and processing this claim | |||
| depends on out-of-band trust relationships that need to be | depends on out-of-band trust relationships that need to be | |||
| established before the claim is used in practice. If used and | established before the claim is used in practice. If used and | |||
| accepted by the RDAP server, there is a risk of information loss that | accepted by the RDAP server, there is a risk of information loss that | |||
| could seriously impair audit capabilities. | could seriously impair audit capabilities. | |||
| 11.1. Authentication and Access Control | 10.1. Authentication and Access Control | |||
| Having completed the client identification, authorization, and | Having completed the client identification, authorization, and | |||
| validation process, an RDAP server can make access control decisions | validation process, an RDAP server can make access control decisions | |||
| based on a comparison of client-provided information (such as the set | based on a comparison of client-provided information (such as the set | |||
| of "userClaims" described in Section 5.1.1) and local policy. For | of "userClaims" described in Section 5.1.1) and local policy. For | |||
| example, a client who provides an email address (and nothing more) | example, a client who provides an email address (and nothing more) | |||
| might be entitled to receive a subset of the information that would | might be entitled to receive a subset of the information that would | |||
| be available to a client who provides an email address, a full name, | be available to a client who provides an email address, a full name, | |||
| and a stated purpose. Development of these access control policies | and a stated purpose. Development of these access control policies | |||
| is beyond the scope of this document. | is beyond the scope of this document. | |||
| 12. Acknowledgments | 11. References | |||
| The author would like to acknowledge the following individuals for | ||||
| their contributions to the development of this document: Julien | ||||
| Bernard, Marc Blanchet, Tom Harrison, Russ Housley, Jasdip Singh, | ||||
| Rhys Smith, Jaromir Talir, Rick Wilhelm, and Alessandro Vesely. In | ||||
| addition, the Verisign Registry Services Lab development team of | ||||
| Joseph Harvey, Andrew Kaizer, Sai Mogali, Anurag Saxena, Swapneel | ||||
| Sheth, Nitin Singh, and Zhao Zhao provided critical "proof of | ||||
| concept" implementation experience that helped demonstrate the | ||||
| validity of the concepts described in this document. | ||||
| Pawel Kowalik and Mario Loffredo provided significant text | ||||
| contributions that led to welcome improvements in several sections of | ||||
| this document. Their contributions are greatly appreciated. | ||||
| 13. References | ||||
| 13.1. Normative References | 11.1. Normative References | |||
| [HTMLURL] Web Hypertext Application Technology Working Group | [HTMLURL] WHATWG, "URL (Living Standard)", March 2024, | |||
| (WHATWG), "URL (Living Standard)", September 2023, | <https://url.spec.whatwg.org/>. | |||
| <https://url.spec.whatwg.org/#application/x-www-form- | ||||
| urlencoded>. | ||||
| [OIDCC] OpenID Foundation, "OpenID Connect Core incorporating | [OIDCC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
| errata set 1", November 2014, | C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
| errata set 2", December 2023, | ||||
| <https://openid.net/specs/openid-connect-core-1_0.html>. | <https://openid.net/specs/openid-connect-core-1_0.html>. | |||
| [OIDCD] OpenID Foundation, "OpenID Connect Discovery 1.0 | [OIDCD] Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | |||
| incorporating errata set 1", November 2014, | Connect Discovery 1.0 incorporating errata set 2", | |||
| <https://openid.net/specs/openid-connect-discovery- | December 2023, <https://openid.net/specs/openid-connect- | |||
| 1_0.html>. | discovery-1_0.html>. | |||
| [OIDCL] OpenID Foundation, "OpenID Connect RP-Initiated Logout | [OIDCL] Jones, M., de Medeiros, B., Agarwal, N., Sakimura, N., and | |||
| 1.0", September 2022, <https://openid.net/specs/openid- | J. Bradley, "OpenID Connect RP-Initiated Logout 1.0", | |||
| connect-rpinitiated-1_0.html>. | September 2022, <https://openid.net/specs/openid-connect- | |||
| rpinitiated-1_0.html>. | ||||
| [OIDCR] OpenID Foundation, "OpenID Connect Dynamic Client | [OIDCR] Sakimura, N., Bradley, J., and M. Jones, "OpenID Connect | |||
| Registration 1.0 incorporating errata set 1", November | Dynamic Client Registration 1.0 incorporating errata set | |||
| 2014, <https://openid.net/specs/openid-connect- | 2", December 2023, <https://openid.net/specs/openid- | |||
| registration-1_0.html>. | connect-registration-1_0.html>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | |||
| DOI 10.17487/RFC6265, April 2011, | DOI 10.17487/RFC6265, April 2011, | |||
| <https://www.rfc-editor.org/info/rfc6265>. | <https://www.rfc-editor.org/info/rfc6265>. | |||
| skipping to change at page 47, line 40 ¶ | skipping to change at line 2003 ¶ | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/info/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [RFC9325] Sheffer, Y., Saint-Andre, P., and T. Fossati, | [RFC9325] Sheffer, Y., Saint-Andre, P., and T. Fossati, | |||
| "Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
| Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
| (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November | (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November | |||
| 2022, <https://www.rfc-editor.org/info/rfc9325>. | 2022, <https://www.rfc-editor.org/info/rfc9325>. | |||
| 13.2. Informative References | 11.2. Informative References | |||
| [I-D.ietf-oauth-security-topics] | [gTLD] Expert Working Group on gTLD Directory Services (EWG), | |||
| "Final Report from the Expert Working Group on gTLD | ||||
| Directory Services: A Next-Generation Registration | ||||
| Directory Service (RDS)", June 2014, | ||||
| <https://www.icann.org/en/system/files/files/final-report- | ||||
| 06jun14-en.pdf>. | ||||
| [OAUTH-SECURITY] | ||||
| Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | |||
| "OAuth 2.0 Security Best Current Practice", Work in | "OAuth 2.0 Security Best Current Practice", Work in | |||
| Progress, Internet-Draft, draft-ietf-oauth-security- | Progress, Internet-Draft, draft-ietf-oauth-security- | |||
| topics-24, 23 October 2023, | topics-25, 8 February 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-oauth- | <https://datatracker.ietf.org/doc/html/draft-ietf-oauth- | |||
| security-topics-24>. | security-topics-25>. | |||
| [OIDC] OpenID Foundation, "What is OpenID Connect", | [OIDC] OpenID, "What is OpenID Connect", | |||
| <https://openid.net/developers/how-connect-works/>. | <https://openid.net/developers/how-connect-works/>. | |||
| [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | |||
| FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | |||
| <https://www.rfc-editor.org/info/rfc4949>. | <https://www.rfc-editor.org/info/rfc4949>. | |||
| [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
| Code: The Implementation Status Section", BCP 205, | ||||
| RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7942>. | ||||
| [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | |||
| Authorization Server Metadata", RFC 8414, | Authorization Server Metadata", RFC 8414, | |||
| DOI 10.17487/RFC8414, June 2018, | DOI 10.17487/RFC8414, June 2018, | |||
| <https://www.rfc-editor.org/info/rfc8414>. | <https://www.rfc-editor.org/info/rfc8414>. | |||
| [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
| "Handling Long Lines in Content of Internet-Drafts and | "Handling Long Lines in Content of Internet-Drafts and | |||
| RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
| <https://www.rfc-editor.org/info/rfc8792>. | <https://www.rfc-editor.org/info/rfc8792>. | |||
| Appendix A. Change Log | Acknowledgments | |||
| 00: Initial working group version ported from draft-hollenbeck- | ||||
| regext-rdap-openid-10. | ||||
| 01: Modified ID Token delivery approach to note proper use of an | ||||
| HTTP bearer authorization header. | ||||
| 02: Modified token delivery approach (Access Token is the bearer | ||||
| token) to note proper use of an HTTP bearer authorization header, | ||||
| fixing the change made in -01. | ||||
| 03: Updated OAuth 2.0 Device Authorization Grant description and | ||||
| reference due to publication of RFC 8628. | ||||
| 04: Updated OAuth 2.0 token exchange description and reference due | ||||
| to publication of RFC 8693. Corrected the RDAP conformance | ||||
| identifier to be registered with IANA. | ||||
| 05: Keepalive refresh. | ||||
| 06: Keepalive refresh. | ||||
| 07: Added "login_hint" description to Section 3.1.4.2. Added some | ||||
| text to Section 3.1.5.2 to note that "do not track" requires | ||||
| compliance with local regulations. | ||||
| 08: Rework of token management processing in Sections 4 and 5. | ||||
| 09: Updated RDAP specification references. Added text to describe | ||||
| both default and remote OpenID Provider processing. Removed text | ||||
| that described passing of ID Tokens as query parameters. | ||||
| 10: Updated Section 3.1.4.1. Replaced token processing queries with | ||||
| "login", "session", and "logout" queries. | ||||
| 11: Replaced queries with "session/*" queries. Added description of | ||||
| "rdap" OAuth scope. Added implementation status information. | ||||
| 12: Updated data structure descriptions. Updated Section 9. Minor | ||||
| formatting changes due to a move to xml2rfc-v3 markup. | ||||
| 13: Added support for OP discovery via OP's Issuer Identifier. | The author would like to acknowledge the following individuals for | |||
| Modified the RDAP conformance text to use "roidc1", and added that | their contributions to the development of this document: Julien | |||
| value to extension path segments, data structures, and query | Bernard, Marc Blanchet, Tom Harrison, Russ Housley, Jasdip Singh, | |||
| parameters. Changed the "purpose" and "dnt" claims to | Rhys Smith, Jaromir Talir, Rick Wilhelm, and Alessandro Vesely. In | |||
| "rdap_allowed_purposes" (making it an array) and | addition, the Verisign Registry Services Lab development team of | |||
| "rdap_dnt_allowed". Added the "roidc1_qp" and "roidc1_dnt" query | Joseph Harvey, Andrew Kaizer, Sai Mogali, Anurag Saxena, Swapneel | |||
| parameters. Changed the descriptions of "local" OPs to "default" | Sheth, Nitin Singh, and Zhao Zhao provided critical "proof of | |||
| OPs. | concept" implementation experience that helped demonstrate the | |||
| 14: Fixed a few instances of "id" that were changed to "roidc1_id" | validity of the concepts described in this document. | |||
| and "session" that were changed to "roidc1_session". Added | ||||
| "implicitTokenRefreshSupported". | ||||
| 15: Fixed an instance of openidcConfiguration that was missing the | ||||
| "roidc1" prefix. Changed SHOULD to MUST to describe the need to | ||||
| return the roidc1_openidcConfiguration data structure in a "help" | ||||
| response. | ||||
| 16: Changed the "roidc1" prefix to "farv1". Added additional | ||||
| terminology text. Added RFC 8996 as a normative reference. | ||||
| Multiple clarifications in Sections 3, 4, and 5. Added | ||||
| login/refresh/logout sequence and conflict response text. Added | ||||
| "clientID" and "iss" to the "farv1_session" data structure. Made | ||||
| the "userClaims" and "sessionInfo" objects OPTIONAL in the | ||||
| "farv1_session" data structure. Fixed the curl example in | ||||
| Section 5.2.4.1. Modified the "/device" and "/devicepoll" | ||||
| requests to include query parameters. Added "device_code" to the | ||||
| "farv1_deviceInfo" data structure. Added the "farv1_dc" query | ||||
| parameter. | ||||
| 17: Changed string "true" to boolean true in Figure 3. Fixed the | ||||
| reference to RFC 8996. Updated references for RFCs 5226 (to 8126) | ||||
| and 7230 (to 9110). | ||||
| 18 Addressed WG last call feedback for which we had agreed-upon | ||||
| updates. | ||||
| 19 Updated Security Considerations. Updated response processing | ||||
| text. Added and changed text to describe support for session- | ||||
| oriented and token-oriented clients. Added reference to RFC 9068. | ||||
| 20 Updated text to describe support for session-oriented and token- | ||||
| oriented clients. | ||||
| 21 Changed "Servers MUST support both types of client" to "SHOULD". | ||||
| Added "sessionClientSupported" and "tokenClientSupported" as a | ||||
| consequence. Noted that the OIDCC Implicit Flow is being | ||||
| deprecated due to security concerns. Added additional text to | ||||
| describe the relationship between "providerDiscoverySupported" and | ||||
| "farv1_id", and "issuerIdentifierSupported" and "farv1_iss". | ||||
| Restructured Section 5.6 and Section 7. Replaced the reference to | ||||
| RFC 2616 (obsolete) with RFC 9110. Replaced the reference to RFC | ||||
| 7231 (obsolete) with RFC 9110. | ||||
| 22 Changed MANDATORY to REQUIRED for BCP 14 alignment. Updated | ||||
| Section 3.1.2, Section 11, and Section 12. | ||||
| 23 Changed "IESG" to "IETF" in Section 9 at IANA's request. | ||||
| 24 AD evaluation edits. | Pawel Kowalik and Mario Loffredo provided significant text | |||
| 25 IETF last call edits. | contributions that led to welcome improvements in several sections of | |||
| 26 IESG evaluation edits. | this document. Their contributions are greatly appreciated. | |||
| 27 IESG evaluation edit. Changed "An RDAP server operator SHOULD | ||||
| develop policies" to "An RDAP server operator must develop | ||||
| policies" in Section 11. | ||||
| Author's Address | Author's Address | |||
| Scott Hollenbeck | Scott Hollenbeck | |||
| Verisign Labs | Verisign Labs | |||
| 12061 Bluemont Way | 12061 Bluemont Way | |||
| Reston, VA 20190 | Reston, VA 20190 | |||
| United States of America | United States of America | |||
| Email: shollenbeck@verisign.com | Email: shollenbeck@verisign.com | |||
| URI: https://www.verisignlabs.com/ | URI: https://www.verisignlabs.com/ | |||
| End of changes. 219 change blocks. | ||||
| 979 lines changed or deleted | 828 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||