-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Justin Richer
committed
Apr 10, 2014
1 parent
4ab2408
commit f5f6a62
Showing
1 changed file
with
186 additions
and
186 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,186 +1,186 @@ | ||
<?xml version="1.0" encoding="US-ASCII"?> | ||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||
<?rfc toc="yes"?> | ||
<?rfc tocompact="yes"?> | ||
<?rfc tocdepth="3"?> | ||
<?rfc tocindent="yes"?> | ||
<?rfc symrefs="yes"?> | ||
<?rfc sortrefs="yes"?> | ||
<?rfc comments="yes"?> | ||
<?rfc inline="yes"?> | ||
<?rfc compact="yes"?> | ||
<?rfc subcompact="no"?> | ||
<rfc category="exp" docName="draft-bradley-stateless-oauth-client-00" | ||
ipr="trust200902"> | ||
<front> | ||
<title abbrev="Abbreviated-Title">Stateless Client Identifier for OAuth | ||
2</title> | ||
|
||
<author fullname="John Bradley" initials="J." role="editor" | ||
surname="Bradley"> | ||
<organization/> | ||
|
||
<address/> | ||
</author> | ||
|
||
<author fullname="Justin Richer" initials="J." surname="Richer"> | ||
<organization/> | ||
|
||
<address> | ||
<postal> | ||
<street/> | ||
|
||
<city/> | ||
|
||
<region/> | ||
|
||
<code/> | ||
|
||
<country/> | ||
</postal> | ||
|
||
<phone/> | ||
|
||
<facsimile/> | ||
|
||
<email/> | ||
|
||
<uri/> | ||
</address> | ||
</author> | ||
|
||
<date day="20" month="September" year="2013"/> | ||
|
||
<abstract> | ||
<t>This draft provides a method for communicating information about an | ||
OAuth client through its client identifier allowing for fully stateless | ||
operation.</t> | ||
</abstract> | ||
|
||
<note title="Requirements Language"> | ||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||
document are to be interpreted as described in <xref | ||
target="RFC2119">RFC 2119</xref>.</t> | ||
</note> | ||
</front> | ||
|
||
<middle> | ||
<section title="Introduction"> | ||
<t>In the OAuth 2.0 Authorization protocol, the Client must provide a | ||
Client Identifier that the Authorization Server recognizes. | ||
Additionally, an Autorization Server needs to know about a client's | ||
details, such as its name and redirect URIs. Traditionally, this is | ||
handled through a registration process, which may be either manual or | ||
automated, where the authorization server maintains a stateful | ||
relationship between the Client Identifier and its associated metadata. | ||
This draft proposes a mechanism whereby the essential metadata can be | ||
encoded into the Client Identifier itself, signed by the issuer, and | ||
validated by the authorization server, thus allowing the authorization | ||
server to be stateless in regard to client information.</t> | ||
</section> | ||
|
||
<section title="Stateless Client Identifier"> | ||
<t>The stateless client identifier consists of a [JWT], optionally | ||
signed with [JWS], whose payload contains claims as defined here.</t> | ||
|
||
<t><list style="hanging"> | ||
<t hangText="iss">REQUIRED. URL identifying the party that issued | ||
this client identifier.</t> | ||
|
||
<t hangText="sub">REQUIRED. Identifier of the client, locally unique | ||
to the issuer.</t> | ||
|
||
<t hangText="iat">OPTIONAL. Timestamp of when this client identifier | ||
was issued.</t> | ||
|
||
<t hangText="exp">OPTIONAL. Timestamp of when this client identifier | ||
will expire.</t> | ||
|
||
<t hangText="kid">RECOMMENDED if signed. Identifier of the key used | ||
to sign this client identifier at the issuer.</t> | ||
|
||
<t hangText="reg">REQUIRED. JSON Object containing a set of metadata | ||
claims of client information such as its redirect URIs, display | ||
name, and other items as defined in [Dyn Reg] and its | ||
extensions.</t> | ||
</list></t> | ||
|
||
<t>The issuer SHOULD sign the JWT with JWS in such a way that the | ||
signature can be verified by the authorization server.</t> | ||
|
||
<t>The issuer MAY encrypt the JWT with JWE.</t> | ||
</section> | ||
|
||
<section title="Validating the Stateless Client Identifier"> | ||
<t>Upon receiving a stateless client identifier at either the | ||
authorization endpoint or the token endpoint, the authorization server | ||
parses it as a JWT. It first checks the iss field to determine if it | ||
trusts identifiers issued by the party represented. It then verifies the | ||
signature if the JWT (if signed) using JWS. The key used to sign the JWT | ||
MAY be indicated by the kid field. The authorization server MAY use | ||
other means to validate the JWT and determine its authenticity.</t> | ||
|
||
<t>The authorization server then reads the fields inside the reg claim | ||
and uses these to configure the user experience and security parameters | ||
of the authorization. </t> | ||
</section> | ||
|
||
<section title="Obtaining a Stateless Client Identifier"> | ||
<t>The client identifier is intended to be opaque to the client, and as | ||
such a stateless client identifier is intended to be obtained and used | ||
in exactly the same way as a stateful client identifer would be for any | ||
OAuth client.</t> | ||
|
||
<t><list style="symbols"> | ||
<t>Manual registration: a developer uses an out-of-band | ||
adminstrative process to generate the client identifier and related | ||
credentials.</t> | ||
|
||
<t>Dynamic registration: a developer or client uses the process | ||
described in [Dyn Reg] to generate the client identifier and related | ||
credentials.</t> | ||
|
||
<t>Self assertion: a developer or client generates the client | ||
identifier on their own, often signing it with their own public | ||
key.</t> | ||
</list></t> | ||
|
||
<t>It is completely up to the purview of particular authorization | ||
servers which generation methods, and which client identifiers, they | ||
will accept.</t> | ||
</section> | ||
|
||
<section anchor="IANA" title="IANA Considerations"> | ||
<t>[ maybe we register the "reg" claim above? ]</t> | ||
|
||
<t>This document makes no request of IANA.</t> | ||
|
||
<t>Note to RFC Editor: this section may be removed on publication as an | ||
RFC.</t> | ||
</section> | ||
|
||
<section anchor="Security" title="Security Considerations"> | ||
<t>Since many OAuth systems assume that a change in the client | ||
identifier indicates a change in the client itself, systems using | ||
stateless client identifiers SHOULD NOT allow clients to update their | ||
information post registration. </t> | ||
|
||
<t>Since the client identifier is passed through the browser to the | ||
authorization endpoint, it MUST NOT contain any sensitive information. | ||
Additionally, as in standard OAuth, posession of the client identifier | ||
itself MUST NOT be assumed to be sufficient authentication [in many | ||
cases? except implicit mode?].</t> | ||
</section> | ||
|
||
<section anchor="Acknowledgements" title="Acknowledgements"> | ||
<t/> | ||
</section> | ||
</middle> | ||
|
||
<back> | ||
<references title="Normative References"> | ||
<?rfc include="reference.RFC.2119"?> | ||
</references> | ||
</back> | ||
</rfc> | ||
<?xml version="1.0" encoding="US-ASCII"?> | ||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||
<?rfc toc="yes"?> | ||
<?rfc tocompact="yes"?> | ||
<?rfc tocdepth="3"?> | ||
<?rfc tocindent="yes"?> | ||
<?rfc symrefs="yes"?> | ||
<?rfc sortrefs="yes"?> | ||
<?rfc comments="yes"?> | ||
<?rfc inline="yes"?> | ||
<?rfc compact="yes"?> | ||
<?rfc subcompact="no"?> | ||
<rfc category="exp" docName="draft-bradley-stateless-oauth-client-01" | ||
ipr="trust200902"> | ||
<front> | ||
<title abbrev="Abbreviated-Title">Stateless Client Identifier for OAuth | ||
2</title> | ||
|
||
<author fullname="John Bradley" initials="J." role="editor" | ||
surname="Bradley"> | ||
<organization/> | ||
|
||
<address/> | ||
</author> | ||
|
||
<author fullname="Justin Richer" initials="J." surname="Richer"> | ||
<organization/> | ||
|
||
<address> | ||
<postal> | ||
<street/> | ||
|
||
<city/> | ||
|
||
<region/> | ||
|
||
<code/> | ||
|
||
<country/> | ||
</postal> | ||
|
||
<phone/> | ||
|
||
<facsimile/> | ||
|
||
<email/> | ||
|
||
<uri/> | ||
</address> | ||
</author> | ||
|
||
<date day="07" month="April" year="2014"/> | ||
|
||
<abstract> | ||
<t>This draft provides a method for communicating information about an | ||
OAuth client through its client identifier allowing for fully stateless | ||
operation.</t> | ||
</abstract> | ||
|
||
<note title="Requirements Language"> | ||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||
document are to be interpreted as described in <xref | ||
target="RFC2119">RFC 2119</xref>.</t> | ||
</note> | ||
</front> | ||
|
||
<middle> | ||
<section title="Introduction"> | ||
<t>In the OAuth 2.0 Authorization protocol, the Client must provide a | ||
Client Identifier that the Authorization Server recognizes. | ||
Additionally, an Autorization Server needs to know about a client's | ||
details, such as its name and redirect URIs. Traditionally, this is | ||
handled through a registration process, which may be either manual or | ||
automated, where the authorization server maintains a stateful | ||
relationship between the Client Identifier and its associated metadata. | ||
This draft proposes a mechanism whereby the essential metadata can be | ||
encoded into the Client Identifier itself, signed by the issuer, and | ||
validated by the authorization server, thus allowing the authorization | ||
server to be stateless in regard to client information.</t> | ||
</section> | ||
|
||
<section title="Stateless Client Identifier"> | ||
<t>The stateless client identifier consists of a [JWT], optionally | ||
signed with [JWS], whose payload contains claims as defined here.</t> | ||
|
||
<t><list style="hanging"> | ||
<t hangText="iss">REQUIRED. URL identifying the party that issued | ||
this client identifier.</t> | ||
|
||
<t hangText="sub">REQUIRED. Identifier of the client, locally unique | ||
to the issuer.</t> | ||
|
||
<t hangText="iat">OPTIONAL. Timestamp of when this client identifier | ||
was issued.</t> | ||
|
||
<t hangText="exp">OPTIONAL. Timestamp of when this client identifier | ||
will expire.</t> | ||
|
||
<t hangText="kid">RECOMMENDED if signed. Identifier of the key used | ||
to sign this client identifier at the issuer.</t> | ||
|
||
<t hangText="reg">REQUIRED. JSON Object containing a set of metadata | ||
claims of client information such as its redirect URIs, display | ||
name, and other items as defined in [Dyn Reg] and its | ||
extensions.</t> | ||
</list></t> | ||
|
||
<t>The issuer SHOULD sign the JWT with JWS in such a way that the | ||
signature can be verified by the authorization server.</t> | ||
|
||
<t>The issuer MAY encrypt the JWT with JWE.</t> | ||
</section> | ||
|
||
<section title="Validating the Stateless Client Identifier"> | ||
<t>Upon receiving a stateless client identifier at either the | ||
authorization endpoint or the token endpoint, the authorization server | ||
parses it as a JWT. It first checks the iss field to determine if it | ||
trusts identifiers issued by the party represented. It then verifies the | ||
signature if the JWT (if signed) using JWS. The key used to sign the JWT | ||
MAY be indicated by the kid field. The authorization server MAY use | ||
other means to validate the JWT and determine its authenticity.</t> | ||
|
||
<t>The authorization server then reads the fields inside the reg claim | ||
and uses these to configure the user experience and security parameters | ||
of the authorization. </t> | ||
</section> | ||
|
||
<section title="Obtaining a Stateless Client Identifier"> | ||
<t>The client identifier is intended to be opaque to the client, and as | ||
such a stateless client identifier is intended to be obtained and used | ||
in exactly the same way as a stateful client identifer would be for any | ||
OAuth client.</t> | ||
|
||
<t><list style="symbols"> | ||
<t>Manual registration: a developer uses an out-of-band | ||
adminstrative process to generate the client identifier and related | ||
credentials.</t> | ||
|
||
<t>Dynamic registration: a developer or client uses the process | ||
described in [Dyn Reg] to generate the client identifier and related | ||
credentials.</t> | ||
|
||
<t>Self assertion: a developer or client generates the client | ||
identifier on their own, often signing it with their own public | ||
key.</t> | ||
</list></t> | ||
|
||
<t>It is completely up to the purview of particular authorization | ||
servers which generation methods, and which client identifiers, they | ||
will accept.</t> | ||
</section> | ||
|
||
<section anchor="IANA" title="IANA Considerations"> | ||
<t>[ maybe we register the "reg" claim above? ]</t> | ||
|
||
<t>This document makes no request of IANA.</t> | ||
|
||
<t>Note to RFC Editor: this section may be removed on publication as an | ||
RFC.</t> | ||
</section> | ||
|
||
<section anchor="Security" title="Security Considerations"> | ||
<t>Since many OAuth systems assume that a change in the client | ||
identifier indicates a change in the client itself, systems using | ||
stateless client identifiers SHOULD NOT allow clients to update their | ||
information post registration. </t> | ||
|
||
<t>Since the client identifier is passed through the browser to the | ||
authorization endpoint, it MUST NOT contain any sensitive information. | ||
Additionally, as in standard OAuth, posession of the client identifier | ||
itself MUST NOT be assumed to be sufficient authentication [in many | ||
cases? except implicit mode?].</t> | ||
</section> | ||
|
||
<section anchor="Acknowledgements" title="Acknowledgements"> | ||
<t/> | ||
</section> | ||
</middle> | ||
|
||
<back> | ||
<references title="Normative References"> | ||
<?rfc include="reference.RFC.2119"?> | ||
</references> | ||
</back> | ||
</rfc> |