-
Notifications
You must be signed in to change notification settings - Fork 17
/
draft-ietf-oauth-json-web-token-11.ja.html
2246 lines (1786 loc) · 108 KB
/
draft-ietf-oauth-json-web-token-11.ja.html
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en"><head><title>JSON Web Token (JWT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="JSON Web Token (JWT)">
<meta name="keywords" content="RFC, Request for Comments, I-D, Internet-Draft, Assertion, Claim, Security Token, JavaScript Object Notation, JSON, JSON Web Token, JWT, JSON Object Signing and Encryption, JOSE, JSON Web Signature, JWS, JSON Web Encryption, JWE, JSON Web Key, JWK, JSON Web Algorithms, JWA">
<meta name="generator" content="xml2rfc v1.36 (http://xml.resource.org/)">
<style type='text/css'><!--
body {
font-family: verdana, charcoal, helvetica, arial, sans-serif;
font-size: small; color: #000; background-color: #FFF;
margin: 2em;
}
h1, h2, h3, h4, h5, h6 {
font-family: helvetica, monaco, "MS Sans Serif", arial, sans-serif;
font-weight: bold; font-style: normal;
}
h1 { color: #900; background-color: transparent; text-align: right; }
h3 { color: #333; background-color: transparent; }
td.RFCbug {
font-size: x-small; text-decoration: none;
width: 30px; height: 30px; padding-top: 2px;
text-align: justify; vertical-align: middle;
background-color: #000;
}
td.RFCbug span.RFC {
font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
font-weight: bold; color: #666;
}
td.RFCbug span.hotText {
font-family: charcoal, monaco, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
font-weight: normal; text-align: center; color: #FFF;
}
table.TOCbug { width: 30px; height: 15px; }
td.TOCbug {
text-align: center; width: 30px; height: 15px;
color: #FFF; background-color: #900;
}
td.TOCbug a {
font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, sans-serif;
font-weight: bold; font-size: x-small; text-decoration: none;
color: #FFF; background-color: transparent;
}
td.header {
font-family: arial, helvetica, sans-serif; font-size: x-small;
vertical-align: top; width: 33%;
color: #FFF; background-color: #666;
}
td.author { font-weight: bold; font-size: x-small; margin-left: 4em; }
td.author-text { font-size: x-small; }
/* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */
a.info {
/* This is the key. */
position: relative;
z-index: 24;
text-decoration: none;
}
a.info:hover {
z-index: 25;
color: #FFF; background-color: #900;
}
a.info span { display: none; }
a.info:hover span.info {
/* The span will display just on :hover state. */
display: block;
position: absolute;
font-size: smaller;
top: 2em; left: -5em; width: 15em;
padding: 2px; border: 1px solid #333;
color: #900; background-color: #EEE;
text-align: left;
}
a { font-weight: bold; }
a:link { color: #900; background-color: transparent; }
a:visited { color: #633; background-color: transparent; }
a:active { color: #633; background-color: transparent; }
p { margin-left: 2em; margin-right: 2em; }
p.copyright { font-size: x-small; }
p.toc { font-size: small; font-weight: bold; margin-left: 3em; }
table.toc { margin: 0 0 0 3em; padding: 0; border: 0; vertical-align: text-top; }
td.toc { font-size: small; font-weight: bold; vertical-align: text-top; }
ol.text { margin-left: 2em; margin-right: 2em; }
ul.text { margin-left: 2em; margin-right: 2em; }
li { margin-left: 3em; }
/* RFC-2629 <spanx>s and <artwork>s. */
em { font-style: italic; }
strong { font-weight: bold; }
dfn { font-weight: bold; font-style: normal; }
cite { font-weight: normal; font-style: normal; }
tt { color: #036; }
tt, pre, pre dfn, pre em, pre cite, pre span {
font-family: "Courier New", Courier, monospace; font-size: small;
}
pre {
text-align: left; padding: 4px;
color: #000; background-color: #CCC;
}
pre dfn { color: #900; }
pre em { color: #66F; background-color: #FFC; font-weight: normal; }
pre .key { color: #33C; font-weight: bold; }
pre .id { color: #900; }
pre .str { color: #000; background-color: #CFF; }
pre .val { color: #066; }
pre .rep { color: #909; }
pre .oth { color: #000; background-color: #FCF; }
pre .err { background-color: #FCC; }
/* RFC-2629 <texttable>s. */
table.all, table.full, table.headers, table.none {
font-size: small; text-align: center; border-width: 2px;
vertical-align: top; border-collapse: collapse;
}
table.all, table.full { border-style: solid; border-color: black; }
table.headers, table.none { border-style: none; }
th {
font-weight: bold; border-color: black;
border-width: 2px 2px 3px 2px;
}
table.all th, table.full th { border-style: solid; }
table.headers th { border-style: none none solid none; }
table.none th { border-style: none; }
table.all td {
border-style: solid; border-color: #333;
border-width: 1px 2px;
}
table.full td, table.headers td, table.none td { border-style: none; }
hr { height: 1px; }
hr.insert {
width: 80%; border-style: none; border-width: 0;
color: #CCC; background-color: #CCC;
}
--></style>
</head>
<body>
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<table summary="layout" width="66%" border="0" cellpadding="0" cellspacing="0"><tr><td><table summary="layout" width="100%" border="0" cellpadding="2" cellspacing="1">
<tr><td class="header">OAuth Working Group</td><td class="header">M. Jones</td></tr>
<tr><td class="header">Internet-Draft</td><td class="header">Microsoft</td></tr>
<tr><td class="header">Intended status: Standards Track</td><td class="header">J. Bradley</td></tr>
<tr><td class="header">Expires: January 30, 2014</td><td class="header">Ping Identity</td></tr>
<tr><td class="header"> </td><td class="header">N. Sakimura</td></tr>
<tr><td class="header"> </td><td class="header">NRI</td></tr>
<tr><td class="header"> </td><td class="header">July 29, 2013</td></tr>
</table></td></tr></table>
<h1><br />JSON Web Token (JWT)<br />draft-ietf-oauth-json-web-token-11</h1>
<h3>Abstract</h3>
<p>
JSON Web Token (JWT) は2者間でやりとりされるコンパクトで URL-safe なクレームの表現方法である.
JWT に含まれるクレームは JavaScript Object Notation (JSON) オブジェクトとしてエンコードされ, JSON Web Signature (JWS) のペイロードや JSON Web Encryption (JWE) の平文として利用される.
JWS や JWE とともに用いることで, クレームに対してデジタル署名や MAC を付与と暗号化の両方を行うことが可能となる.
</p>
<p>
JWT の推奨される発音は, 英単語の "jot" と同じである.
</p>
<h3>Status of this Memo</h3>
<p>
This Internet-Draft is submitted in full
conformance with the provisions of BCP 78 and BCP 79.</p>
<p>
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 http://datatracker.ietf.org/drafts/current/.</p>
<p>
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any time.
It is inappropriate to use Internet-Drafts as reference material or to cite
them other than as “work in progress.”</p>
<p>
This Internet-Draft will expire on January 30, 2014.</p>
<h3>Copyright Notice</h3>
<p>
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.</p>
<p>
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.</p>
<a name="toc"></a><br /><hr />
<h3>Table of Contents</h3>
<p class="toc">
<a href="#Introduction">1.</a>
はじめに<br />
<a href="#NotationalConventions">1.1.</a>
要求記法および規則<br />
<a href="#Terminology">2.</a>
用語集<br />
<a href="#Overview">3.</a>
JSON Web Token (JWT) 概要<br />
<a href="#ExampleJWT">3.1.</a>
JWTの例<br />
<a href="#Claims">4.</a>
JWTクレーム<br />
<a href="#ReservedClaimName">4.1.</a>
予約済クレーム名<br />
<a href="#issDef">4.1.1.</a>
"iss" (Issuer) クレーム<br />
<a href="#subDef">4.1.2.</a>
"sub" (Subject) クレーム<br />
<a href="#audDef">4.1.3.</a>
"aud" (Audience) クレーム<br />
<a href="#expDef">4.1.4.</a>
"exp" (Expiration Time) クレーム<br />
<a href="#nbfDef">4.1.5.</a>
"nbf" (Not Before) クレーム<br />
<a href="#iatDef">4.1.6.</a>
"iat" (Issued At) クレーム<br />
<a href="#jtiDef">4.1.7.</a>
"jti" (JWT ID) クレーム<br />
<a href="#typDef">4.1.8.</a>
"typ" (Type) クレーム<br />
<a href="#PublicClaimName">4.2.</a>
パブリッククレーム名<br />
<a href="#PrivateClaimName">4.3.</a>
プライベートクレーム名<br />
<a href="#Header">5.</a>
JWT ヘッダ<br />
<a href="#typHdrDef">5.1.</a>
"typ" (Type) ヘッダ・パラメータ<br />
<a href="#ctyHdrDef">5.2.</a>
"cty" (Content Type) ヘッダ・パラメータ<br />
<a href="#ClaimsAsHeaders">5.3.</a>
ヘッダ・パラメータとしてクレームを複製する<br />
<a href="#Plaintext">6.</a>
プレーンテキストJWT<br />
<a href="#ExamplePlaintextJWT">6.1.</a>
プレーンテキストJWTの例<br />
<a href="#Validating">7.</a>
JWTを作成および検証するためのルール<br />
<a href="#StringComparison">7.1.</a>
文字列の比較規則<br />
<a href="#Algorithms">8.</a>
暗号化アルゴリズム<br />
<a href="#IANA">9.</a>
IANA Considerations<br />
<a href="#JWTClaimsReg">9.1.</a>
JSON Web トークンクレームレジストリ<br />
<a href="#ClaimsTemplate">9.1.1.</a>
レジストリテンプレート<br />
<a href="#ClaimsContents">9.1.2.</a>
初期レジストリコンテンツ<br />
<a href="#URNReg">9.2.</a>
Sub-Namespace Registration of urn:ietf:params:oauth:token-type:jwt<br />
<a href="#URNContents">9.2.1.</a>
レジストリコンテンツ<br />
<a href="#TypReg">9.3.</a>
JSON Web Signature and Encryption Type Values Registration<br />
<a href="#TypContents">9.3.1.</a>
レジストリコンテンツ<br />
<a href="#MediaReg">9.4.</a>
Media Type Registration<br />
<a href="#MediaContents">9.4.1.</a>
レジストリコンテンツ<br />
<a href="#HdrReg">9.5.</a>
JWEヘッダパラメータの登録<br />
<a href="#HdrContents">9.5.1.</a>
レジストリコンテンツ<br />
<a href="#Security">10.</a>
Security Considerations<br />
<a href="#rfc.references1">11.</a>
References<br />
<a href="#rfc.references1">11.1.</a>
Normative References<br />
<a href="#rfc.references2">11.2.</a>
Informative References<br />
<a href="#rfc.references3">11.3.</a>
翻訳プロジェクト<br />
<a href="#JWTExamples">Appendix A.</a>
JWT Examples<br />
<a href="#EncryptedJWTExample">A.1.</a>
暗号化されたJWTの例<br />
<a href="#NestedJWTExample">A.2.</a>
入れ子 JWT の例<br />
<a href="#SAMLRelationship">Appendix B.</a>
JWTとSAMLアサーションの関係<br />
<a href="#SWTRelationship">Appendix C.</a>
JWTとシンプル・ウェブ・トークン (SWT) の関係<br />
<a href="#Acknowledgements">Appendix D.</a>
Acknowledgements<br />
<a href="#History">Appendix E.</a>
Document History<br />
<a href="#Translator">Appendix F.</a>
翻訳者<br />
<a href="#rfc.authors">§</a>
Authors' Addresses<br />
</p>
<br clear="all" />
<a name="Introduction"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.1"></a><h3>1.
はじめに</h3>
<p>
JSON Web Token(JWT)はHTTP認証ヘッダやURIクエリパラメータなどスペースに制約のある環境を意図したコンパクトな表現形式である.
JWTは, クレームをJSON Web Signature(JWS)<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>のペイロードや
JSON Web Encryption(JWE)<a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>のプレーンテキストとなるJavaScript Object Notation(JSON)<a class='info' href='#RFC4627'>[RFC4627]<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a>オブジェクトとしてエンコードし, クレームに対するデジタル署名やMACと暗号化の両方を可能にする.
JWTは常にJWSのコンパクトシリアライゼーションまたはJWS Compact Serializationを利用して表現される.
</p>
<p>
JWTの推奨される発音は, 英単語の"jot"と同じである.
</p>
<a name="NotationalConventions"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.1.1"></a><h3>1.1.
要求記法および規則</h3>
<p>
本文書で用いられる各キーワード「MUST (しなければならない) 」, 「MUST NOT (してはならない) 」, 「REQUIRED (必須である) 」, 「SHALL (するものとする) 」, 「SHALL NOT (しないものとする) 」,
「SHOULD (すべきである) 」, 「SHOULD NOT (すべきではない) 」, 「RECOMMENDED (推奨される) 」, 「MAY (してもよい) 」, 「OPTIONAL (任意である) 」は Key words for use in RFCs to Indicate Requirement Levels<a class='info' href='#RFC2119'>[RFC2119]<span> (</span><span class='info'>Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.</span><span>)</span></a>で述べられている通りに解釈されるべきものである.
</p>
<a name="Terminology"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.2"></a><h3>2.
用語集</h3>
<p>
</p>
<blockquote class="text"><dl>
<dt>JSON Web Token (JWT)</dt>
<dd>
クレームのセットをJSONオブジェクトとして文字列表現にしてJWSやJWEにエンコードすることで, クレームに対するデジタル署名やMACと暗号化の両方が可能になる.
</dd>
<dt>base64urlエンコーディング</dt>
<dd>
<a class='info' href='#RFC4648'>RFC 4648<span> (</span><span class='info'>Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” October 2006.</span><span>)</span></a> [RFC4648]の節 5で説明されているURLおよびファイル名として安全なBase64エンコーディングであり, 節 3.2で許可されているように (URLとして安全ではない) '=' パディング文字が省略されている.
(パディングなしのbase64urlエンコーディングの導入についての注意事項は<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>のAppendix Cを参照のこと)
</dd>
<dt>JSONテキストオブジェクト</dt>
<dd>
UTF-8 <a class='info' href='#RFC3629'>[RFC3629]<span> (</span><span class='info'>Yergeau, F., “UTF-8, a transformation format of ISO 10646,” November 2003.</span><span>)</span></a>エンコード済テキストでありJSONオブジェクトを表現する.
JSONオブジェクトの構文は<a class='info' href='#RFC4627'>[RFC4627]<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a>の節 2.2で定義されている.
</dd>
<dt>JWTヘッダ</dt>
<dd>
JWTに適用される暗号化オペレーションについて記述しているJSONテキストオブジェクト.
JWTがデジタル署名もしくはMACされている場合, JWTヘッダはJWSヘッダである.
JWTが暗号化されている場合, JWTヘッダはJWEヘッダである.
</dd>
<dt>ヘッダ・パラメータ名</dt>
<dd>
JWTヘッダのメンバの名前.
</dd>
<dt>ヘッダ・パラメータ値</dt>
<dd>
JWTヘッダのメンバの値.
</dd>
<dt>JWTクレームセット</dt>
<dd>
JWTによって伝搬されるクレームを含むJSONテキストオブジェクト.
</dd>
<dt>クレーム</dt>
<dd>
ある主体に関するひとまとまりの情報.
クレームはクレーム名とクレーム値から構成される名前と値のペアで表現される.
</dd>
<dt>クレーム名</dt>
<dd>
クレーム表現の中の名前の部分.
クレーム名は常に文字列である.
</dd>
<dt>クレーム値</dt>
<dd>
クレーム表現の中の値の部分.
クレーム値は任意のJSON値であり得る.
</dd>
<dt>エンコード済JWTヘッダ</dt>
<dd>
JWTヘッダをbase64urlエンコードしたもの.
</dd>
<dt>入れ子にされたJWT</dt>
<dd>
署名と暗号化の両方が適用されたJWTに入れ子にされているJWT.
入れ子にされたJWTでは, JWTは内包されたJWS/JWEのペイロード/平文の値として利用される.
</dd>
<dt>平文のJWT</dt>
<dd>
完全性保護も暗号化もされていないクレームからなるJWT.
</dd>
<dt>耐衝突性を持つ名前空間</dt>
<dd>
他の名前空間とほとんど衝突しない様に割り当てられた名前空間.
例えば, 耐衝突性は名前空間の一部の管理を移譲したり, 耐衝突性を持つ名前の割り付け機能の利用によって達成することが出来る.
耐衝突性を持つ名前空間の例は次のものを含んでいる.
ドメイン名, ITU-T X.600とX.670推奨シリーズで定義されているオブジェクト識別子 (OID), ユニバーサル・ユニーク識別子 (UUID)<a class='info' href='#RFC4122'>[RFC4122]<span> (</span><span class='info'>Leach, P., Mealling, M., and R. Salz, “A Universally Unique IDentifier (UUID) URN Namespace,” July 2005.</span><span>)</span></a>.
管理を移譲された名前空間を利用する場合, 名前を定義する人は定義するための名前空間の一部を管理していることを保証するために合理的な予防措置を講ずる必要がある.
</dd>
<dt>StringOrURI</dt>
<dd>
任意の文字列を使っても良い一方で, ":"を含むどのような値もURI<a class='info' href='#RFC3986'>[RFC3986]<span> (</span><span class='info'>Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</span><span>)</span></a>でなければならない, という追加の要求があるJSON文字列の値.
StringOrURIの値には変形や正規化が適用されず, 大文字・小文字を区別する文字列として比較される.
</dd>
<dt>IntDate</dt>
<dd>
1970-01-01T0:0:0Z UTCから指定されたUTCの日付/時刻まで秒の数を表わすJSON数値.
日付/時刻に関する詳細は<a class='info' href='#RFC3339'>RFC 3339<span> (</span><span class='info'>Klyne, G., Ed. and C. Newman, “Date and Time on the Internet: Timestamps,” July 2002.</span><span>)</span></a> [RFC3339]の全般と, 特にUTCを参照すること.
</dd>
</dl></blockquote><p>
</p>
<a name="Overview"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.3"></a><h3>3.
JSON Web Token (JWT) 概要</h3>
<p>
JWTは, JWSとJWE構造の両方の中にエンコードされるJSONオブジェクトとしてクレームのセットを表す.
このJSONオブジェクトはJWTクレーム・セットである.
<a class='info' href='#RFC4627'>RFC 4627<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a> [RFC4627]の節 2.2の通り, JSONオブジェクトは0以上の名前/値のペア(もしくはメンバ)から構成され, その名前は文字列であり値は任意のJSON値である.
これらのメンバはJWTによって表現されるクレームである.
</p>
<p>
JWTクレームセットの中のメンバ名はクレーム名として参照される. 対応する値はクレーム値として参照される.
</p>
<p>
JWTヘッダの内容は, JWTクレーム・セットに適用される暗号化オペレーションについて記述している.
JWTヘッダがJWSヘッダである場合, そのJWTクレーム・セットをJWSペイロードとしたJWSとして表現され, クレームにはデジタル署名もしくはMACが付与される.
JWTヘッダがJWEヘッダである場合, そのJWTはJWTクレーム・セットをJWEの平文入力としたJWEとして表現され, クレームは暗号化される.
JWTはJWEやJWS構造の中に含まれ入れ子のJWTを構成することができ, 単一のJWTに対して署名や暗号化を繰り返し実施することができる.
</p>
<p>
JWTはピリオド('.')によって連結された一連のURL-safeな文字列として表現される.
それぞれのパートはbase64urlでエンコード済の値で構成される.
JWTの中のパートの数は, JWSコンパクト・シリアライゼーション表現のJWSもしくはJWS Compact Serialization表現のJWEのどちらとして利用されているかに依存する.
</p>
<a name="ExampleJWT"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.3.1"></a><h3>3.1.
JWTの例</h3>
<p>
下記はJWTヘッダの例である.
このヘッダは, エンコード済オブジェクトがJSON Web Token (JWT) であり, そのJWTにはHMAC SHA-256アルゴリズムを使ってMACが付与されていることを表している.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"typ":"JWT",
"alg":"HS256"}
</pre></div>
<p>
JWTヘッダのUTF-8表現のオクテットをbase64urlエンコードすると, このエンコード済JWSヘッダの値が作られ, それはエンコードされたJWTヘッダとして使われる.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
</pre></div>
<p>
下記がJWTクレーム・セットの例である.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}
</pre></div>
<p>
下記のオクテット配列は, 上記JWTクレーム・セットをUTF-8で表現したものであり, JWSペイロードである.
</p>
<p>
[123, 34, 105, 115, 115, 34, 58, 34, 106, 111, 101, 34, 44, 13, 10, 32, 34, 101, 120, 112, 34, 58, 49, 51, 48, 48, 56, 49, 57, 51, 56, 48, 44, 13, 10, 32, 34, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 99, 111, 109, 47, 105, 115, 95, 114, 111, 111, 116, 34, 58, 116, 114, 117, 101, 125]
</p>
<p>
JWSペイロードをbase64urlエンコードすると, このエンコード済JWSペイロードが作り出せる.
(改行は掲載上の都合による)
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly
9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
</pre></div>
<p>
エンコード済のJWSヘッダとエンコード済のJWSペイロードをHMAC SHA-256アルゴリズムで署名し, <a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>に指定された形で署名をbase64urlエンコードすると, このエンコード済JWS署名を作り出せる.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
</pre></div>
<p>
これら3つのパートをこの順に各パートの間をピリオド('.')で連結すると完全なJWTが作り出せる.
(表示上の都合で改行を含む)
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
</pre></div>
<p>
この計算についての詳細は<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>のAppendix A.1に記載されている.
暗号化されたJWTについては<a class='info' href='#EncryptedJWTExample'>Appendix A.1<span> (</span><span class='info'>暗号化されたJWTの例</span><span>)</span></a>を参照のこと.
</p>
<a name="Claims"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4"></a><h3>4.
JWTクレーム</h3>
<p>
JWT クレームセットは JSON オブジェクトであり, それぞれのメンバは JWT として送られるクレームである.
JWT クレームセット内のクレーム名は一意でなければならない(MUST).
受信者はクレーム名が重複した JWT を拒否するか, あるいは JSON パーサーを ECMAScript 5.1 <a class='info' href='#ECMAScript'>[ECMAScript]<span> (</span><span class='info'>Ecma International, “ECMAScript Language Specification, 5.1 Edition,” June 2011.</span><span>)</span></a> の節 15.12 (JSON オブジェクト) で定義されているとおり語彙的に最後の重複メンバ名だけを返却する JSON パーサを利用しなければならない(MUST).
</p>
<p>
有効な JWT が含まねばならないクレームはコンテキストに依存するため, 本仕様の範囲外とする.
JWT を実装するアプリケーションごとに, クレームを理解する方法と処理方法について定めることになる.
アプリケーションがこのような要件を定めていないクレームについては, それが理解不可能な場合には無視すること (SHOULD).
</p>
<p>
JWT クレーム名には予約済クレーム名とパブリッククレーム名, プライベートクレーム名の3つのクラスが定義されている.
</p>
<a name="ReservedClaimName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1"></a><h3>4.1.
予約済クレーム名</h3>
<p>
次のクレーム名は予約済である.
以下に定義されているクレームは, いずれも必須とされることを想定されてはいないが, 有用で相互運用性のあるクレームとなることを期待して提供されている.
JWT は表現がコンパクトになることを目的としているため, すべてのクレーム名は短くなっている.
追加の予約済クレーム名は <a class='info' href='#JWTClaimsReg'>Section 9.1<span> (</span><span class='info'>JSON Web トークンクレームレジストリ</span><span>)</span></a> の IANA JSON Web トークンクレームレジストリにしたがって定義することができる.
</p>
<a name="issDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.1"></a><h3>4.1.1.
"iss" (Issuer) クレーム</h3>
<p>
<tt>iss</tt>(issuer)クレームは JWT の発行者の識別子である.
このクレームの処理は一般的にアプリケーション固有である.
<tt>iss</tt> の値は文字列あるいは StringOrURI 値である.
このクレームの使用は任意である(OPTIONAL).
</p>
<a name="subDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.2"></a><h3>4.1.2.
"sub" (Subject) クレーム</h3>
<p>
<tt>sub</tt>(subject)クレームは JWT の主語となる主体の識別子である.
JWT に含まれるクレームは, 通常 subject について述べたものである.
このクレームの処理は一般的にアプリケーション固有である.
<tt>sub</tt> の値は文字列あるいは StringOrURI 値である.
このクレームの使用は任意であるOPTIONAL).
</p>
<a name="audDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.3"></a><h3>4.1.3.
"aud" (Audience) クレーム</h3>
<p>
<tt>aud</tt>(audience)クレームは JWT を利用することが想定された主体の識別子一覧である.
JWT を処理するために意図されたそれぞれの対象は, オーディエンスクレームの値に自身の識別子が含まれていることを確認し, <tt>aud</tt> に自身の識別子が含まれない場合はその JWT の処理を拒否しなければならない(MUST).
一般的な場合において, <tt>aud</tt> クレームの値は文字列あるいは StringOrURI 値の配列である.
JWT が単一のオーディエンスから構成される場合に限って, <tt>aud</tt> の値は単一の文字列あるいは StringOrURI 値でもよい(MAY).
オーディエンス値の解釈は一般的にアプリケーション固有である.
このクレームの使用は任意である(OPTIONAL).
</p>
<a name="expDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.4"></a><h3>4.1.4.
"exp" (Expiration Time) クレーム</h3>
<p>
<tt>exp</tt> (expiration time) クレームは, JWT の有効期限を示す.
これ以降はその JWT を処理してはならない (MUST NOT).
<tt>exp</tt> クレームを処理する際には, <tt>exp</tt> が現在時刻以前でないことを確認しなければならない (MUST).
実装者はクロック・キューを考慮していくらかの小さな 余地 (通常は数分以上はない) を与えてもよい (MAY).
このクレームの値は IntDate 値でなければならない(MUST).
このクレームの使用は任意である (OPTIONAL).
</p>
<a name="nbfDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.5"></a><h3>4.1.5.
"nbf" (Not Before) クレーム</h3>
<p>
<tt>nbf</tt> (not before) クレームは, JWT が有効になる日時を示す.
これ以前にその JWT を処理してはならない (MUST NOT).
<tt>nbf</tt> クレームを処理する際には, <tt>exp</tt> が現在時刻以前であることを確認しなければならない (MUST).
実装者はクロック・キューを考慮していくらかの小さな余地 (通常は数分以上はない) を与えてもよい (MAY).
その値は IntDate 値でなければならない (MUST).
このクレームの使用は任意である (OPTIONAL).
</p>
<a name="iatDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.6"></a><h3>4.1.6.
"iat" (Issued At) クレーム</h3>
<p>
<tt>iat</tt> (issued at) クレームは, JWT を発行した時刻を示す.
このクレームは JWT の発行されてからの経過時間を求める際に利用可能である.
その値は IntDate 値でなければならない (MUST).
このクレームの使用は任意である (OPTIONAL).
</p>
<a name="jtiDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.7"></a><h3>4.1.7.
"jti" (JWT ID) クレーム</h3>
<p>
<tt>jti</tt> (JWT ID) クレームは, JWT のための一意な識別子を提供する.
その識別子の値は, 重複確率が無視できるほど十分低いことを保証できる方法で割り当てられなければならない (MUST).
<tt>jti</tt> クレームは, JWT がリプレイされることを防ぐことに利用することができる.
<tt>jti</tt> の値は大文字と小文字を区別する文字列である.
このクレームの使用は任意である (OPTIONAL).
</p>
<a name="typDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.8"></a><h3>4.1.8.
"typ" (Type) クレーム</h3>
<p>
<tt>typ</tt> (type) クレームは, アプリケーションにとって有用なコンテキストにおいて, アプリケーション固有の方法で, JWT クレームセットのコンテンツのタイプを宣言するために利用できる (MAY).
<tt>typ</tt> の値は, 大文字と小文字を区別する文字列である.
このクレームの使用は任意である (OPTIONAL).
</p>
<p>
<tt>typ</tt> クレーム値には, <tt>typ</tt> ヘッダパラメータと同じ値空間および同じ規則が適用される.
</p>
<a name="PublicClaimName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.2"></a><h3>4.2.
パブリッククレーム名</h3>
<p>
クレーム名は JWT の利用者によって自由に定義することができる.
しかしながら, 衝突をさけるために, いくつかのクレーム名は IANA JSON Web トークンクレームレジストリ <a class='info' href='#JWTClaimsReg'>Section 9.1<span> (</span><span class='info'>JSON Web トークンクレームレジストリ</span><span>)</span></a> に登録するか, 耐衝突性を持つ名前空間を含むパブリック名にすべきである (SHOULD).
それぞれの場合において, 名前あるいは値の定義者は, クレーム名を定義するために用いる名前空間の一部が自身の管理下にあることを保証できるよう, 妥当な措置を講じる必要がある.
</p>
<a name="PrivateClaimName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.3"></a><h3>4.3.
プライベートクレーム名</h3>
<p>
JWT の作成者および利用者は, 相互に同意のもとで, 予約済クレーム名 <a class='info' href='#ReservedClaimName'>Section 4.1<span> (</span><span class='info'>予約済クレーム名</span><span>)</span></a> でもパブリッククレーム名 <a class='info' href='#PublicClaimName'>Section 4.2<span> (</span><span class='info'>パブリッククレーム名</span><span>)</span></a> でもないプライベートクレーム名を用いてもよい (MAY).
パブリッククレーム名とは異なり, プライベートクレーム名は衝突の可能性があり, 慎重に使用する必要がある.
</p>
<a name="Header"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5"></a><h3>5.
JWT ヘッダ</h3>
<p>
JWTヘッダ内のJSONオブジェクトのメンバは, JWTに適用される暗号化オペレーション, および任意でJWTの追加プロパティを表現している.
JWTヘッダ内のメンバ名はヘッダ・パラメータ名として参照される.
それらの名前はユニークである必要があり (MUST) ,
受信者は重複するヘッダ・パラメータ名を持つJWTを拒否するか, ECMAScript 5.1 <a class='info' href='#ECMAScript'>[ECMAScript]<span> (</span><span class='info'>Ecma International, “ECMAScript Language Specification, 5.1 Edition,” June 2011.</span><span>)</span></a> の節 15.12 (JSONオブジェクト) に指定されているとおり語彙的に最後の重複メンバ名だけを返却するJSONパーサを利用しなければならない (MUST).
対応する値はヘッダ・パラメータ値として参照される.
</p>
<p>
JWSヘッダ・パラメータは<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>で定義されている.
JWEヘッダ・パラメータは<a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>で定義されている.
更に本仕様は, JWTがJWSである場合とJWTがJWEである場合の両方のケースにおいて続くヘッダ・パラメータが利用されることを明示する.
</p>
<a name="typHdrDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.1"></a><h3>5.1.
"typ" (Type) ヘッダ・パラメータ</h3>
<p>
<tt>typ</tt> (type) ヘッダ・パラメータは, アプリケーションにとって有用なコンテキストにおいて, アプリケーション固有の方法で, このJWTの形式を記述するために利用してもよい (MAY).
このパラメータはJWTの処理に影響を及ぼさない.
もしパラメータが存在した場合, その値はそのオブジェクトがJWTであることを示すため, <tt>JWT</tt>もしくは<tt>urn:ietf:params:oauth:token-type:jwt</tt>を指定することが推奨される (RECOMMENDED).
<tt>typ</tt>の値は大文字小文字を区別する文字列である.
このヘッダ・パラメータの利用は任意である (OPTIONAL).
</p>
<a name="ctyHdrDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.2"></a><h3>5.2.
"cty" (Content Type) ヘッダ・パラメータ</h3>
<p>
<tt>cty</tt> (content type) ヘッダ・パラメータはJWTの構造情報を記述するために用いられる.
値は文字列でなければならない (MUST).
</p>
<p>
入れ子の署名/暗号化オペレーションが使用されない通常時, このヘッダ・パラメータの使用は推奨されない (NOT RECOMMENDED).
入れ子の署名/暗号化オペレーションが使用される場合, このヘッダ・パラメータの使用は必須である (REQUIRED).
後者の場合, このJWTの中に入れ子となるJWTが含まれることを示すため, 値は<tt>JWT</tt>でなければならない (MUST).
入れ子のJWTの例は<a class='info' href='#NestedJWTExample'>Appendix A.2<span> (</span><span class='info'>入れ子 JWT の例</span><span>)</span></a>を参照のこと.
</p>
<p>
<tt>cty</tt>ヘッダ・パラメータ値には, <tt>typ</tt> ヘッダパラメータと同じ値空間および同じ規則が適用される.
</p>
<a name="ClaimsAsHeaders"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.3"></a><h3>5.3.
ヘッダ・パラメータとしてクレームを複製する</h3>
<p>
暗号化されたJWTを使ういくつかのアプリケーションでは, 暗号化されていない表現のいくつかのクレームを持つことは有用である.
例えばこれはアプリケーションがJWTを復号する前にそれををどのように処理するかを決定するためのルールを処理する際に使用される.
</p>
<p>
本仕様は, JWE の JWT クレームセット中に存在するクレームが, アプリケーションの必要に応じてヘッダパラメータとしても重複して存在することを許可する.
もしそのように複製されたクレームが存在する場合, それらを受け取るアプリケーションはそれらの値が同一であることを確認すべきである (SHOULD).
JWTのヘッダ・パラメータ値として複製されるクレームが, 暗号化せずに送信しても安全なものであることを保証するのは, アプリケーションの責任である.
</p>
<p>
本仕様はそれらを必要とするアプリケーションのために, 暗号化されたJWTの中のクレームの暗号化されていない複製を提供する目的で<tt>iss</tt> (issuer), <tt>sub</tt> (subject), <tt>aud</tt> (audience) ヘッダ・パラメータ名を予約する.
他の仕様においても同様に必要があればヘッダ・パラメータ名として予約済クレーム名として他の名前を予約してもよい (MAY).
</p>
<a name="Plaintext"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.6"></a><h3>6.
プレーンテキストJWT</h3>
<p>
署名や暗号化以外の方法でJWTコンテンツが保護されるユースケースをサポートするために, 署名と暗号化の両方なしにJWTを生成することも可能とする (MAY).
プレーンテキストJWTはJSON Web Algorithms (JWA)で定義されたJWSのalgヘッダパラメータにnoneを使用したJWSであり, JWS署名値は空文字列となる.
</p>
<a name="ExamplePlaintextJWT"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.6.1"></a><h3>6.1.
プレーンテキストJWTの例</h3>
<p>
次の例ではJWTヘッダはエンコード済オブジェクトがプレーンテキストJWTであることを宣言する.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"alg":"none"}
</pre></div>
<p>
JWTヘッダのUTF-8表現のオクテットをbase64urlエンコーディングし,
このエンコード済JWTヘッダを得る.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJhbGciOiJub25lIn0
</pre></div>
<p>
次はJWTクレームセットの例である.
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}
</pre></div>
<p>
JWTクレームセットのUTF-8表現のオクテットをbase64urlエンコードし,
このエンコード済JWSペイロードを得る.
(改行は掲載上の都合による)
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
</pre></div>
<p>
エンコード済JWS署名は空文字列である.
</p>
<p>
パーツ間をピリオド文字('.') でこの順序で連結することで, 完全なJWTとなる.
(表示目的のための改行を含む)
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJhbGciOiJub25lIn0
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
</pre></div>
<a name="Validating"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.7"></a><h3>7.
JWTを作成および検証するためのルール</h3>
<p>
JWTを作成するために, 次の手順を実行しなければならない(MUST).
手順の入力と出力の間に依存関係が存在しない場合には, 手順の順序は重要ではない.
</p>
<ol class="text">
<li>
必要なクレームを含むJWTクレームセットを作成する.
なお, 空白は表現の中で明確に許容されており, エンコーディングの前に正規化を実行する必要はない.
</li>
<li>
メッセージをJWTクレームセットのUTF-8表現のオクテットとする.
</li>
<li>
必要なヘッダパラメータを含むJWTヘッダを作成する.
JWTは, <a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>仕様, または<a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>仕様に従わなければならない(MUST).
なお, 空白は表現の中で明確に許容されており, エンコーディングの前に正規化を実行する必要はない.
</li>
<li>
JWTヘッダのUTF-8表現のオクテットをbase64urlエンコードする.
これをエンコード済JWTヘッダとする,
</li>
<li>
当該のJWTがJWSかJWEかによって2つのケースがある.
<ul class="text">
<li>
JWTがJWSの場合, JWSヘッダとしてJWTヘッダを, JWSペイロードとしてメッセージを使用してJWSを作成する.
JWSを作成するために<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>で明記されたすべての手順に従わなければならない(MUST).
</li>
<li>
JWTがJWEの場合, JWEヘッダとしてJWTヘッダを, JWEプレーンテキストとしてメッセージを使用してJWEを作成する.
JWEを作成するために<a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>で明記されたすべての手順に従わなければならない(MUST)
</li>
</ul>
</li>
<li>
入れ子にされた署名または暗号化処理を行う場合は, JWSもしくはJWEをメッセージとしてステップ3に戻る.
この際, そのステップで新たに作られる JWTヘッダの<tt>cty</tt> (content type) ヘッダ値には, <tt>JWT</tt>を指定する.
</li>
<li>
それ以外の場合, 結果として生成されるJWTはJWSまたはJWEとなる.
</li>
</ol><p>
</p>
<p>
JWTを検証する際, 次の手順を取らねばならない(MUST).
手順の入力と出力の間に依存関係が存在しない場合には, 手順の順序は重要ではない.
列挙されている手順のいずれかが失敗した場合, そのJWTの処理はリジェクトされねばならない(MUST).
</p>
<p>
</p>
<ol class="text">
<li>
JWTは少なくとも一つのピリオド('.')を含まねばならない(MUST)
</li>
<li>
エンコード済JWTヘッダは最初のピリオド(',')の前のJWTの一部とする.
</li>
<li>
エンコード済JWTヘッダは, パディング文字を使用しないという本仕様が定める制約に従い, base64urlデコードできなければならない(MUST).
</li>
<li>
生成されたJWTヘッダは, <a class='info' href='#RFC4627'>RFC 4627<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a> [RFC4627]に準拠した, 完全に有効なJSON構文でなければならない(MUST).
</li>
<li>
生成されたJWTヘッダは, その構文と意味が理解可能で且つサポートされ, 理解できないとき無視されるパラメータと値のみを含むように検証されなければならない (MUST).
</li>
<li>
<tt>alg</tt> (アルゴリズム) ヘッダの値, およびオプションで<tt>enc</tt> (暗号化方式) ヘッダの値 (存在する場合) を検証し, そのJWT が JWS なのか JWE なのかを判別する.
</li>
<li>
JWTがJWSかJWEかによって, 2つのケースがある.
<ul class="text">
<li>
JWTがJWSの場合, JWSを検証するために<a class='info' href='#JWS'>[JWS]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” July 2013.</span><span>)</span></a>で指定されたすべての手順に従わなければならない(MUST).
メッセージはbase64urlデコードされたJWSペイロードとなる.
</li>
<li>
JWTがJWEの場合, JWEを検証するために<a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>で指定されたすべての手順に従わなければならない(MUST).
メッセージはJWEプレーンテキストとなる.
</li>
</ul>
</li>
<li>
JWTヘッダが <tt>cty</tt> (content type) の値として <tt>JWT</tt> を持つ場合, このメッセージは入れ子にされた署名または暗号化処理を受けたJWTである.
この場合, メッセージをJWTとして扱い, ステップ1に戻る.
</li>