forked from jricher/oauth-spec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
draft-bradley-stateless-oauth-client.xml
186 lines (147 loc) · 6.64 KB
/
draft-bradley-stateless-oauth-client.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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>