Hi Scott,

> [PK] sure, not insisting on dynamic registration. How do you want to
> proceed
> > with drafting the text update?
> > Do you maintain the test somewhere on github or alike where I could chip
> in
> > a proposal?
>
> [SAH] Please send proposed text to the list. I'm still doing this draft
> the old school way. 😉
>
>
[PK] Attached the patch file with a proposal (I hope it goes through the
mailing list).

In short, it adds an openidcRemoteConfiguration object to the /help
resource,
which indicates support for Issuer Identifier of an OP and the list of OPs.

/session/login end point now accepts either "id" or "remote_iss" query
parameters.
One can also specify both, but at least one must be present.

Kind regards
Pawel
:100644 100644 c79dceb 0000000 M        draft-ietf-regext-rdap-openid-12.xml

diff --git a/draft-ietf-regext-rdap-openid-12.xml 
b/draft-ietf-regext-rdap-openid-12.xml
index c79dceb..6918f52 100644
--- a/draft-ietf-regext-rdap-openid-12.xml
+++ b/draft-ietf-regext-rdap-openid-12.xml
@@ -121,7 +121,7 @@
           <t>At a high level, RDAP authentication of a browser-like client 
using OpenID Connect requires completion of the following steps:</t>
           
           <t><list style="numbers">
-            <t>An RDAP client sends an RDAP "help" query to an RDAP server to 
determine the type of OpenID Authorization Server that's used by the RDAP 
server. This information is returned in the rdapConformance section of the 
response. A value of "rdap_openidc_local_level_0" indicates that the server 
uses a local Authorization Server. A value of "rdap_openidc_remote_level_0" 
indicates that the server uses a remote Authorization Server.</t>
+            <t>An RDAP client sends an RDAP "help" query to an RDAP server to 
determine the type of OpenID Authorization Server that's used by the RDAP 
server and its capabilities. This information is returned in the 
rdapConformance section of the response. A value of 
"rdap_openidc_local_level_0" indicates that the server uses a local 
Authorization Server. A value of "rdap_openidc_remote_level_0" indicates that 
the server uses a remote Authorization Server. In case of remote Authorization 
Server is supported the RDAP client SHOULD evaluate an additional information 
provided in <xref target="openidcRemoteConfiguration" /> in order to discover 
the capabilties of the RDAP server and optionally obtain a list of supported 
OPs.</t>
             <t>An RDAP client (acting as an OpenID End-User) sends an RDAP 
"login" request to an RDAP server as described in <xref 
target="client-login"/>.</t>
             <t>The RDAP server (acting as an OpenID Relying Party (RP)) 
prepares an Authentication Request containing the desired request 
parameters.</t>
             <t>The RDAP server sends the RDAP client and Authentication 
Request to an Authorization Server operated by an OpenID Provider (OP) using an 
HTTP redirect.</t>
@@ -141,7 +141,10 @@
           <t>End-Users MUST possess an identifier (an OpenID) issued by an OP 
to use OpenID Connect with RDAP. An OP SHOULD include support for the claims 
described in <xref target="rdap-claims"/> to provide additional information 
needed for RDAP End-User authorization. OpenID Connect requires RPs to register 
with OPs to use OpenID Connect services for an End-User. The registration 
process is often completed using out-of-band methods, but it is also possible 
to use the automated method described by the "OpenID Connect Dynamic Client 
Registration" protocol <xref target="OIDCR"/>. The parties involved can use any 
method that is mutually acceptable.</t>
       
           <section anchor="discovery" title="Provider Discovery">
-            <t>An RDAP server/RP needs to be able to map an End-User's 
identifier to an OP. This can be accomplished using the OPTIONAL "OpenID 
Connect Discovery" protocol <xref target="OIDCD"/>, but that protocol is not 
widely implemented. Out-of-band methods are also possible and can be more 
dependable. For example, an RP can support a limited number of OPs and maintain 
internal associations of those identifiers with the OPs that issued them. An RP 
can also ask an End-User to identify the OP that issued their identifier as 
part of an RDAP query workflow. In this case, the RP will need to maintain 
state for the association between the user's identifier and the OP in order to 
process later queries that rely on passing the access token and user identifier 
as authorization parameters. An RP MAY use any provider discovery approach that 
is suitable for its operating environment.</t>
+            <t>An RDAP server/RP needs to be able to map an End-User's 
identifier to an OP. This can be accomplished using the OPTIONAL "OpenID 
Connect Discovery" protocol <xref target="OIDCD"/>, but that protocol is not 
widely implemented. Out-of-band methods are also possible and can be more 
dependable. For example, an RP can support a limited number of OPs and maintain 
internal associations of those identifiers with the OPs that issued them.</t>
+            <t>Alternatively, if mapping of End-User's identifier is not 
possible, or not supported by the RDAP server, the RDAP server SHOULD support 
an explicit specification of a remote OP by the RDAP client. An RDAP server 
SHOULD provide information about its capabilities and the supported OPs in the 
/help response in the <xref target="openidcRemoteConfiguration"/> data 
structure.</t>
+            <t>An RP can also ask an End-User to identify the OP that issued 
their identifier as part of an RDAP query workflow. In this case, the RP will 
need to maintain state for the association between the user's identifier and 
the OP in order to process later queries that rely on passing the access token 
and user identifier as authorization parameters. An RP MAY use any provider 
discovery approach that is suitable for its operating environment.</t>
+            <t>An RDAP server MUST support at least one of the methods of OP 
discovery.</t>
           </section>
       
           <section anchor="auth-request" title="Authentication Request">
@@ -149,7 +152,7 @@
             
             <t>The benefits of using the Authorization Code Flow for 
authenticating a human user are described in Section 3.1 of the OpenID Connect 
Core protocol. The Implicit Flow is more commonly used by clients implemented 
in a web browser using a scripting language; it is described in Section 3.2 of 
the OpenID Connect Core protocol. The Hybrid Flow (described in Section 3.3 of 
the OpenID Connect Core protocol) combines elements of the Authorization and 
Implicit Flows by returning some tokens from the Authorization Endpoint and 
others from the Token Endpoint.</t>
             
-            <t>An Authentication Request can contain several parameters. 
REQUIRED parameters are specified in Section 3.1.2.1 of the OpenID Connect Core 
protocol <xref target="OIDCC"/>. Apart from these parameters, it is RECOMMENDED 
that the RP include the optional "login_hint" parameter in the request, with 
the value being that of the "id" query parameter of the End-User's RDAP "login" 
request. Passing the "login_hint" parameter allows a client to pre-fill login 
form information, so logging in can be more convenient for users. Other 
parameters MAY be included.</t>
+            <t>An Authentication Request can contain several parameters. 
REQUIRED parameters are specified in Section 3.1.2.1 of the OpenID Connect Core 
protocol <xref target="OIDCC"/>. Apart from these parameters, it is RECOMMENDED 
that the RP include the optional "login_hint" parameter in the request, with 
the value being that of the "id" query parameter of the End-User's RDAP "login" 
request, if provided. Passing the "login_hint" parameter allows a client to 
pre-fill login form information, so logging in can be more convenient for 
users. Other parameters MAY be included.</t>
             
             <t>The OP receives the Authentication Request and attempts to 
validate it as described in Section 3.1.2.2 of the OpenID Connect Core protocol 
<xref target="OIDCC"/>. If the request is valid, the OP attempts to 
authenticate the End-User as described in Section 3.1.2.3 of the OpenID Connect 
Core protocol <xref target="OIDCC"/>. The OP returns an error response if the 
request is not valid or if any error is encountered.</t>
           </section>
@@ -220,7 +223,7 @@
       </t>
          
          <section anchor="data-structures" title="Data Structures">
-           <t>This specification describes two new data structures that are 
used to return information to a client: a "session" data structure that 
contains information that describes an established session, and a "deviceInfo" 
data structure that contains information that describes an active attempt to 
establish a session on a UI-constrained device.</t>
+           <t>This specification describes three new data structures that are 
used to return information to a client: a "session" data structure that 
contains information that describes an established session, a "deviceInfo" data 
structure that contains information that describes an active attempt to 
establish a session on a UI-constrained device and a 
"openidcRemoteConfiguration" data structure which provides a list of OPs 
supported by the RDAP server.</t>
                
            <section anchor="session" title="Session">
              <t>The "session" data structure is an object that contains two 
sub-objects:</t>
@@ -279,84 +282,131 @@
     "expires_in": "1800"
   }
             </artwork>
+          </figure>
+           </section>
+           <section anchor="openidcRemoteConfiguration" title="OpenID Connect 
Remote Configuration">
+        <t>The "openidcRemoteConfiguration" data structure is an object with 
the following members:</t>
+        <t><list style="numbers">
+          <t>"endUserIdentifierDiscoverySupported": (OPTIONAL) a boolean value 
indicating RDAP server support for discovery of End-User identifier. Default: 
true.</t>
+          <t>"issuerIdentifierSupported": (OPTIONAL) a boolean value 
indicating RDAP server supports explicit specification of Issuer Identifier. 
Default: false.</t>
+             <t>"openidcRemoteProviders": (OPTIONAL) a list of objects with 
the following members. This data is RECOMMENDED if issuerIdentifierSupported 
equals true:</t>
+                 
+          <t><list style="letters">
+            <t>"iss": (MANDATORY) an string value equal to Issuer Identifier 
of the OP as per OpenID Connect Core specification <xref target="OIDCC"/></t>
+            <t>"name": (MANDATORY) A human-friendly name of the OP.</t>
+          </list></t>
+        </list></t>
+                 
+          <figure anchor="example_openidcRemoteConfiguration_structure">
+            <preamble>An example of a "openidcRemoteConfiguration" data 
structure:</preamble>
+            <artwork xml:space="preserve">
+"openidcRemoteConfiguration": {
+  "endUserIdentifierDiscoverySupported": true,
+  "issuerIdentifierSupported": true,
+  "openidcRemoteProviders":
+    [
+      {
+        "iss": "https://idp.example.com";,
+        "name": "Example IDP" 
+      },
+      {
+        "iss": "https://accounts.acme.com";,
+        "name": "Login with ACME"
+      }
+    ]
+}               
+            </artwork>
           </figure>
            </section>
          </section>
       
       <section anchor="client-login" title="Client Login">
-        <t>Client authentication is requested by sending a "session/login" 
request to an RDAP server. If the RDAP server supports only remote 
Authorization Servers, the "session/login" request MUST include an End-User 
identifier that's delivered using one of two methods: by adding a query 
component to an RDAP request URI using the syntax described in Section 3.4 of 
RFC 3986 <xref target="RFC3986"/>, or by including an HTTP authorization header 
for the Basic authentication scheme as described in RFC 7617 <xref 
target="RFC7617"/>. Clients can use either of these methods to deliver the 
End-User identifier to a server that supports remote Authorization Servers. 
Servers that support remote Authorization Servers MUST accept both methods. If 
the RDAP server supports a local Authorization Server, the End-User identifier 
MAY be omitted.</t>
+        <t>Client authentication is requested by sending a "session/login" 
request to an RDAP server. If the RDAP server supports only remote 
Authorization Servers, the "session/login" request MUST include at least one 
of: an End-User identifier or the Issuer Identifier of the OP.
+        </t>
+        <section anchor="end-user-identifier" title="End-User identifier">
+          <t>The End-User identifier is delivered using one of two methods: by 
adding a query component to an RDAP request URI using the syntax described in 
Section 3.4 of RFC 3986 <xref target="RFC3986"/>, or by including an HTTP 
authorization header for the Basic authentication scheme as described in RFC 
7617 <xref target="RFC7617"/>. Clients can use either of these methods to 
deliver the End-User identifier to a server that supports remote Authorization 
Servers and End-User identifier discovery. Servers that support remote 
Authorization Servers and End-User identifier discovery MUST accept both 
methods. If the RDAP server supports a local Authorization Server or End-User 
identifier discovery is not supported, the End-User identifier MAY be 
omitted.</t>
 
-        <t>The query used to request client authentication is represented as 
an OPTIONAL "key=value" pair using a key value of "id" and a value component 
that contains the client identifier issued by an OP. An example for client 
identifier "user.idp.example":</t>
-      
-        <t>https://example.com/rdap/session/login?id=user.idp.example</t>
+          <t>The query used to request client authentication is represented as 
an OPTIONAL "key=value" pair using a key value of "id" and a value component 
that contains the client identifier issued by an OP. An example for client 
identifier "user.idp.example":</t>
+        
+          <t>https://example.com/rdap/session/login?id=user.idp.example</t>
 
-        <t>The authorization header for the Basic authentication scheme 
contains a Base64-encoded representation of the client identifier issued by an 
OP. No password is provided. An example for client identifier 
"user.idp.example":</t>
+          <t>The authorization header for the Basic authentication scheme 
contains a Base64-encoded representation of the client identifier issued by an 
OP. No password is provided. An example for client identifier 
"user.idp.example":</t>
 
-        <t>https://example.com/rdap/session/login</t>
-        <t>Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ==</t>
+          <t>https://example.com/rdap/session/login</t>
+          <t>Authorization: Basic dXNlci5pZHAuZXhhbXBsZQ==</t>
 
-        <t>An example for use with a local Authorization Server:</t>
-      
-        <t>https://example.com/rdap/session/login</t>
+          <t>An example for use with a local Authorization Server:</t>
         
-        <t>The response to this request MUST use the response structures 
specified in RFC 9083 <xref target="RFC9083"/>. In addition, the response MUST 
include an indication of the requested operation's success or failure in the 
"notices" data structure (including the client identifier), and, if successful, 
a "session" data structure.</t>
-        
-        <figure anchor="example_login_response">
-          <preamble>An example of a successful "session/login" 
response:</preamble>
-          <artwork xml:space="preserve">
-  {
-    "rdapConformance": [
-      "rdap_openidc_remote_level_0"
-    ],
-    "lang": "en-US",
-    "notices": {
-      "title": "Login Result",
-      "description": [
-        "Login succeeded",
-        "user.idp.example"
+          <t>https://example.com/rdap/session/login</t>
+        </section>
+        <section anchor="issuer-identifier" title="Issuer Identifier">
+          <t>The OP's Issuer Identifier is delivered by adding a query 
component to an RDAP request URI using the syntax described in Section 3.4 of 
RFC 3986 <xref target="RFC3986"/>. If the RDAP server supports a local 
Authorization Server, the Issuer Identifier MAY be omitted.</t>
+
+          <t>The query used to request client authentication is represented as 
an OPTIONAL "key=value" pair using a key value of "remote_iss" and a value 
component that contains the Issuer Identifier an OP.</t>
+          <t>An RDAP server MAY accept Issuer Identifiers not specified in 
<xref target="openidcRemoteConfiguration"/> and also MAY decide to accept a 
specific Issuer Identifiers only from a specific clients.</t>
+            
+          <t>An example for Issuer Identifier "https://idp.example.com":</t>
+          
<t>https://example.com/rdap/session/login?remote_iss=https%3A%2F%2Fidp.example.com</t>
+        </section>
+        <section anchor="login-response" title="Login Response">
+          <t>The response to the login request MUST use the response 
structures specified in RFC 9083 <xref target="RFC9083"/>. In addition, the 
response MUST include an indication of the requested operation's success or 
failure in the "notices" data structure (including the client identifier), and, 
if successful, a "session" data structure.</t>
+          
+          <figure anchor="example_login_response">
+            <preamble>An example of a successful "session/login" 
response:</preamble>
+            <artwork xml:space="preserve">
+    {
+      "rdapConformance": [
+        "rdap_openidc_remote_level_0"
       ],
-    },
-    "session": {
-      "userClaims": {
-        "sub": "103892603076825016132",
-        "name": "User Person",
-        "given_name": "User",
-        "family_name": "Person",
-        "picture": "https://lh3.example.com/a-/AOh14=s96-c";,
-        "email": "u...@example.com",
-        "email_verified": true,
-        "locale": "en",
-        "purpose": "domainNameControl",
-        "dnt": false
+      "lang": "en-US",
+      "notices": {
+        "title": "Login Result",
+        "description": [
+          "Login succeeded",
+          "user.idp.example"
+        ],
       },
-      "sessionInfo": {
-        "tokenExpiration": 3599,
-        "tokenRefresh": true
+      "session": {
+        "userClaims": {
+          "sub": "103892603076825016132",
+          "name": "User Person",
+          "given_name": "User",
+          "family_name": "Person",
+          "picture": "https://lh3.example.com/a-/AOh14=s96-c";,
+          "email": "u...@example.com",
+          "email_verified": true,
+          "locale": "en",
+          "purpose": "domainNameControl",
+          "dnt": false
+        },
+        "sessionInfo": {
+          "tokenExpiration": 3599,
+          "tokenRefresh": true
+        }
       }
-    }
-  }               
-          </artwork>
-        </figure>
-        
-        <figure anchor="example_failed_login_response">
-          <preamble>An example of a failed "session/login" response:</preamble>
-          <artwork xml:space="preserve">
-  {
-    "rdapConformance": [
-      "rdap_openidc_remote_level_0"
-    ],
-    "lang": "en-US",
-    "notices": {
-      "title": "Login Result",
-      "description": [
-        "Login failed",
-        "user.idp.example"
-        ]
-    }
-  }                
-          </artwork>
-        </figure>
-
+    }               
+            </artwork>
+          </figure>
+          
+          <figure anchor="example_failed_login_response">
+            <preamble>An example of a failed "session/login" 
response:</preamble>
+            <artwork xml:space="preserve">
+    {
+      "rdapConformance": [
+        "rdap_openidc_remote_level_0"
+      ],
+      "lang": "en-US",
+      "notices": {
+        "title": "Login Result",
+        "description": [
+          "Login failed",
+          "user.idp.example"
+          ]
+      }
+    }                
+            </artwork>
+          </figure>
+        </section>
         <section anchor="ui-constrained" title="Clients with Limited User 
Interfaces">
           <t>The "OAuth 2.0 Device Authorization Grant" <xref 
target="RFC8628"/> provides an OPTIONAL method to request user authorization 
from devices that have an Internet connection, but lack a suitable browser for 
a more traditional OAuth flow. This method requires an End-User to use a second 
device (such as a smart telephone) that has access to a web browser for entry 
of a code sequence that is presented on the UI-constrained device.</t>
       
@@ -876,6 +926,7 @@
           <t hangText="10:">Updated <xref target="discovery"/>. Replaced token 
processing queries with "login", "session", and "logout" queries.</t>
           <t hangText="11:">Replaced queries with "session/*" queries. Added 
description of "rdap" OAuth scope. Added implementation status information.</t>
           <t hangText="12:">Updated data structure descriptions. Updated <xref 
target="IANA"/>. Minor formatting changes due to a move to xml2rfc-v3 
markup.</t>
+          <t hangText="XX:">Added support for OP discovery via OP's Issuer 
Identifier.</t>
         </list>
       </t>
     </section>
_______________________________________________
regext mailing list
regext@ietf.org
https://www.ietf.org/mailman/listinfo/regext

Reply via email to