generated from martinthomson/internet-draft-template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdraft-jones-oauth-rfc7523bis.xml
1128 lines (1044 loc) · 45.7 KB
/
draft-jones-oauth-rfc7523bis.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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='http://xml2rfc.tools.ietf.org/authoring/rfc2629.xslt' ?>
<!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN" "http://xml2rfc.tools.ietf.org/authoring/rfc2629.dtd">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
category="std" ipr="trust200902"
docName="draft-jones-oauth-rfc7523bis-latest"
obsoletes="7523" updates="7521, 7522, 9126">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="5"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<front>
<title abbrev="OAuth JWT Assertion Profiles">JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
<author fullname="Michael B. Jones" surname="Jones" initials="M.B.">
<organization>Self-Issued Consulting</organization>
<address>
<email>[email protected]</email>
<uri>https://self-issued.info/</uri>
</address>
</author>
<author fullname="Brian Campbell" initials="B." surname="Campbell">
<organization abbrev="Ping Identity">Ping Identity</organization>
<address>
<email>[email protected]</email>
</address>
</author>
<author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
<organization abbrev="Disney">Disney</organization>
<address>
<email>[email protected]</email>
</address>
</author>
<date day="25" month="November" year="2024" />
<area>Security</area>
<workgroup>OAuth Working Group</workgroup>
<keyword>OAuth</keyword>
<keyword>JWT</keyword>
<keyword>Assertion</keyword>
<keyword>Token</keyword>
<keyword>Security Token</keyword>
<abstract>
<t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for
requesting an OAuth 2.0 access token as well as for client authentication.
</t>
</abstract>
</front>
<middle>
<section title="Introduction" anchor="Introduction">
<t>
JSON Web Token (JWT) <xref target="JWT"/>
is a JSON-based <xref target="RFC8259"/> security token encoding
that enables
identity and security information to be shared across security
domains.
A security token is generally issued by an Identity Provider
and consumed by a Relying Party that relies on its content to
identify the token's subject for security-related purposes.
</t>
<t>
The OAuth 2.0 Authorization Framework <xref target="RFC6749"/> provides
a method for making authenticated HTTP requests to a resource using an access token.
Access tokens are issued to third-party clients by an
authorization server (AS) with the (sometimes implicit) approval of the resource owner.
In OAuth, an authorization grant is an abstract term used to describe
intermediate credentials that represent the resource owner
authorization. An authorization grant is used by the client to obtain an access token.
Several authorization grant types are defined to support a wide range
of client types and user experiences.
OAuth also allows for the definition of new extension grant types
to support additional clients or to provide a bridge between OAuth and other trust frameworks.
Finally, OAuth allows the definition of additional authentication mechanisms to be used by clients when interacting with the authorization server.
</t>
<t>
"Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants"
<xref target="RFC7521"/>
is an abstract extension to OAuth 2.0 that provides a general
framework for the use of assertions (a.k.a. security tokens) as client credentials and/or authorization grants with OAuth 2.0.
This specification profiles
the OAuth Assertion Framework
<xref target="RFC7521"/>
to define an extension grant type that uses a JWT Bearer Token to
request an OAuth 2.0 access token as well as for use as client credentials.
The format and processing rules for the JWT defined in this specification are intentionally similar,
though not identical, to those in the closely related specification "Security
Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication
and Authorization Grants"
<xref target="RFC7522"/>.
The differences arise where the structure and semantics of JWTs differ from SAML Assertions.
JWTs, for example, have no direct equivalent to the <SubjectConfirmation> or <AuthnStatement> elements of SAML Assertions.
</t>
<t>This document defines how a JWT Bearer Token can be used to request an access token when a client wishes to utilize an existing trust
relationship, expressed through the semantics of
the JWT,
without a direct user-approval step at the authorization server. It also defines how a JWT can be used as a client authentication mechanism.
The use of a security token for client
authentication is orthogonal to and separable from using a security token as an
authorization grant. They can be used either in combination or separately.
Client authentication using a JWT is nothing more than an alternative way for a client to authenticate
to the token endpoint or other endpoints
such as the pushed authorization endpoint <xref target="RFC9126"/>
and must be used in conjunction with some grant type to form a complete and
meaningful protocol request. JWT authorization grants may be used with or without client authentication
or identification. Whether or not client authentication is needed in conjunction with a JWT authorization
grant, as well as the supported types of client authentication, are policy decisions at the discretion of the authorization server.
</t>
<t>The process by which the client obtains the JWT, prior to exchanging it with the authorization server or using it for client authentication, is out of scope.</t>
<section title="Notational Conventions" anchor="NotationalConventions">
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
only when, they appear in all capitals, as shown here.
</t>
<t>
Unless otherwise noted, all the protocol parameter names and values are case sensitive.
</t>
</section>
<section title='Terminology' anchor='Terminology'>
<t>
All terms are as defined in the following specifications:
"The OAuth 2.0 Authorization Framework" <xref target="RFC6749"/>,
the OAuth Assertion Framework
<xref target="RFC7521"/>, and "JSON Web Token (JWT)" <xref target="JWT"/>.
</t>
</section>
</section>
<section title="HTTP Parameter Bindings for Transporting Assertions" anchor="Transporting">
<t>
The OAuth Assertion Framework
<xref target="RFC7521"/>
defines generic HTTP parameters for transporting assertions (a.k.a. security tokens)
during interactions with a token endpoint.
This section defines specific parameters and treatments of those parameters
for use with JWT Bearer Tokens.
</t>
<section title="Using JWTs as Authorization Grants" anchor="AuthGrants">
<t>
To use a Bearer JWT as an authorization grant, the client uses an access token request as defined in
Section 4 of
the OAuth Assertion Framework
<xref target="RFC7521"/>
with the following specific parameter values and encodings.
</t>
<t>The value of the <spanx style='verb'>grant_type</spanx> is
<spanx style='verb'>urn:ietf:params:oauth:grant-type:jwt-bearer</spanx>.</t>
<t>
The value of the <spanx style='verb'>assertion</spanx> parameter
MUST contain a single JWT.
</t>
<t>
The <spanx style='verb'>scope</spanx> parameter may be used, as defined in
the OAuth Assertion Framework
<xref target="RFC7521"/>, to indicate the requested scope.
</t>
<t>Authentication of the client is optional, as described in
Section 3.2.1 of OAuth 2.0 <xref target="RFC6749"/> and
consequently, the <spanx style='verb'>client_id</spanx> is only needed
when a form of client authentication that relies on the parameter is used.</t>
<t>The following example demonstrates an access token request with a JWT as an authorization grant
(with extra line breaks for display purposes only):</t>
<figure>
<artwork><![CDATA[
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=eyJ0eXAiOiJhdXRob3JpemF0aW9uLWdyYW50K2p3dCIsImFsZyI6Ik
VTMjU2Iiwia2lkIjoiMTYifQ.
eyJhdWQiOiJodHRwczovLw[...omitted for brevity...].
J9l-ZhwP[...omitted for brevity...]
]]></artwork>
</figure>
</section>
<section title="Using JWTs for Client Authentication" anchor="ClientAuth">
<t>To use a JWT Bearer Token for client authentication, the client uses the following parameter values and encodings.</t>
<t>The value of the <spanx style='verb'>client_assertion_type</spanx> is
<spanx style='verb'>urn:ietf:params:oauth:client-assertion-type:jwt-bearer</spanx>.</t>
<t>
The value of the <spanx style='verb'>client_assertion</spanx> parameter
contains a single JWT. It MUST NOT contain more than one JWT.
</t>
<t>The following example demonstrates client
authentication using a JWT during the presentation of an authorization code grant in an
access token request
(with extra line breaks for display purposes only):</t>
<figure>
<artwork><![CDATA[
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&
client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3A
client-assertion-type%3Ajwt-bearer&
client_assertion=eyJ0eXAiOiJjbGllbnQtYXV0aGVudGljYXRpb24rand0Iiwi
YWxnIjoiUlMyNTYiLCJraWQiOiIyMiJ9.
eyJhdWQiOiJodHRwczovLw[...omitted for brevity...].
cC4hiUPo[...omitted for brevity...]
]]></artwork>
</figure>
</section>
</section>
<section title="JWT Format and Processing Requirements" anchor="Processing">
<t>
In order to issue an access token response as described in
OAuth 2.0 <xref target="RFC6749"/>
or to rely on a JWT for client authentication,
the authorization server MUST validate the JWT according to the criteria below.
Application of additional restrictions and policy are at the discretion of the authorization server.
</t>
<t>
<list style="numbers">
<t>
The JWT MUST be explicitly typed,
as defined in Section 3.11 of <xref target="RFC8725"/>.
The <spanx style="verb">typ</spanx> header parameter values
that MUST be used are defined in <xref target="GrantProcessing"/>
and <xref target="ClientProcessing"/>.
The authorization server MUST reject JWTs that do not use
the specified explicit type value.
</t>
<t>
The JWT MUST contain an <spanx style="verb">iss</spanx>
(issuer) claim that contains a unique identifier for the
entity that issued the JWT.
In the absence of an application profile specifying
otherwise, compliant applications MUST compare issuer
values using the Simple String Comparison method defined in Section
6.2.1 of RFC 3986 <xref target="RFC3986"/>.
</t>
<t>
The JWT MUST contain a <spanx style="verb">sub</spanx>
(subject) claim identifying the
principal that is the subject of the JWT. Two cases need to
be differentiated:
<list style="letters">
<t> For the authorization grant, the subject typically identifies an authorized accessor for which the
access token is being requested (i.e., the resource owner or an authorized delegate), but
in some cases, may be a pseudonymous identifier or other value denoting an anonymous user.</t>
<t>
For client authentication, the subject MUST be the
<spanx style='verb'>client_id</spanx> of the OAuth client.
</t>
</list>
</t>
<t>
The JWT MUST contain an <spanx style="verb">aud</spanx>
(audience) claim containing
the issuer identifier <xref target="RFC8414"/>
of the authorization server as its sole value.
The authorization server MUST have an issuer identifier
to be used with this specification.
Unlike the <spanx style="verb">aud</spanx> value specified
in <xref target="RFC7523"/>, there MUST be no value other than
the issuer identifier of the intended authorization server
used as the audience of the JWT;
this includes that the token endpoint URL of the authorization server
MUST NOT be used as an audience value.
To simplify implementations,
the <spanx style="verb">aud</spanx> claim value MUST
be a JSON string, and not a single-valued JSON array.
The authorization server MUST reject any JWT that does not
contain its issuer identifier as its sole audience value.
In the absence of an application profile specifying
otherwise, compliant applications MUST compare the audience
values using the Simple String Comparison method defined in Section
6.2.1 of RFC 3986 <xref target="RFC3986"/>.
</t>
<t>
The JWT MUST contain an <spanx style="verb">exp</spanx>
(expiration time) claim that limits the time window during
which the JWT can be used. The authorization server
MUST reject any JWT with an expiration time that has passed,
subject to allowable clock skew between systems.
Note that the
authorization server may reject JWTs with an <spanx
style="verb">exp</spanx> claim value that is
unreasonably far in the future.
</t>
<t>
The JWT MAY contain an <spanx style="verb">nbf</spanx>
(not before) claim that identifies the time before which
the token MUST NOT be accepted for processing.
</t>
<t>
The JWT MAY contain an <spanx style="verb">iat</spanx>
(issued at) claim that identifies the time at which the
JWT was issued. Note that the authorization server may reject JWTs
with an <spanx style="verb">iat</spanx> claim value that is
unreasonably far in the past.
</t>
<t>
The JWT MAY contain a <spanx style="verb">jti</spanx>
(JWT ID) claim that provides a unique identifier for
the token.
The authorization server MAY ensure that JWTs are not
replayed by maintaining the set of used
<spanx style="verb">jti</spanx> values for the length of
time for which the JWT would be considered valid based
on the applicable <spanx style="verb">exp</spanx> instant.
</t>
<t>
The JWT MAY contain other claims.
</t>
<t>
The JWT MUST be digitally signed or have a Message Authentication Code (MAC) applied
by the issuer. The authorization server
MUST reject JWTs with an invalid signature or MAC.
</t>
<t>
The authorization server MUST reject a JWT that is not
valid in all other respects per
"JSON Web Token (JWT)" <xref target="JWT"/>.
</t>
</list>
</t>
<section title="Authorization Grant Processing" anchor="GrantProcessing">
<t>
Authorization grant JWTs MUST be explicitly typed by using the
<spanx style="verb">typ</spanx> header parameter value
<spanx style="verb">authorization-grant+jwt</spanx> or
another more specific explicit type value defined by a specification profiling this specification.
Authorization grant JWTs not using the explicit type value
MUST be rejected by the authorization server.
</t>
<t>
JWT authorization grants may be used with or without client authentication
or identification. Whether or not client authentication is needed in
conjunction with a JWT authorization grant, as well as the supported types
of client authentication, are policy decisions at the discretion of the
authorization server. However, if client credentials are present in
the request, the authorization server MUST validate them.
</t>
<t>If the JWT is not valid, or the current time is not within the token's valid time window for use, the
authorization server constructs an error response as defined in
OAuth 2.0 <xref target="RFC6749"/>.
The value of the <spanx style='verb'>error</spanx> parameter MUST be the
<spanx style='verb'>invalid_grant</spanx> error code. The authorization server
MAY include additional information regarding the reasons the JWT was considered invalid using the
<spanx style='verb'>error_description</spanx> or <spanx style='verb'>error_uri</spanx> parameters.
<figure>
<preamble>For example:</preamble>
<artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error":"invalid_grant",
"error_description":"Audience validation failed"
}
]]></artwork>
</figure>
</t>
</section>
<section title="Client Authentication Processing" anchor="ClientProcessing">
<t>
Client authentication JWTs MUST be explicitly typed by using the
<spanx style="verb">typ</spanx> header parameter value
<spanx style="verb">client-authentication+jwt</spanx>
another more specific explicit type value defined by a specification profiling this specification.
Client authentication JWTs not using the explicit type value
MUST be rejected by the authorization server.
</t>
<t>If the client JWT is not valid, the
authorization server constructs an error response as defined in
OAuth 2.0 <xref target="RFC6749"/>.
The value of the <spanx style='verb'>error</spanx> parameter MUST be the
<spanx style='verb'>invalid_client</spanx> error code. The authorization server
MAY include additional information regarding the reasons the JWT was considered invalid using the
<spanx style='verb'>error_description</spanx> or <spanx style='verb'>error_uri</spanx> parameters.
</t>
</section>
</section>
<section title="Authorization Grant Example" anchor="GrantExample">
<t>The following examples illustrate what a conforming JWT and an access token request would look like.
</t>
<t>
The example shows a JWT issued and signed by the system entity identified as
<spanx style='verb'>https://jwt-idp.example.com</spanx>.
The subject of the JWT is identified by email address as <spanx style='verb'>[email protected]</spanx>.
The intended audience of the JWT is <spanx style='verb'>https://authz.example.net</spanx>,
which is the authorization server's issuer identifier.
The JWT is sent as part of an access token request to the authorization server's
token endpoint at <spanx style='verb'>https://authz.example.net/token.oauth2</spanx>.
</t>
<figure>
<preamble>
Below is an example JSON object that could be encoded to
produce the JWT Claims Set for a JWT:
</preamble>
<artwork><![CDATA[
{"aud":"https://authz.example.net",
"iss":"https://jwt-idp.example.com",
"sub":"mailto:[email protected]",
"iat":1731721541,
"exp":1731725141,
"http://claims.example.com/member":true
}
]]></artwork>
</figure>
<figure>
<preamble>
The following example JSON object, used as the header parameters of a JWT,
declares that the JWT is an authorization grant JWT,
is signed with the Elliptic Curve Digital Signature Algorithm (ECDSA) P-256 with SHA-256,
and was signed with a key identified by
the <spanx style="verb">kid</spanx> value <spanx style="verb">16</spanx>.
</preamble>
<artwork><![CDATA[
{"typ":"authorization-grant+jwt","alg":"ES256","kid":"16"}
]]></artwork>
</figure>
<figure>
<preamble>
To present the JWT with the claims and header shown in the previous example as part of an access token request, for example,
the client might make the following HTTPS request
(with extra line breaks for display purposes only):
</preamble>
<artwork><![CDATA[
POST /token.oauth2 HTTP/1.1
Host: authz.example.net
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=eyJ0eXAiOiJhdXRob3JpemF0aW9uLWdyYW50K2p3dCIsImFsZyI6Ik
VTMjU2Iiwia2lkIjoiMTYifQ.
eyJhdWQiOiJodHRwczovLw[...omitted for brevity...].
J9l-ZhwP[...omitted for brevity...]
]]></artwork>
</figure>
</section>
<section anchor="Interoperability" title="Interoperability Considerations">
<t>
Agreement between system entities regarding identifiers,
keys, and endpoints is required in order to achieve interoperable
deployments of this profile. Specific items that require agreement include
values for the issuer identifiers, the locations of endpoints, the key used to
apply and verify the digital signature or MAC over the JWT, one-time use restrictions on the JWT,
maximum JWT lifetime allowed, and the specific subject and claim requirements of the JWT.
The exchange of such information is explicitly out of scope for this specification.
In some cases, additional profiles may be created that constrain or prescribe these values or specify
how they are to be exchanged.
Examples of such profiles include
the OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591"/>,
OAuth 2.0 Authorization Server Metadata <xref target="RFC8414"/>,
OpenID Connect Dynamic Client Registration 1.0 <xref target="OpenID.Registration"/>,
OpenID Connect Discovery 1.0 <xref target="OpenID.Discovery"/>,
and OpenID Federation 1.0 <xref target="OpenID.Federation"/>.
</t>
<t>
The <spanx style="verb">RS256</spanx> algorithm, from <xref target="JWA"/>, is a mandatory-to-implement JSON Web
Signature algorithm for this profile.
</t>
</section>
<section anchor="Security" title="Security Considerations">
<t>
The security considerations described within the following specifications are all applicable
to this document:
"Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants"
<xref target="RFC7521"/>,
"The OAuth 2.0 Authorization Framework" <xref target="RFC6749"/>, and "JSON Web Token (JWT)" <xref target="JWT"/>.
</t>
<t>
The specification does not mandate replay protection for the JWT
usage for either the authorization grant or for client
authentication. It is an optional feature, which implementations may employ at their own discretion.
</t>
<t>
This specification tightens the JWT audience requirements to prevent attacks
that could result from exploiting audience ambiguities
allowed by <xref target="RFC7523"/>.
</t>
</section>
<section anchor="Privacy" title="Privacy Considerations">
<t>
A JWT may contain privacy-sensitive information and, to prevent disclosure of such information to unintended parties,
should only be transmitted over encrypted channels, such as Transport Layer Security (TLS). In cases where it is desirable to prevent disclosure
of certain information to the client, the JWT should be encrypted to the authorization server.
</t>
<t>
Deployments should determine the minimum amount of information necessary to complete the exchange and include
only such claims in the JWT. In some cases, the <spanx style="verb">sub</spanx> (subject) claim can be a value representing an anonymous
or pseudonymous user, as described in Section 6.3.1 of
the OAuth Assertion Framework
<xref target="RFC7521"/>.
</t>
</section>
<section title='IANA Considerations' anchor="IANA">
<t>
The IANA actions of registering the URNs
<spanx style="verb">urn:ietf:params:oauth:grant-type:jwt-bearer</spanx>
and
<spanx style="verb">urn:ietf:params:oauth:client-assertion-type:jwt-bearer</spanx>
in the IANA "OAuth URI" registry <xref target="IANA.OAuth.Parameters"/>
established by
"An IETF URN Sub-Namespace for OAuth" <xref target="RFC6755"/>
were performed by <xref target="RFC7523"/>.
</t>
<section title="Media Type Registration" anchor="MediaReg">
<t>
This section registers the following media types <xref target="RFC2046"/>
in the "Media Types" registry <xref target="IANA.MediaTypes"/>
in the manner described in <xref target="RFC6838"/>.
</t>
<section title="Registry Contents" anchor="MediaContents">
<t>
<?rfc subcompact="yes"?>
<list style="symbols">
<t>
Type name: application
</t>
<t>
Subtype name: authorization-grant+jwt
</t>
<t>
Required parameters: n/a
</t>
<t>
Optional parameters: n/a
</t>
<t>
Encoding considerations: binary;
An authorization grant JWT is a JWT;
JWT values are encoded as a
series of base64url-encoded values (some of which may be the
empty string) separated by period ('.') characters.
</t>
<t>
Security considerations: See <xref target="Security"/> of this specification
</t>
<t>
Interoperability considerations: n/a
</t>
<t>
Published specification: <xref target="GrantProcessing"/> of this specification
</t>
<t>
Applications that use this media type:
Applications that use this specification
</t>
<t>
Fragment identifier considerations: n/a
</t>
<t>
Additional information:<list style="empty">
<t>Magic number(s): n/a</t>
<t>File extension(s): n/a</t>
<t>Macintosh file type code(s): n/a </t></list>
<vspace/>
</t>
<t>
Person & email address to contact for further information:
<vspace/>
Michael B. Jones, [email protected]
</t>
<t>
Intended usage: COMMON
</t>
<t>
Restrictions on usage: none
</t>
<t>
Author: Michael B. Jones, [email protected]
</t>
<t>
Change controller: OpenID Foundation Artifact Binding Working Group - [email protected]
</t>
<t>
Provisional registration? No
</t>
</list>
<?rfc subcompact="no"?>
</t>
<t>
<?rfc subcompact="yes"?>
<list style="symbols">
<t>
Type name: application
</t>
<t>
Subtype name: client-authentication+jwt
</t>
<t>
Required parameters: n/a
</t>
<t>
Optional parameters: n/a
</t>
<t>
Encoding considerations: binary;
A client authentication JWT is a JWT;
JWT values are encoded as a
series of base64url-encoded values (some of which may be the
empty string) separated by period ('.') characters.
</t>
<t>
Security considerations: See <xref target="Security"/> of this specification
</t>
<t>
Interoperability considerations: n/a
</t>
<t>
Published specification: <xref target="ClientProcessing"/> of this specification
</t>
<t>
Applications that use this media type:
Applications that use this specification
</t>
<t>
Fragment identifier considerations: n/a
</t>
<t>
Additional information:<list style="empty">
<t>Magic number(s): n/a</t>
<t>File extension(s): n/a</t>
<t>Macintosh file type code(s): n/a </t></list>
<vspace/>
</t>
<t>
Person & email address to contact for further information:
<vspace/>
Michael B. Jones, [email protected]
</t>
<t>
Intended usage: COMMON
</t>
<t>
Restrictions on usage: none
</t>
<t>
Author: Michael B. Jones, [email protected]
</t>
<t>
Change controller: OpenID Foundation Artifact Binding Working Group - [email protected]
</t>
<t>
Provisional registration? No
</t>
</list>
<?rfc subcompact="no"?>
</t>
</section>
</section>
</section>
<section title="Updates to RFC 7521" anchor="RFC7521Updates">
<t>
This section updates
"Assertion Framework for OAuth 2.0 Client Authentication and
Authorization Grants" <xref target="RFC7521"/>
to tighten its audience requirements.
</t>
<t>
The description of the Audience parameter
in Section 5.1 of <xref target="RFC7521"/> (Assertion Metamodel)
is replaced by:
<list style="hanging">
<t hangText="Audience">
<vspace/>
A value that identifies the party intended to process the assertion.
The audience MUST contain the issuer identifier <xref target="RFC8414"/>
of the authorization server as its sole value.
Unlike the audience value specified
in <xref target="RFC7521"/>, there MUST be no value other than
the issuer identifier of the intended authorization server
used as the audience of the assertion;
this includes that the token endpoint URL of the authorization server
MUST NOT be used as an audience value.
</t>
</list>
</t>
<t>
The description of the Audience parameter
in Section 5.2 of <xref target="RFC7521"/> (General Assertion Format and Processing Rules)
is replaced by:
<list style="symbols">
<t>
The assertion MUST contain an audience that identifies the
authorization server as the intended audience,
with the issuer identifier <xref target="RFC8414"/>
of the authorization server as its sole value.
The authorization server MUST reject any assertion that does not
contain its own issuer identifier as the sole audience value.
</t>
</list>
</t>
<t>
In the list of agreements required by participants
in Section 7 of <xref target="RFC7521"/> (Interoperability Considerations),
"Audience identifiers" is removed from the list.
</t>
</section>
<section title="Updates to RFC 7522" anchor="RFC7522Updates">
<t>
This section updates
"Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0
Client Authentication and Authorization Grants" <xref target="RFC7522"/>
to tighten its audience requirements.
</t>
<t>
The description of the Audience element in Item 2 of
Section 3 of <xref target="RFC7522"/> (Assertion Format and Processing Requirements)
is replaced by:
<list style="empty">
<t>
The Assertion MUST contain a <Conditions> element
with an <AudienceRestriction> element
with a single <Audience> element that identifies the
authorization server as the intended audience.
The value of the <Audience> element MUST be
the issuer identifier <xref target="RFC8414"/> of the authorization server.
Section 2.5.1.4 of
"Assertions and Protocols for the OASIS Security Assertion Markup Language (SAML) V2.0"
<xref target="OASIS.saml-core-2.0-os"/>
defines the <AudienceRestriction> and <Audience> elements.
Unlike the audience value specified in <xref target="RFC7522"/>,
there MUST be no value other than
the issuer identifier of the intended authorization server
used as the audience of the assertion;
this includes that the token endpoint URL of the authorization server
MUST NOT be used as an audience value.
<vspace blankLine="1"/>
The authorization server MUST reject any assertion that does not
contain its own issuer identifier as the sole audience value.
</t>
</list>
</t>
<t>
In Section 4 of <xref target="RFC7522"/> (Authorization Grant Example),
the sentence:
<list style="empty">
<t>
The intended audience of the Assertion is
<spanx style='verb'>https://saml-sp.example.net</spanx>,
which is an identifier for a SAML Service Provider
with which the authorization server identifies itself.
</t>
</list>
is replaced by:
<list style="empty">
<t>
The intended audience of the Assertion is
<spanx style='verb'>https://authz.example.net</spanx>,
which is the authorization server's issuer identifier.
</t>
</list>
</t>
<figure title='Example SAML 2.0 Assertion' anchor='assertion'>
<preamble>
In the same section, the SAML 2.0 Assertion example is replaced by:
</preamble>
<artwork><![CDATA[
<Assertion IssueInstant="2024-11-17T00:53:34.619Z"
ID="ef1xsbZxPV2oqjd7HTLRLIBlBb7"
Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://saml-idp.example.com</Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
[...omitted for brevity...]
</ds:Signature>
<Subject>
<NameID
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
</NameID>
<SubjectConfirmation
Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData
NotOnOrAfter="2024-11-17T00:58:34.619Z"
Recipient="https://authz.example.net/token.oauth2"/>
</SubjectConfirmation>
</Subject>
<Conditions>
<AudienceRestriction>
<Audience>https://authz.example.net</Audience>
</AudienceRestriction>
</Conditions>
<AuthnStatement AuthnInstant="2024-11-17T00:53:34.371Z">
<AuthnContext>
<AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:X509
</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
]]></artwork>
</figure>
<t>
In the list of agreements required by participants
in Section 5 of <xref target="RFC7521"/> (Interoperability Considerations),
"Audience identifiers" is removed from the list.
</t>
</section>
<section title="Updates to RFC 9126" anchor="RFC9126Updates">
<t>
This section updates
"OAuth 2.0 Pushed Authorization Requests" <xref target="RFC9126"/>
to tighten its audience requirements.
</t>
<t>
The paragraph describing the audience value
in Section 2 of <xref target="RFC9126"/> (Pushed Authorization Request Endpoint)
is replaced by:
<list style="empty">
<t>
This update resolves the potential ambiguity regarding
the appropriate audience value to use when employing
JWT client assertion-based authentication
(as defined in Section 2.2 of <xref target="RFC7523"/> with the
<spanx style="verb">private_key_jwt</spanx> or
<spanx style="verb">client_secret_jwt</spanx> authentication method names
per Section 9 of <xref target="OpenID.Core"/>)
that was described in <xref target="RFC9126"/>.
To address that ambiguity, the issuer identifier URL
of the authorization server according to <xref target="RFC8414"/>
MUST be used as the sole value of the audience.
The authorization server MUST reject any such JWT that does not
contain its own issuer identifier as the sole audience value.
</t>
</list>
</t>
</section>
</middle>
<back>
<references title="Normative References">
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7521.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7522.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7523.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8725.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9126.xml"/>
<!-- Reference from https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7518.xml with change to anchor="JWA" -->
<reference anchor="JWA" target="https://www.rfc-editor.org/info/rfc7518">
<front>
<title>JSON Web Algorithms (JWA)</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<date month="May" year="2015"/>
<abstract>
<t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7518"/>
<seriesInfo name="DOI" value="10.17487/RFC7518"/>
</reference>
<!-- Reference from https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml with change to anchor="JWT" -->
<reference anchor="JWT" target="https://www.rfc-editor.org/info/rfc7519">
<front>
<title>JSON Web Token (JWT)</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
<date month="May" year="2015"/>
<abstract>
<t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7519"/>
<seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>
<reference target="https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf" anchor="OASIS.saml-core-2.0-os">
<front><title>Assertions and Protocols for the OASIS Security Assertion Markup Language
(SAML) V2.0</title>
<author fullname="Scott Cantor" initials="S." surname="Cantor">
<organization>Internet2</organization>
<address><email>[email protected]</email></address></author>
<author fullname="John Kemp" initials="J." surname="Kemp"><organization>Nokia</organization>
<address><email>[email protected]</email></address></author><author fullname="Rob Philpott" initials="R." surname="Philpott">
<organization>RSA Security</organization>
<address><email>[email protected]</email></address></author>
<author fullname="Eve Maler" initials="E." surname="Maler">
<organization>Sun Microsystems</organization><address><email>[email protected]</email></address></author>
<date year="2005" month="March"/></front>
<seriesInfo name="OASIS Standard" value="saml-core-2.0-os"/>
</reference>
</references>
<references title="Informative References">
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6755.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7591.xml"/>
<reference anchor="OpenID.Core" target="https://openid.net/specs/openid-connect-core-1_0.html">
<front>
<title>OpenID Connect Core 1.0 incorporating errata set 2</title>
<author fullname="Nat Sakimura" initials="N." surname="Sakimura">
<organization abbrev="NAT.Consulting (was at NRI)">NAT.Consulting</organization>
</author>
<author fullname="John Bradley" initials="J." surname="Bradley">
<organization abbrev="Yubico (was at Ping Identity)">Yubico</organization>
</author>
<author fullname="Michael B. Jones" initials="M.B." surname="Jones">
<organization abbrev="Self-Issued Consulting (was at Microsoft)">Self-Issued Consulting</organization>
</author>
<author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
<organization abbrev="Google">Google</organization>
</author>
<author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
<organization abbrev="Disney (was at Salesforce)">Disney</organization>
</author>
<date day="15" month="December" year="2023"/>
</front>
</reference>
<reference anchor="OpenID.Registration" target="https://openid.net/specs/openid-connect-registration-1_0.html">
<front>
<title>OpenID Connect Dynamic Client Registration 1.0 incorporating errata set 2</title>
<author fullname="Nat Sakimura" initials="N." surname="Sakimura">
<organization abbrev="NAT.Consulting (was at NRI)">NAT.Consulting</organization>
</author>
<author fullname="John Bradley" initials="J." surname="Bradley">
<organization abbrev="Yubico (was at Ping Identity)">Yubico</organization>
</author>
<author fullname="Michael B. Jones" initials="M.B." surname="Jones">
<organization abbrev="Self-Issued Consulting (was at Microsoft)">Self-Issued Consulting</organization>
</author>
<date day="15" month="December" year="2023"/>
</front>
</reference>
<reference anchor="OpenID.Discovery" target="https://openid.net/specs/openid-connect-discovery-1_0.html">