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. |