1684 lines
62 KiB
Plaintext
1684 lines
62 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force (IETF) M. Jones
|
|||
|
Request for Comments: 7519 Microsoft
|
|||
|
Category: Standards Track J. Bradley
|
|||
|
ISSN: 2070-1721 Ping Identity
|
|||
|
N. Sakimura
|
|||
|
NRI
|
|||
|
May 2015
|
|||
|
|
|||
|
|
|||
|
JSON Web Token (JWT)
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This is an Internet Standards Track document.
|
|||
|
|
|||
|
This document is a product of the Internet Engineering Task Force
|
|||
|
(IETF). It represents the consensus of the IETF community. It has
|
|||
|
received public review and has been approved for publication by the
|
|||
|
Internet Engineering Steering Group (IESG). Further information on
|
|||
|
Internet Standards is available in Section 2 of RFC 5741.
|
|||
|
|
|||
|
Information about the current status of this document, any errata,
|
|||
|
and how to provide feedback on it may be obtained at
|
|||
|
http://www.rfc-editor.org/info/rfc7519.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (c) 2015 IETF Trust and the persons identified as the
|
|||
|
document authors. All rights reserved.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
|
|||
|
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 4
|
|||
|
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
|||
|
3. JSON Web Token (JWT) Overview . . . . . . . . . . . . . . . . 6
|
|||
|
3.1. Example JWT . . . . . . . . . . . . . . . . . . . . . . . 7
|
|||
|
4. JWT Claims . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
|||
|
4.1. Registered Claim Names . . . . . . . . . . . . . . . . . 9
|
|||
|
4.1.1. "iss" (Issuer) Claim . . . . . . . . . . . . . . . . 9
|
|||
|
4.1.2. "sub" (Subject) Claim . . . . . . . . . . . . . . . . 9
|
|||
|
4.1.3. "aud" (Audience) Claim . . . . . . . . . . . . . . . 9
|
|||
|
4.1.4. "exp" (Expiration Time) Claim . . . . . . . . . . . . 9
|
|||
|
4.1.5. "nbf" (Not Before) Claim . . . . . . . . . . . . . . 10
|
|||
|
4.1.6. "iat" (Issued At) Claim . . . . . . . . . . . . . . . 10
|
|||
|
4.1.7. "jti" (JWT ID) Claim . . . . . . . . . . . . . . . . 10
|
|||
|
4.2. Public Claim Names . . . . . . . . . . . . . . . . . . . 10
|
|||
|
4.3. Private Claim Names . . . . . . . . . . . . . . . . . . . 10
|
|||
|
5. JOSE Header . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
|||
|
5.1. "typ" (Type) Header Parameter . . . . . . . . . . . . . . 11
|
|||
|
5.2. "cty" (Content Type) Header Parameter . . . . . . . . . . 11
|
|||
|
5.3. Replicating Claims as Header Parameters . . . . . . . . . 12
|
|||
|
6. Unsecured JWTs . . . . . . . . . . . . . . . . . . . . . . . 12
|
|||
|
6.1. Example Unsecured JWT . . . . . . . . . . . . . . . . . . 12
|
|||
|
7. Creating and Validating JWTs . . . . . . . . . . . . . . . . 13
|
|||
|
7.1. Creating a JWT . . . . . . . . . . . . . . . . . . . . . 13
|
|||
|
7.2. Validating a JWT . . . . . . . . . . . . . . . . . . . . 14
|
|||
|
7.3. String Comparison Rules . . . . . . . . . . . . . . . . . 15
|
|||
|
8. Implementation Requirements . . . . . . . . . . . . . . . . . 16
|
|||
|
9. URI for Declaring that Content is a JWT . . . . . . . . . . . 17
|
|||
|
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17
|
|||
|
10.1. JSON Web Token Claims Registry . . . . . . . . . . . . . 17
|
|||
|
10.1.1. Registration Template . . . . . . . . . . . . . . . 18
|
|||
|
10.1.2. Initial Registry Contents . . . . . . . . . . . . . 18
|
|||
|
10.2. Sub-Namespace Registration of
|
|||
|
urn:ietf:params:oauth:token-type:jwt . . . . . . . . . . 19
|
|||
|
10.2.1. Registry Contents . . . . . . . . . . . . . . . . . 19
|
|||
|
10.3. Media Type Registration . . . . . . . . . . . . . . . . 20
|
|||
|
10.3.1. Registry Contents . . . . . . . . . . . . . . . . . 20
|
|||
|
10.4. Header Parameter Names Registration . . . . . . . . . . 20
|
|||
|
10.4.1. Registry Contents . . . . . . . . . . . . . . . . . 21
|
|||
|
11. Security Considerations . . . . . . . . . . . . . . . . . . . 21
|
|||
|
11.1. Trust Decisions . . . . . . . . . . . . . . . . . . . . 21
|
|||
|
11.2. Signing and Encryption Order . . . . . . . . . . . . . . 21
|
|||
|
12. Privacy Considerations . . . . . . . . . . . . . . . . . . . 22
|
|||
|
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 22
|
|||
|
13.1. Normative References . . . . . . . . . . . . . . . . . . 22
|
|||
|
13.2. Informative References . . . . . . . . . . . . . . . . . 23
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Appendix A. JWT Examples . . . . . . . . . . . . . . . . . . . . 26
|
|||
|
A.1. Example Encrypted JWT . . . . . . . . . . . . . . . . . . 26
|
|||
|
A.2. Example Nested JWT . . . . . . . . . . . . . . . . . . . 26
|
|||
|
Appendix B. Relationship of JWTs to SAML Assertions . . . . . . 28
|
|||
|
Appendix C. Relationship of JWTs to Simple Web Tokens (SWTs) . . 28
|
|||
|
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 28
|
|||
|
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
JSON Web Token (JWT) is a compact claims representation format
|
|||
|
intended for space constrained environments such as HTTP
|
|||
|
Authorization headers and URI query parameters. JWTs encode claims
|
|||
|
to be transmitted as a JSON [RFC7159] object that is used as the
|
|||
|
payload of a JSON Web Signature (JWS) [JWS] structure or as the
|
|||
|
plaintext of a JSON Web Encryption (JWE) [JWE] structure, enabling
|
|||
|
the claims to be digitally signed or integrity protected with a
|
|||
|
Message Authentication Code (MAC) and/or encrypted. JWTs are always
|
|||
|
represented using the JWS Compact Serialization or the JWE Compact
|
|||
|
Serialization.
|
|||
|
|
|||
|
The suggested pronunciation of JWT is the same as the English word
|
|||
|
"jot".
|
|||
|
|
|||
|
1.1. Notational Conventions
|
|||
|
|
|||
|
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
|
|||
|
"Key words for use in RFCs to Indicate Requirement Levels" [RFC2119].
|
|||
|
The interpretation should only be applied when the terms appear in
|
|||
|
all capital letters.
|
|||
|
|
|||
|
2. Terminology
|
|||
|
|
|||
|
The terms "JSON Web Signature (JWS)", "Base64url Encoding", "Header
|
|||
|
Parameter", "JOSE Header", "JWS Compact Serialization", "JWS
|
|||
|
Payload", "JWS Signature", and "Unsecured JWS" are defined by the JWS
|
|||
|
specification [JWS].
|
|||
|
|
|||
|
The terms "JSON Web Encryption (JWE)", "Content Encryption Key
|
|||
|
(CEK)", "JWE Compact Serialization", "JWE Encrypted Key", and "JWE
|
|||
|
Initialization Vector" are defined by the JWE specification [JWE].
|
|||
|
|
|||
|
The terms "Ciphertext", "Digital Signature", "Message Authentication
|
|||
|
Code (MAC)", and "Plaintext" are defined by the "Internet Security
|
|||
|
Glossary, Version 2" [RFC4949].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
These terms are defined by this specification:
|
|||
|
|
|||
|
JSON Web Token (JWT)
|
|||
|
A string representing a set of claims as a JSON object that is
|
|||
|
encoded in a JWS or JWE, enabling the claims to be digitally
|
|||
|
signed or MACed and/or encrypted.
|
|||
|
|
|||
|
JWT Claims Set
|
|||
|
A JSON object that contains the claims conveyed by the JWT.
|
|||
|
|
|||
|
Claim
|
|||
|
A piece of information asserted about a subject. A claim is
|
|||
|
represented as a name/value pair consisting of a Claim Name and a
|
|||
|
Claim Value.
|
|||
|
|
|||
|
Claim Name
|
|||
|
The name portion of a claim representation. A Claim Name is
|
|||
|
always a string.
|
|||
|
|
|||
|
Claim Value
|
|||
|
The value portion of a claim representation. A Claim Value can be
|
|||
|
any JSON value.
|
|||
|
|
|||
|
Nested JWT
|
|||
|
A JWT in which nested signing and/or encryption are employed. In
|
|||
|
Nested JWTs, a JWT is used as the payload or plaintext value of an
|
|||
|
enclosing JWS or JWE structure, respectively.
|
|||
|
|
|||
|
Unsecured JWT
|
|||
|
A JWT whose claims are not integrity protected or encrypted.
|
|||
|
|
|||
|
Collision-Resistant Name
|
|||
|
A name in a namespace that enables names to be allocated in a
|
|||
|
manner such that they are highly unlikely to collide with other
|
|||
|
names. Examples of collision-resistant namespaces include: Domain
|
|||
|
Names, Object Identifiers (OIDs) as defined in the ITU-T X.660 and
|
|||
|
X.670 Recommendation series, and Universally Unique IDentifiers
|
|||
|
(UUIDs) [RFC4122]. When using an administratively delegated
|
|||
|
namespace, the definer of a name needs to take reasonable
|
|||
|
precautions to ensure they are in control of the portion of the
|
|||
|
namespace they use to define the name.
|
|||
|
|
|||
|
StringOrURI
|
|||
|
A JSON string value, with the additional requirement that while
|
|||
|
arbitrary string values MAY be used, any value containing a ":"
|
|||
|
character MUST be a URI [RFC3986]. StringOrURI values are
|
|||
|
compared as case-sensitive strings with no transformations or
|
|||
|
canonicalizations applied.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
NumericDate
|
|||
|
A JSON numeric value representing the number of seconds from
|
|||
|
1970-01-01T00:00:00Z UTC until the specified UTC date/time,
|
|||
|
ignoring leap seconds. This is equivalent to the IEEE Std 1003.1,
|
|||
|
2013 Edition [POSIX.1] definition "Seconds Since the Epoch", in
|
|||
|
which each day is accounted for by exactly 86400 seconds, other
|
|||
|
than that non-integer values can be represented. See RFC 3339
|
|||
|
[RFC3339] for details regarding date/times in general and UTC in
|
|||
|
particular.
|
|||
|
|
|||
|
3. JSON Web Token (JWT) Overview
|
|||
|
|
|||
|
JWTs represent a set of claims as a JSON object that is encoded in a
|
|||
|
JWS and/or JWE structure. This JSON object is the JWT Claims Set.
|
|||
|
As per Section 4 of RFC 7159 [RFC7159], the JSON object consists of
|
|||
|
zero or more name/value pairs (or members), where the names are
|
|||
|
strings and the values are arbitrary JSON values. These members are
|
|||
|
the claims represented by the JWT. This JSON object MAY contain
|
|||
|
whitespace and/or line breaks before or after any JSON values or
|
|||
|
structural characters, in accordance with Section 2 of RFC 7159
|
|||
|
[RFC7159].
|
|||
|
|
|||
|
The member names within the JWT Claims Set are referred to as Claim
|
|||
|
Names. The corresponding values are referred to as Claim Values.
|
|||
|
|
|||
|
The contents of the JOSE Header describe the cryptographic operations
|
|||
|
applied to the JWT Claims Set. If the JOSE Header is for a JWS, the
|
|||
|
JWT is represented as a JWS and the claims are digitally signed or
|
|||
|
MACed, with the JWT Claims Set being the JWS Payload. If the JOSE
|
|||
|
Header is for a JWE, the JWT is represented as a JWE and the claims
|
|||
|
are encrypted, with the JWT Claims Set being the plaintext encrypted
|
|||
|
by the JWE. A JWT may be enclosed in another JWE or JWS structure to
|
|||
|
create a Nested JWT, enabling nested signing and encryption to be
|
|||
|
performed.
|
|||
|
|
|||
|
A JWT is represented as a sequence of URL-safe parts separated by
|
|||
|
period ('.') characters. Each part contains a base64url-encoded
|
|||
|
value. The number of parts in the JWT is dependent upon the
|
|||
|
representation of the resulting JWS using the JWS Compact
|
|||
|
Serialization or JWE using the JWE Compact Serialization.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 6]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
3.1. Example JWT
|
|||
|
|
|||
|
The following example JOSE Header declares that the encoded object is
|
|||
|
a JWT, and the JWT is a JWS that is MACed using the HMAC SHA-256
|
|||
|
algorithm:
|
|||
|
|
|||
|
{"typ":"JWT",
|
|||
|
"alg":"HS256"}
|
|||
|
|
|||
|
To remove potential ambiguities in the representation of the JSON
|
|||
|
object above, the octet sequence for the actual UTF-8 representation
|
|||
|
used in this example for the JOSE Header above is also included
|
|||
|
below. (Note that ambiguities can arise due to differing platform
|
|||
|
representations of line breaks (CRLF versus LF), differing spacing at
|
|||
|
the beginning and ends of lines, whether the last line has a
|
|||
|
terminating line break or not, and other causes. In the
|
|||
|
representation used in this example, the first line has no leading or
|
|||
|
trailing spaces, a CRLF line break (13, 10) occurs between the first
|
|||
|
and second lines, the second line has one leading space (32) and no
|
|||
|
trailing spaces, and the last line does not have a terminating line
|
|||
|
break.) The octets representing the UTF-8 representation of the JOSE
|
|||
|
Header in this example (using JSON array notation) are:
|
|||
|
|
|||
|
[123, 34, 116, 121, 112, 34, 58, 34, 74, 87, 84, 34, 44, 13, 10, 32,
|
|||
|
34, 97, 108, 103, 34, 58, 34, 72, 83, 50, 53, 54, 34, 125]
|
|||
|
|
|||
|
Base64url encoding the octets of the UTF-8 representation of the JOSE
|
|||
|
Header yields this encoded JOSE Header value:
|
|||
|
|
|||
|
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
|
|||
|
|
|||
|
The following is an example of a JWT Claims Set:
|
|||
|
|
|||
|
{"iss":"joe",
|
|||
|
"exp":1300819380,
|
|||
|
"http://example.com/is_root":true}
|
|||
|
|
|||
|
The following octet sequence, which is the UTF-8 representation used
|
|||
|
in this example for the JWT Claims Set above, is the JWS Payload:
|
|||
|
|
|||
|
[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]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 7]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Base64url encoding the JWS Payload yields this encoded JWS Payload
|
|||
|
(with line breaks for display purposes only):
|
|||
|
|
|||
|
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly
|
|||
|
9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
|
|||
|
|
|||
|
Computing the MAC of the encoded JOSE Header and encoded JWS Payload
|
|||
|
with the HMAC SHA-256 algorithm and base64url encoding the HMAC value
|
|||
|
in the manner specified in [JWS] yields this encoded JWS Signature:
|
|||
|
|
|||
|
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|||
|
|
|||
|
Concatenating these encoded parts in this order with period ('.')
|
|||
|
characters between the parts yields this complete JWT (with line
|
|||
|
breaks for display purposes only):
|
|||
|
|
|||
|
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
|
|||
|
.
|
|||
|
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
|
|||
|
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
|
|||
|
.
|
|||
|
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|||
|
|
|||
|
This computation is illustrated in more detail in Appendix A.1 of
|
|||
|
[JWS]. See Appendix A.1 for an example of an encrypted JWT.
|
|||
|
|
|||
|
4. JWT Claims
|
|||
|
|
|||
|
The JWT Claims Set represents a JSON object whose members are the
|
|||
|
claims conveyed by the JWT. The Claim Names within a JWT Claims Set
|
|||
|
MUST be unique; JWT parsers MUST either reject JWTs with duplicate
|
|||
|
Claim Names or use a JSON parser that returns only the lexically last
|
|||
|
duplicate member name, as specified in Section 15.12 ("The JSON
|
|||
|
Object") of ECMAScript 5.1 [ECMAScript].
|
|||
|
|
|||
|
The set of claims that a JWT must contain to be considered valid is
|
|||
|
context dependent and is outside the scope of this specification.
|
|||
|
Specific applications of JWTs will require implementations to
|
|||
|
understand and process some claims in particular ways. However, in
|
|||
|
the absence of such requirements, all claims that are not understood
|
|||
|
by implementations MUST be ignored.
|
|||
|
|
|||
|
There are three classes of JWT Claim Names: Registered Claim Names,
|
|||
|
Public Claim Names, and Private Claim Names.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 8]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
4.1. Registered Claim Names
|
|||
|
|
|||
|
The following Claim Names are registered in the IANA "JSON Web Token
|
|||
|
Claims" registry established by Section 10.1. None of the claims
|
|||
|
defined below are intended to be mandatory to use or implement in all
|
|||
|
cases, but rather they provide a starting point for a set of useful,
|
|||
|
interoperable claims. Applications using JWTs should define which
|
|||
|
specific claims they use and when they are required or optional. All
|
|||
|
the names are short because a core goal of JWTs is for the
|
|||
|
representation to be compact.
|
|||
|
|
|||
|
4.1.1. "iss" (Issuer) Claim
|
|||
|
|
|||
|
The "iss" (issuer) claim identifies the principal that issued the
|
|||
|
JWT. The processing of this claim is generally application specific.
|
|||
|
The "iss" value is a case-sensitive string containing a StringOrURI
|
|||
|
value. Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.2. "sub" (Subject) Claim
|
|||
|
|
|||
|
The "sub" (subject) claim identifies the principal that is the
|
|||
|
subject of the JWT. The claims in a JWT are normally statements
|
|||
|
about the subject. The subject value MUST either be scoped to be
|
|||
|
locally unique in the context of the issuer or be globally unique.
|
|||
|
The processing of this claim is generally application specific. The
|
|||
|
"sub" value is a case-sensitive string containing a StringOrURI
|
|||
|
value. Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.3. "aud" (Audience) Claim
|
|||
|
|
|||
|
The "aud" (audience) claim identifies the recipients that the JWT is
|
|||
|
intended for. Each principal intended to process the JWT MUST
|
|||
|
identify itself with a value in the audience claim. If the principal
|
|||
|
processing the claim does not identify itself with a value in the
|
|||
|
"aud" claim when this claim is present, then the JWT MUST be
|
|||
|
rejected. In the general case, the "aud" value is an array of case-
|
|||
|
sensitive strings, each containing a StringOrURI value. In the
|
|||
|
special case when the JWT has one audience, the "aud" value MAY be a
|
|||
|
single case-sensitive string containing a StringOrURI value. The
|
|||
|
interpretation of audience values is generally application specific.
|
|||
|
Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.4. "exp" (Expiration Time) Claim
|
|||
|
|
|||
|
The "exp" (expiration time) claim identifies the expiration time on
|
|||
|
or after which the JWT MUST NOT be accepted for processing. The
|
|||
|
processing of the "exp" claim requires that the current date/time
|
|||
|
MUST be before the expiration date/time listed in the "exp" claim.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 9]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Implementers MAY provide for some small leeway, usually no more than
|
|||
|
a few minutes, to account for clock skew. Its value MUST be a number
|
|||
|
containing a NumericDate value. Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.5. "nbf" (Not Before) Claim
|
|||
|
|
|||
|
The "nbf" (not before) claim identifies the time before which the JWT
|
|||
|
MUST NOT be accepted for processing. The processing of the "nbf"
|
|||
|
claim requires that the current date/time MUST be after or equal to
|
|||
|
the not-before date/time listed in the "nbf" claim. Implementers MAY
|
|||
|
provide for some small leeway, usually no more than a few minutes, to
|
|||
|
account for clock skew. Its value MUST be a number containing a
|
|||
|
NumericDate value. Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.6. "iat" (Issued At) Claim
|
|||
|
|
|||
|
The "iat" (issued at) claim identifies the time at which the JWT was
|
|||
|
issued. This claim can be used to determine the age of the JWT. Its
|
|||
|
value MUST be a number containing a NumericDate value. Use of this
|
|||
|
claim is OPTIONAL.
|
|||
|
|
|||
|
4.1.7. "jti" (JWT ID) Claim
|
|||
|
|
|||
|
The "jti" (JWT ID) claim provides a unique identifier for the JWT.
|
|||
|
The identifier value MUST be assigned in a manner that ensures that
|
|||
|
there is a negligible probability that the same value will be
|
|||
|
accidentally assigned to a different data object; if the application
|
|||
|
uses multiple issuers, collisions MUST be prevented among values
|
|||
|
produced by different issuers as well. The "jti" claim can be used
|
|||
|
to prevent the JWT from being replayed. The "jti" value is a case-
|
|||
|
sensitive string. Use of this claim is OPTIONAL.
|
|||
|
|
|||
|
4.2. Public Claim Names
|
|||
|
|
|||
|
Claim Names can be defined at will by those using JWTs. However, in
|
|||
|
order to prevent collisions, any new Claim Name should either be
|
|||
|
registered in the IANA "JSON Web Token Claims" registry established
|
|||
|
by Section 10.1 or be a Public Name: a value that contains a
|
|||
|
Collision-Resistant Name. In each case, the definer of the name or
|
|||
|
value needs to take reasonable precautions to make sure they are in
|
|||
|
control of the part of the namespace they use to define the Claim
|
|||
|
Name.
|
|||
|
|
|||
|
4.3. Private Claim Names
|
|||
|
|
|||
|
A producer and consumer of a JWT MAY agree to use Claim Names that
|
|||
|
are Private Names: names that are not Registered Claim Names
|
|||
|
(Section 4.1) or Public Claim Names (Section 4.2). Unlike Public
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 10]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Claim Names, Private Claim Names are subject to collision and should
|
|||
|
be used with caution.
|
|||
|
|
|||
|
5. JOSE Header
|
|||
|
|
|||
|
For a JWT object, the members of the JSON object represented by the
|
|||
|
JOSE Header describe the cryptographic operations applied to the JWT
|
|||
|
and optionally, additional properties of the JWT. Depending upon
|
|||
|
whether the JWT is a JWS or JWE, the corresponding rules for the JOSE
|
|||
|
Header values apply.
|
|||
|
|
|||
|
This specification further specifies the use of the following Header
|
|||
|
Parameters in both the cases where the JWT is a JWS and where it is a
|
|||
|
JWE.
|
|||
|
|
|||
|
5.1. "typ" (Type) Header Parameter
|
|||
|
|
|||
|
The "typ" (type) Header Parameter defined by [JWS] and [JWE] is used
|
|||
|
by JWT applications to declare the media type [IANA.MediaTypes] of
|
|||
|
this complete JWT. This is intended for use by the JWT application
|
|||
|
when values that are not JWTs could also be present in an application
|
|||
|
data structure that can contain a JWT object; the application can use
|
|||
|
this value to disambiguate among the different kinds of objects that
|
|||
|
might be present. It will typically not be used by applications when
|
|||
|
it is already known that the object is a JWT. This parameter is
|
|||
|
ignored by JWT implementations; any processing of this parameter is
|
|||
|
performed by the JWT application. If present, it is RECOMMENDED that
|
|||
|
its value be "JWT" to indicate that this object is a JWT. While
|
|||
|
media type names are not case sensitive, it is RECOMMENDED that "JWT"
|
|||
|
always be spelled using uppercase characters for compatibility with
|
|||
|
legacy implementations. Use of this Header Parameter is OPTIONAL.
|
|||
|
|
|||
|
5.2. "cty" (Content Type) Header Parameter
|
|||
|
|
|||
|
The "cty" (content type) Header Parameter defined by [JWS] and [JWE]
|
|||
|
is used by this specification to convey structural information about
|
|||
|
the JWT.
|
|||
|
|
|||
|
In the normal case in which nested signing or encryption operations
|
|||
|
are not employed, the use of this Header Parameter is NOT
|
|||
|
RECOMMENDED. In the case that nested signing or encryption is
|
|||
|
employed, this Header Parameter MUST be present; in this case, the
|
|||
|
value MUST be "JWT", to indicate that a Nested JWT is carried in this
|
|||
|
JWT. While media type names are not case sensitive, it is
|
|||
|
RECOMMENDED that "JWT" always be spelled using uppercase characters
|
|||
|
for compatibility with legacy implementations. See Appendix A.2 for
|
|||
|
an example of a Nested JWT.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 11]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
5.3. Replicating Claims as Header Parameters
|
|||
|
|
|||
|
In some applications using encrypted JWTs, it is useful to have an
|
|||
|
unencrypted representation of some claims. This might be used, for
|
|||
|
instance, in application processing rules to determine whether and
|
|||
|
how to process the JWT before it is decrypted.
|
|||
|
|
|||
|
This specification allows claims present in the JWT Claims Set to be
|
|||
|
replicated as Header Parameters in a JWT that is a JWE, as needed by
|
|||
|
the application. If such replicated claims are present, the
|
|||
|
application receiving them SHOULD verify that their values are
|
|||
|
identical, unless the application defines other specific processing
|
|||
|
rules for these claims. It is the responsibility of the application
|
|||
|
to ensure that only claims that are safe to be transmitted in an
|
|||
|
unencrypted manner are replicated as Header Parameter values in the
|
|||
|
JWT.
|
|||
|
|
|||
|
Section 10.4.1 of this specification registers the "iss" (issuer),
|
|||
|
"sub" (subject), and "aud" (audience) Header Parameter names for the
|
|||
|
purpose of providing unencrypted replicas of these claims in
|
|||
|
encrypted JWTs for applications that need them. Other specifications
|
|||
|
MAY similarly register other names that are registered Claim Names as
|
|||
|
Header Parameter names, as needed.
|
|||
|
|
|||
|
6. Unsecured JWTs
|
|||
|
|
|||
|
To support use cases in which the JWT content is secured by a means
|
|||
|
other than a signature and/or encryption contained within the JWT
|
|||
|
(such as a signature on a data structure containing the JWT), JWTs
|
|||
|
MAY also be created without a signature or encryption. An Unsecured
|
|||
|
JWT is a JWS using the "alg" Header Parameter value "none" and with
|
|||
|
the empty string for its JWS Signature value, as defined in the JWA
|
|||
|
specification [JWA]; it is an Unsecured JWS with the JWT Claims Set
|
|||
|
as its JWS Payload.
|
|||
|
|
|||
|
6.1. Example Unsecured JWT
|
|||
|
|
|||
|
The following example JOSE Header declares that the encoded object is
|
|||
|
an Unsecured JWT:
|
|||
|
|
|||
|
{"alg":"none"}
|
|||
|
|
|||
|
Base64url encoding the octets of the UTF-8 representation of the JOSE
|
|||
|
Header yields this encoded JOSE Header value:
|
|||
|
|
|||
|
eyJhbGciOiJub25lIn0
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 12]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
The following is an example of a JWT Claims Set:
|
|||
|
|
|||
|
{"iss":"joe",
|
|||
|
"exp":1300819380,
|
|||
|
"http://example.com/is_root":true}
|
|||
|
|
|||
|
Base64url encoding the octets of the UTF-8 representation of the JWT
|
|||
|
Claims Set yields this encoded JWS Payload (with line breaks for
|
|||
|
display purposes only):
|
|||
|
|
|||
|
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
|
|||
|
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
|
|||
|
|
|||
|
The encoded JWS Signature is the empty string.
|
|||
|
|
|||
|
Concatenating these encoded parts in this order with period ('.')
|
|||
|
characters between the parts yields this complete JWT (with line
|
|||
|
breaks for display purposes only):
|
|||
|
|
|||
|
eyJhbGciOiJub25lIn0
|
|||
|
.
|
|||
|
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
|
|||
|
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
|
|||
|
.
|
|||
|
|
|||
|
7. Creating and Validating JWTs
|
|||
|
|
|||
|
7.1. Creating a JWT
|
|||
|
|
|||
|
To create a JWT, the following steps are performed. The order of the
|
|||
|
steps is not significant in cases where there are no dependencies
|
|||
|
between the inputs and outputs of the steps.
|
|||
|
|
|||
|
1. Create a JWT Claims Set containing the desired claims. Note that
|
|||
|
whitespace is explicitly allowed in the representation and no
|
|||
|
canonicalization need be performed before encoding.
|
|||
|
|
|||
|
2. Let the Message be the octets of the UTF-8 representation of the
|
|||
|
JWT Claims Set.
|
|||
|
|
|||
|
3. Create a JOSE Header containing the desired set of Header
|
|||
|
Parameters. The JWT MUST conform to either the [JWS] or [JWE]
|
|||
|
specification. Note that whitespace is explicitly allowed in the
|
|||
|
representation and no canonicalization need be performed before
|
|||
|
encoding.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 13]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
4. Depending upon whether the JWT is a JWS or JWE, there are two
|
|||
|
cases:
|
|||
|
|
|||
|
* If the JWT is a JWS, create a JWS using the Message as the JWS
|
|||
|
Payload; all steps specified in [JWS] for creating a JWS MUST
|
|||
|
be followed.
|
|||
|
|
|||
|
* Else, if the JWT is a JWE, create a JWE using the Message as
|
|||
|
the plaintext for the JWE; all steps specified in [JWE] for
|
|||
|
creating a JWE MUST be followed.
|
|||
|
|
|||
|
5. If a nested signing or encryption operation will be performed,
|
|||
|
let the Message be the JWS or JWE, and return to Step 3, using a
|
|||
|
"cty" (content type) value of "JWT" in the new JOSE Header
|
|||
|
created in that step.
|
|||
|
|
|||
|
6. Otherwise, let the resulting JWT be the JWS or JWE.
|
|||
|
|
|||
|
7.2. Validating a JWT
|
|||
|
|
|||
|
When validating a JWT, the following steps are performed. The order
|
|||
|
of the steps is not significant in cases where there are no
|
|||
|
dependencies between the inputs and outputs of the steps. If any of
|
|||
|
the listed steps fail, then the JWT MUST be rejected -- that is,
|
|||
|
treated by the application as an invalid input.
|
|||
|
|
|||
|
1. Verify that the JWT contains at least one period ('.')
|
|||
|
character.
|
|||
|
|
|||
|
2. Let the Encoded JOSE Header be the portion of the JWT before the
|
|||
|
first period ('.') character.
|
|||
|
|
|||
|
3. Base64url decode the Encoded JOSE Header following the
|
|||
|
restriction that no line breaks, whitespace, or other additional
|
|||
|
characters have been used.
|
|||
|
|
|||
|
4. Verify that the resulting octet sequence is a UTF-8-encoded
|
|||
|
representation of a completely valid JSON object conforming to
|
|||
|
RFC 7159 [RFC7159]; let the JOSE Header be this JSON object.
|
|||
|
|
|||
|
5. Verify that the resulting JOSE Header includes only parameters
|
|||
|
and values whose syntax and semantics are both understood and
|
|||
|
supported or that are specified as being ignored when not
|
|||
|
understood.
|
|||
|
|
|||
|
6. Determine whether the JWT is a JWS or a JWE using any of the
|
|||
|
methods described in Section 9 of [JWE].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 14]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
7. Depending upon whether the JWT is a JWS or JWE, there are two
|
|||
|
cases:
|
|||
|
|
|||
|
* If the JWT is a JWS, follow the steps specified in [JWS] for
|
|||
|
validating a JWS. Let the Message be the result of base64url
|
|||
|
decoding the JWS Payload.
|
|||
|
|
|||
|
* Else, if the JWT is a JWE, follow the steps specified in
|
|||
|
[JWE] for validating a JWE. Let the Message be the resulting
|
|||
|
plaintext.
|
|||
|
|
|||
|
8. If the JOSE Header contains a "cty" (content type) value of
|
|||
|
"JWT", then the Message is a JWT that was the subject of nested
|
|||
|
signing or encryption operations. In this case, return to Step
|
|||
|
1, using the Message as the JWT.
|
|||
|
|
|||
|
9. Otherwise, base64url decode the Message following the
|
|||
|
restriction that no line breaks, whitespace, or other additional
|
|||
|
characters have been used.
|
|||
|
|
|||
|
10. Verify that the resulting octet sequence is a UTF-8-encoded
|
|||
|
representation of a completely valid JSON object conforming to
|
|||
|
RFC 7159 [RFC7159]; let the JWT Claims Set be this JSON object.
|
|||
|
|
|||
|
Finally, note that it is an application decision which algorithms may
|
|||
|
be used in a given context. Even if a JWT can be successfully
|
|||
|
validated, unless the algorithms used in the JWT are acceptable to
|
|||
|
the application, it SHOULD reject the JWT.
|
|||
|
|
|||
|
7.3. String Comparison Rules
|
|||
|
|
|||
|
Processing a JWT inevitably requires comparing known strings to
|
|||
|
members and values in JSON objects. For example, in checking what
|
|||
|
the algorithm is, the Unicode [UNICODE] string encoding "alg" will be
|
|||
|
checked against the member names in the JOSE Header to see if there
|
|||
|
is a matching Header Parameter name.
|
|||
|
|
|||
|
The JSON rules for doing member name comparison are described in
|
|||
|
Section 8.3 of RFC 7159 [RFC7159]. Since the only string comparison
|
|||
|
operations that are performed are equality and inequality, the same
|
|||
|
rules can be used for comparing both member names and member values
|
|||
|
against known strings.
|
|||
|
|
|||
|
These comparison rules MUST be used for all JSON string comparisons
|
|||
|
except in cases where the definition of the member explicitly calls
|
|||
|
out that a different comparison rule is to be used for that member
|
|||
|
value. In this specification, only the "typ" and "cty" member values
|
|||
|
do not use these comparison rules.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 15]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Some applications may include case-insensitive information in a case-
|
|||
|
sensitive value, such as including a DNS name as part of the "iss"
|
|||
|
(issuer) claim value. In those cases, the application may need to
|
|||
|
define a convention for the canonical case to use for representing
|
|||
|
the case-insensitive portions, such as lowercasing them, if more than
|
|||
|
one party might need to produce the same value so that they can be
|
|||
|
compared. (However, if all other parties consume whatever value the
|
|||
|
producing party emitted verbatim without attempting to compare it to
|
|||
|
an independently produced value, then the case used by the producer
|
|||
|
will not matter.)
|
|||
|
|
|||
|
8. Implementation Requirements
|
|||
|
|
|||
|
This section defines which algorithms and features of this
|
|||
|
specification are mandatory to implement. Applications using this
|
|||
|
specification can impose additional requirements upon implementations
|
|||
|
that they use. For instance, one application might require support
|
|||
|
for encrypted JWTs and Nested JWTs, while another might require
|
|||
|
support for signing JWTs with the Elliptic Curve Digital Signature
|
|||
|
Algorithm (ECDSA) using the P-256 curve and the SHA-256 hash
|
|||
|
algorithm ("ES256").
|
|||
|
|
|||
|
Of the signature and MAC algorithms specified in JSON Web Algorithms
|
|||
|
[JWA], only HMAC SHA-256 ("HS256") and "none" MUST be implemented by
|
|||
|
conforming JWT implementations. It is RECOMMENDED that
|
|||
|
implementations also support RSASSA-PKCS1-v1_5 with the SHA-256 hash
|
|||
|
algorithm ("RS256") and ECDSA using the P-256 curve and the SHA-256
|
|||
|
hash algorithm ("ES256"). Support for other algorithms and key sizes
|
|||
|
is OPTIONAL.
|
|||
|
|
|||
|
Support for encrypted JWTs is OPTIONAL. If an implementation
|
|||
|
provides encryption capabilities, of the encryption algorithms
|
|||
|
specified in [JWA], only RSAES-PKCS1-v1_5 with 2048-bit keys
|
|||
|
("RSA1_5"), AES Key Wrap with 128- and 256-bit keys ("A128KW" and
|
|||
|
"A256KW"), and the composite authenticated encryption algorithm using
|
|||
|
AES-CBC and HMAC SHA-2 ("A128CBC-HS256" and "A256CBC-HS512") MUST be
|
|||
|
implemented by conforming implementations. It is RECOMMENDED that
|
|||
|
implementations also support using Elliptic Curve Diffie-Hellman
|
|||
|
Ephemeral Static (ECDH-ES) to agree upon a key used to wrap the
|
|||
|
Content Encryption Key ("ECDH-ES+A128KW" and "ECDH-ES+A256KW") and
|
|||
|
AES in Galois/Counter Mode (GCM) with 128- and 256-bit keys
|
|||
|
("A128GCM" and "A256GCM"). Support for other algorithms and key
|
|||
|
sizes is OPTIONAL.
|
|||
|
|
|||
|
Support for Nested JWTs is OPTIONAL.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 16]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
9. URI for Declaring that Content is a JWT
|
|||
|
|
|||
|
This specification registers the URN
|
|||
|
"urn:ietf:params:oauth:token-type:jwt" for use by applications that
|
|||
|
declare content types using URIs (rather than, for instance, media
|
|||
|
types) to indicate that the content referred to is a JWT.
|
|||
|
|
|||
|
10. IANA Considerations
|
|||
|
|
|||
|
10.1. JSON Web Token Claims Registry
|
|||
|
|
|||
|
This section establishes the IANA "JSON Web Token Claims" registry
|
|||
|
for JWT Claim Names. The registry records the Claim Name and a
|
|||
|
reference to the specification that defines it. This section
|
|||
|
registers the Claim Names defined in Section 4.1.
|
|||
|
|
|||
|
Values are registered on a Specification Required [RFC5226] basis
|
|||
|
after a three-week review period on the jwt-reg-review@ietf.org
|
|||
|
mailing list, on the advice of one or more Designated Experts.
|
|||
|
However, to allow for the allocation of values prior to publication,
|
|||
|
the Designated Experts may approve registration once they are
|
|||
|
satisfied that such a specification will be published.
|
|||
|
|
|||
|
Registration requests sent to the mailing list for review should use
|
|||
|
an appropriate subject (e.g., "Request to register claim: example").
|
|||
|
|
|||
|
Within the review period, the Designated Experts will either approve
|
|||
|
or deny the registration request, communicating this decision to the
|
|||
|
review list and IANA. Denials should include an explanation and, if
|
|||
|
applicable, suggestions as to how to make the request successful.
|
|||
|
Registration requests that are undetermined for a period longer than
|
|||
|
21 days can be brought to the IESG's attention (using the
|
|||
|
iesg@ietf.org mailing list) for resolution.
|
|||
|
|
|||
|
Criteria that should be applied by the Designated Experts includes
|
|||
|
determining whether the proposed registration duplicates existing
|
|||
|
functionality, whether it is likely to be of general applicability or
|
|||
|
whether it is useful only for a single application, and whether the
|
|||
|
registration description is clear.
|
|||
|
|
|||
|
IANA must only accept registry updates from the Designated Experts
|
|||
|
and should direct all requests for registration to the review mailing
|
|||
|
list.
|
|||
|
|
|||
|
It is suggested that multiple Designated Experts be appointed who are
|
|||
|
able to represent the perspectives of different applications using
|
|||
|
this specification, in order to enable broadly informed review of
|
|||
|
registration decisions. In cases where a registration decision could
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 17]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
be perceived as creating a conflict of interest for a particular
|
|||
|
Expert, that Expert should defer to the judgment of the other
|
|||
|
Experts.
|
|||
|
|
|||
|
10.1.1. Registration Template
|
|||
|
|
|||
|
Claim Name:
|
|||
|
The name requested (e.g., "iss"). Because a core goal of this
|
|||
|
specification is for the resulting representations to be compact,
|
|||
|
it is RECOMMENDED that the name be short -- that is, not to exceed
|
|||
|
8 characters without a compelling reason to do so. This name is
|
|||
|
case sensitive. Names may not match other registered names in a
|
|||
|
case-insensitive manner unless the Designated Experts state that
|
|||
|
there is a compelling reason to allow an exception.
|
|||
|
|
|||
|
Claim Description:
|
|||
|
Brief description of the claim (e.g., "Issuer").
|
|||
|
|
|||
|
Change Controller:
|
|||
|
For Standards Track RFCs, list the "IESG". For others, give the
|
|||
|
name of the responsible party. Other details (e.g., postal
|
|||
|
address, email address, home page URI) may also be included.
|
|||
|
|
|||
|
Specification Document(s):
|
|||
|
Reference to the document or documents that specify the parameter,
|
|||
|
preferably including URIs that can be used to retrieve copies of
|
|||
|
the documents. An indication of the relevant sections may also be
|
|||
|
included but is not required.
|
|||
|
|
|||
|
10.1.2. Initial Registry Contents
|
|||
|
|
|||
|
o Claim Name: "iss"
|
|||
|
o Claim Description: Issuer
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.1 of RFC 7519
|
|||
|
|
|||
|
o Claim Name: "sub"
|
|||
|
o Claim Description: Subject
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.2 of RFC 7519
|
|||
|
|
|||
|
o Claim Name: "aud"
|
|||
|
o Claim Description: Audience
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.3 of RFC 7519
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 18]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
o Claim Name: "exp"
|
|||
|
o Claim Description: Expiration Time
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.4 of RFC 7519
|
|||
|
|
|||
|
o Claim Name: "nbf"
|
|||
|
o Claim Description: Not Before
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.5 of RFC 7519
|
|||
|
|
|||
|
o Claim Name: "iat"
|
|||
|
o Claim Description: Issued At
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.6 of RFC 7519
|
|||
|
|
|||
|
o Claim Name: "jti"
|
|||
|
o Claim Description: JWT ID
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.7 of RFC 7519
|
|||
|
|
|||
|
10.2. Sub-Namespace Registration of
|
|||
|
urn:ietf:params:oauth:token-type:jwt
|
|||
|
|
|||
|
10.2.1. Registry Contents
|
|||
|
|
|||
|
This section registers the value "token-type:jwt" in the IANA "OAuth
|
|||
|
URI" registry established by "An IETF URN Sub-Namespace for OAuth"
|
|||
|
[RFC6755], which can be used to indicate that the content is a JWT.
|
|||
|
|
|||
|
o URN: urn:ietf:params:oauth:token-type:jwt
|
|||
|
o Common Name: JSON Web Token (JWT) Token Type
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): RFC 7519
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 19]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
10.3. Media Type Registration
|
|||
|
|
|||
|
10.3.1. Registry Contents
|
|||
|
|
|||
|
This section registers the "application/jwt" media type [RFC2046] in
|
|||
|
the "Media Types" registry [IANA.MediaTypes] in the manner described
|
|||
|
in RFC 6838 [RFC6838], which can be used to indicate that the content
|
|||
|
is a JWT.
|
|||
|
|
|||
|
o Type name: application
|
|||
|
o Subtype name: jwt
|
|||
|
o Required parameters: n/a
|
|||
|
o Optional parameters: n/a
|
|||
|
o Encoding considerations: 8bit; JWT values are encoded as a series
|
|||
|
of base64url-encoded values (some of which may be the empty
|
|||
|
string) separated by period ('.') characters.
|
|||
|
o Security considerations: See the Security Considerations section
|
|||
|
of RFC 7519
|
|||
|
o Interoperability considerations: n/a
|
|||
|
o Published specification: RFC 7519
|
|||
|
o Applications that use this media type: OpenID Connect, Mozilla
|
|||
|
Persona, Salesforce, Google, Android, Windows Azure, Amazon Web
|
|||
|
Services, and numerous others
|
|||
|
o Fragment identifier considerations: n/a
|
|||
|
o Additional information:
|
|||
|
|
|||
|
Magic number(s): n/a
|
|||
|
File extension(s): n/a
|
|||
|
Macintosh file type code(s): n/a
|
|||
|
|
|||
|
o Person & email address to contact for further information:
|
|||
|
Michael B. Jones, mbj@microsoft.com
|
|||
|
o Intended usage: COMMON
|
|||
|
o Restrictions on usage: none
|
|||
|
o Author: Michael B. Jones, mbj@microsoft.com
|
|||
|
o Change controller: IESG
|
|||
|
o Provisional registration? No
|
|||
|
|
|||
|
10.4. Header Parameter Names Registration
|
|||
|
|
|||
|
This section registers specific Claim Names defined in Section 4.1 in
|
|||
|
the IANA "JSON Web Signature and Encryption Header Parameters"
|
|||
|
registry established by [JWS] for use by claims replicated as Header
|
|||
|
Parameters in JWEs, per Section 5.3.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 20]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
10.4.1. Registry Contents
|
|||
|
|
|||
|
o Header Parameter Name: "iss"
|
|||
|
o Header Parameter Description: Issuer
|
|||
|
o Header Parameter Usage Location(s): JWE
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.1 of RFC 7519
|
|||
|
|
|||
|
o Header Parameter Name: "sub"
|
|||
|
o Header Parameter Description: Subject
|
|||
|
o Header Parameter Usage Location(s): JWE
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.2 of RFC 7519
|
|||
|
|
|||
|
o Header Parameter Name: "aud"
|
|||
|
o Header Parameter Description: Audience
|
|||
|
o Header Parameter Usage Location(s): JWE
|
|||
|
o Change Controller: IESG
|
|||
|
o Specification Document(s): Section 4.1.3 of RFC 7519
|
|||
|
|
|||
|
11. Security Considerations
|
|||
|
|
|||
|
All of the security issues that are pertinent to any cryptographic
|
|||
|
application must be addressed by JWT/JWS/JWE/JWK agents. Among these
|
|||
|
issues are protecting the user's asymmetric private and symmetric
|
|||
|
secret keys and employing countermeasures to various attacks.
|
|||
|
|
|||
|
All the security considerations in the JWS specification also apply
|
|||
|
to JWT, as do the JWE security considerations when encryption is
|
|||
|
employed. In particular, Sections 10.12 ("JSON Security
|
|||
|
Considerations") and 10.13 ("Unicode Comparison Security
|
|||
|
Considerations") of [JWS] apply equally to the JWT Claims Set in the
|
|||
|
same manner that they do to the JOSE Header.
|
|||
|
|
|||
|
11.1. Trust Decisions
|
|||
|
|
|||
|
The contents of a JWT cannot be relied upon in a trust decision
|
|||
|
unless its contents have been cryptographically secured and bound to
|
|||
|
the context necessary for the trust decision. In particular, the
|
|||
|
key(s) used to sign and/or encrypt the JWT will typically need to
|
|||
|
verifiably be under the control of the party identified as the issuer
|
|||
|
of the JWT.
|
|||
|
|
|||
|
11.2. Signing and Encryption Order
|
|||
|
|
|||
|
While syntactically the signing and encryption operations for Nested
|
|||
|
JWTs may be applied in any order, if both signing and encryption are
|
|||
|
necessary, normally producers should sign the message and then
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 21]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
encrypt the result (thus encrypting the signature). This prevents
|
|||
|
attacks in which the signature is stripped, leaving just an encrypted
|
|||
|
message, as well as providing privacy for the signer. Furthermore,
|
|||
|
signatures over encrypted text are not considered valid in many
|
|||
|
jurisdictions.
|
|||
|
|
|||
|
Note that potential concerns about security issues related to the
|
|||
|
order of signing and encryption operations are already addressed by
|
|||
|
the underlying JWS and JWE specifications; in particular, because JWE
|
|||
|
only supports the use of authenticated encryption algorithms,
|
|||
|
cryptographic concerns about the potential need to sign after
|
|||
|
encryption that apply in many contexts do not apply to this
|
|||
|
specification.
|
|||
|
|
|||
|
12. Privacy Considerations
|
|||
|
|
|||
|
A JWT may contain privacy-sensitive information. When this is the
|
|||
|
case, measures MUST be taken to prevent disclosure of this
|
|||
|
information to unintended parties. One way to achieve this is to use
|
|||
|
an encrypted JWT and authenticate the recipient. Another way is to
|
|||
|
ensure that JWTs containing unencrypted privacy-sensitive information
|
|||
|
are only transmitted using protocols utilizing encryption that
|
|||
|
support endpoint authentication, such as Transport Layer Security
|
|||
|
(TLS). Omitting privacy-sensitive information from a JWT is the
|
|||
|
simplest way of minimizing privacy issues.
|
|||
|
|
|||
|
13. References
|
|||
|
|
|||
|
13.1. Normative References
|
|||
|
|
|||
|
[ECMAScript]
|
|||
|
Ecma International, "ECMAScript Language Specification,
|
|||
|
5.1 Edition", ECMA Standard 262, June 2011,
|
|||
|
<http://www.ecma-international.org/ecma-262/5.1/
|
|||
|
ECMA-262.pdf>.
|
|||
|
|
|||
|
[IANA.MediaTypes]
|
|||
|
IANA, "Media Types",
|
|||
|
<http://www.iana.org/assignments/media-types>.
|
|||
|
|
|||
|
[JWA] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518,
|
|||
|
DOI 10.17487/RFC7518, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7518>.
|
|||
|
|
|||
|
[JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)",
|
|||
|
RFC 7516, DOI 10.17487/RFC7516, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7516>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 22]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
[JWS] Jones, M., Bradley, J., and N. Sakimura, "JSON Web
|
|||
|
Signature (JWS)", RFC 7515, DOI 10.17487/RFC, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7515>.
|
|||
|
|
|||
|
[RFC20] Cerf, V., "ASCII format for Network Interchange", STD 80,
|
|||
|
RFC 20, DOI 10.17487/RFC0020, October 1969,
|
|||
|
<http://www.rfc-editor.org/info/rfc20>.
|
|||
|
|
|||
|
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
|
|||
|
Extensions (MIME) Part Two: Media Types", RFC 2046,
|
|||
|
DOI 10.17487/RFC2046, November 1996,
|
|||
|
<http://www.rfc-editor.org/info/rfc2046>.
|
|||
|
|
|||
|
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", BCP 14, RFC 2119,
|
|||
|
DOI 10.17487/RFC2119, March 1997,
|
|||
|
<http://www.rfc-editor.org/info/rfc2119>.
|
|||
|
|
|||
|
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
|
|||
|
Resource Identifier (URI): Generic Syntax", STD 66,
|
|||
|
RFC 3986, DOI 10.17487/RFC3986, January 2005,
|
|||
|
<http://www.rfc-editor.org/info/rfc3986>.
|
|||
|
|
|||
|
[RFC4949] Shirey, R., "Internet Security Glossary, Version 2",
|
|||
|
FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007,
|
|||
|
<http://www.rfc-editor.org/info/rfc4949>.
|
|||
|
|
|||
|
[RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
|
|||
|
Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March
|
|||
|
2014, <http://www.rfc-editor.org/info/rfc7159>.
|
|||
|
|
|||
|
[UNICODE] The Unicode Consortium, "The Unicode Standard",
|
|||
|
<http://www.unicode.org/versions/latest/>.
|
|||
|
|
|||
|
13.2. Informative References
|
|||
|
|
|||
|
[CanvasApp]
|
|||
|
Facebook, "Canvas Applications", 2010,
|
|||
|
<http://developers.facebook.com/docs/authentication/
|
|||
|
canvas>.
|
|||
|
|
|||
|
[JSS] Bradley, J. and N. Sakimura (editor), "JSON Simple Sign",
|
|||
|
September 2010, <http://jsonenc.info/jss/1.0/>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 23]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
[MagicSignatures]
|
|||
|
Panzer, J., Ed., Laurie, B., and D. Balfanz, "Magic
|
|||
|
Signatures", January 2011,
|
|||
|
<http://salmon-protocol.googlecode.com/svn/
|
|||
|
trunk/draft-panzer-magicsig-01.html>.
|
|||
|
|
|||
|
[OASIS.saml-core-2.0-os]
|
|||
|
Cantor, S., Kemp, J., Philpott, R., and E. Maler,
|
|||
|
"Assertions and Protocols for the OASIS Security Assertion
|
|||
|
Markup Language (SAML) V2.0", OASIS Standard
|
|||
|
saml-core-2.0-os, March 2005,
|
|||
|
<http://docs.oasis-open.org/security/saml/v2.0/
|
|||
|
saml-core-2.0-os.pdf>.
|
|||
|
|
|||
|
[POSIX.1] IEEE, "The Open Group Base Specifications Issue 7", IEEE
|
|||
|
Std 1003.1, 2013 Edition, 2013,
|
|||
|
<http://pubs.opengroup.org/onlinepubs/9699919799/
|
|||
|
basedefs/V1_chap04.html#tag_04_15>.
|
|||
|
|
|||
|
[RFC3275] Eastlake 3rd, D., Reagle, J., and D. Solo, "(Extensible
|
|||
|
Markup Language) XML-Signature Syntax and Processing",
|
|||
|
RFC 3275, DOI 10.17487/RFC3275, March 2002,
|
|||
|
<http://www.rfc-editor.org/info/rfc3275>.
|
|||
|
|
|||
|
[RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet:
|
|||
|
Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
|
|||
|
<http://www.rfc-editor.org/info/rfc3339>.
|
|||
|
|
|||
|
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
|
|||
|
Unique IDentifier (UUID) URN Namespace", RFC 4122,
|
|||
|
DOI 10.17487/RFC4122, July 2005,
|
|||
|
<http://www.rfc-editor.org/info/rfc4122>.
|
|||
|
|
|||
|
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
|
|||
|
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
|
|||
|
DOI 10.17487/RFC5226, May 2008,
|
|||
|
<http://www.rfc-editor.org/info/rfc5226>.
|
|||
|
|
|||
|
[RFC6755] Campbell, B. and H. Tschofenig, "An IETF URN Sub-Namespace
|
|||
|
for OAuth", RFC 6755, DOI 10.17487/RFC6755, October 2012,
|
|||
|
<http://www.rfc-editor.org/info/rfc6755>.
|
|||
|
|
|||
|
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
|
|||
|
Specifications and Registration Procedures", BCP 13,
|
|||
|
RFC 6838, DOI 10.17487/RFC6838, January 2013,
|
|||
|
<http://www.rfc-editor.org/info/rfc6838>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 24]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
[SWT] Hardt, D. and Y. Goland, "Simple Web Token (SWT)", Version
|
|||
|
0.9.5.1, November 2009, <http://msdn.microsoft.com/en-us/
|
|||
|
library/windowsazure/hh781551.aspx>.
|
|||
|
|
|||
|
[W3C.CR-xml11-20060816]
|
|||
|
Cowan, J., "Extensible Markup Language (XML) 1.1 (Second
|
|||
|
Edition)", World Wide Web Consortium Recommendation
|
|||
|
REC-xml11-20060816, August 2006,
|
|||
|
<http://www.w3.org/TR/2006/REC-xml11-20060816>.
|
|||
|
|
|||
|
[W3C.REC-xml-c14n-20010315]
|
|||
|
Boyer, J., "Canonical XML Version 1.0", World Wide Web
|
|||
|
Consortium Recommendation REC-xml-c14n-20010315, March
|
|||
|
2001, <http://www.w3.org/TR/2001/REC-xml-c14n-20010315>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 25]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Appendix A. JWT Examples
|
|||
|
|
|||
|
This section contains examples of JWTs. For other example JWTs, see
|
|||
|
Section 6.1 of this document and Appendices A.1 - A.3 of [JWS].
|
|||
|
|
|||
|
A.1. Example Encrypted JWT
|
|||
|
|
|||
|
This example encrypts the same claims as used in Section 3.1 to the
|
|||
|
recipient using RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256.
|
|||
|
|
|||
|
The following example JOSE Header declares that:
|
|||
|
|
|||
|
o The Content Encryption Key is encrypted to the recipient using the
|
|||
|
RSAES-PKCS1-v1_5 algorithm to produce the JWE Encrypted Key.
|
|||
|
o Authenticated encryption is performed on the plaintext using the
|
|||
|
AES_128_CBC_HMAC_SHA_256 algorithm to produce the JWE Ciphertext
|
|||
|
and the JWE Authentication Tag.
|
|||
|
|
|||
|
{"alg":"RSA1_5","enc":"A128CBC-HS256"}
|
|||
|
|
|||
|
Other than using the octets of the UTF-8 representation of the JWT
|
|||
|
Claims Set from Section 3.1 as the plaintext value, the computation
|
|||
|
of this JWT is identical to the computation of the JWE in
|
|||
|
Appendix A.2 of [JWE], including the keys used.
|
|||
|
|
|||
|
The final result in this example (with line breaks for display
|
|||
|
purposes only) is:
|
|||
|
|
|||
|
eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.
|
|||
|
QR1Owv2ug2WyPBnbQrRARTeEk9kDO2w8qDcjiHnSJflSdv1iNqhWXaKH4MqAkQtM
|
|||
|
oNfABIPJaZm0HaA415sv3aeuBWnD8J-Ui7Ah6cWafs3ZwwFKDFUUsWHSK-IPKxLG
|
|||
|
TkND09XyjORj_CHAgOPJ-Sd8ONQRnJvWn_hXV1BNMHzUjPyYwEsRhDhzjAD26ima
|
|||
|
sOTsgruobpYGoQcXUwFDn7moXPRfDE8-NoQX7N7ZYMmpUDkR-Cx9obNGwJQ3nM52
|
|||
|
YCitxoQVPzjbl7WBuB7AohdBoZOdZ24WlN1lVIeh8v1K4krB8xgKvRU8kgFrEn_a
|
|||
|
1rZgN5TiysnmzTROF869lQ.
|
|||
|
AxY8DCtDaGlsbGljb3RoZQ.
|
|||
|
MKOle7UQrG6nSxTLX6Mqwt0orbHvAKeWnDYvpIAeZ72deHxz3roJDXQyhxx0wKaM
|
|||
|
HDjUEOKIwrtkHthpqEanSBNYHZgmNOV7sln1Eu9g3J8.
|
|||
|
fiK51VwhsxJ-siBMR-YFiA
|
|||
|
|
|||
|
A.2. Example Nested JWT
|
|||
|
|
|||
|
This example shows how a JWT can be used as the payload of a JWE or
|
|||
|
JWS to create a Nested JWT. In this case, the JWT Claims Set is
|
|||
|
first signed, and then encrypted.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 26]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
The inner signed JWT is identical to the example in Appendix A.2 of
|
|||
|
[JWS]. Therefore, its computation is not repeated here. This
|
|||
|
example then encrypts this inner JWT to the recipient using
|
|||
|
RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256.
|
|||
|
|
|||
|
The following example JOSE Header declares that:
|
|||
|
|
|||
|
o The Content Encryption Key is encrypted to the recipient using the
|
|||
|
RSAES-PKCS1-v1_5 algorithm to produce the JWE Encrypted Key.
|
|||
|
o Authenticated encryption is performed on the plaintext using the
|
|||
|
AES_128_CBC_HMAC_SHA_256 algorithm to produce the JWE Ciphertext
|
|||
|
and the JWE Authentication Tag.
|
|||
|
o The plaintext is itself a JWT.
|
|||
|
|
|||
|
{"alg":"RSA1_5","enc":"A128CBC-HS256","cty":"JWT"}
|
|||
|
|
|||
|
Base64url encoding the octets of the UTF-8 representation of the JOSE
|
|||
|
Header yields this encoded JOSE Header value:
|
|||
|
|
|||
|
eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiY3R5IjoiSldUIn0
|
|||
|
|
|||
|
The computation of this JWT is identical to the computation of the
|
|||
|
JWE in Appendix A.2 of [JWE], other than that different JOSE Header,
|
|||
|
plaintext, JWE Initialization Vector, and Content Encryption Key
|
|||
|
values are used. (The RSA key used is the same.)
|
|||
|
|
|||
|
The plaintext used is the octets of the ASCII [RFC20] representation
|
|||
|
of the JWT at the end of Appendix A.2.1 of [JWS] (with all whitespace
|
|||
|
and line breaks removed), which is a sequence of 458 octets.
|
|||
|
|
|||
|
The JWE Initialization Vector value used (using JSON array notation)
|
|||
|
is:
|
|||
|
|
|||
|
[82, 101, 100, 109, 111, 110, 100, 32, 87, 65, 32, 57, 56, 48, 53,
|
|||
|
50]
|
|||
|
|
|||
|
This example uses the Content Encryption Key represented by the
|
|||
|
base64url-encoded value below:
|
|||
|
|
|||
|
GawgguFyGrWKav7AX4VKUg
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 27]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
The final result for this Nested JWT (with line breaks for display
|
|||
|
purposes only) is:
|
|||
|
|
|||
|
eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiY3R5IjoiSldU
|
|||
|
In0.
|
|||
|
g_hEwksO1Ax8Qn7HoN-BVeBoa8FXe0kpyk_XdcSmxvcM5_P296JXXtoHISr_DD_M
|
|||
|
qewaQSH4dZOQHoUgKLeFly-9RI11TG-_Ge1bZFazBPwKC5lJ6OLANLMd0QSL4fYE
|
|||
|
b9ERe-epKYE3xb2jfY1AltHqBO-PM6j23Guj2yDKnFv6WO72tteVzm_2n17SBFvh
|
|||
|
DuR9a2nHTE67pe0XGBUS_TK7ecA-iVq5COeVdJR4U4VZGGlxRGPLRHvolVLEHx6D
|
|||
|
YyLpw30Ay9R6d68YCLi9FYTq3hIXPK_-dmPlOUlKvPr1GgJzRoeC9G5qCvdcHWsq
|
|||
|
JGTO_z3Wfo5zsqwkxruxwA.
|
|||
|
UmVkbW9uZCBXQSA5ODA1Mg.
|
|||
|
VwHERHPvCNcHHpTjkoigx3_ExK0Qc71RMEParpatm0X_qpg-w8kozSjfNIPPXiTB
|
|||
|
BLXR65CIPkFqz4l1Ae9w_uowKiwyi9acgVztAi-pSL8GQSXnaamh9kX1mdh3M_TT
|
|||
|
-FZGQFQsFhu0Z72gJKGdfGE-OE7hS1zuBD5oEUfk0Dmb0VzWEzpxxiSSBbBAzP10
|
|||
|
l56pPfAtrjEYw-7ygeMkwBl6Z_mLS6w6xUgKlvW6ULmkV-uLC4FUiyKECK4e3WZY
|
|||
|
Kw1bpgIqGYsw2v_grHjszJZ-_I5uM-9RA8ycX9KqPRp9gc6pXmoU_-27ATs9XCvr
|
|||
|
ZXUtK2902AUzqpeEUJYjWWxSNsS-r1TJ1I-FMJ4XyAiGrfmo9hQPcNBYxPz3GQb2
|
|||
|
8Y5CLSQfNgKSGt0A4isp1hBUXBHAndgtcslt7ZoQJaKe_nNJgNliWtWpJ_ebuOpE
|
|||
|
l8jdhehdccnRMIwAmU1n7SPkmhIl1HlSOpvcvDfhUN5wuqU955vOBvfkBOh5A11U
|
|||
|
zBuo2WlgZ6hYi9-e3w29bR0C2-pp3jbqxEDw3iWaf2dc5b-LnR0FEYXvI_tYk5rd
|
|||
|
_J9N0mg0tQ6RbpxNEMNoA9QWk5lgdPvbh9BaO195abQ.
|
|||
|
AVO9iT5AV4CzvDJCdhSFlQ
|
|||
|
|
|||
|
Appendix B. Relationship of JWTs to SAML Assertions
|
|||
|
|
|||
|
Security Assertion Markup Language (SAML) 2.0
|
|||
|
[OASIS.saml-core-2.0-os] provides a standard for creating security
|
|||
|
tokens with greater expressivity and more security options than
|
|||
|
supported by JWTs. However, the cost of this flexibility and
|
|||
|
expressiveness is both size and complexity. SAML's use of XML
|
|||
|
[W3C.CR-xml11-20060816] and XML Digital Signature (DSIG) [RFC3275]
|
|||
|
contributes to the size of SAML Assertions; its use of XML and
|
|||
|
especially XML Canonicalization [W3C.REC-xml-c14n-20010315]
|
|||
|
contributes to their complexity.
|
|||
|
|
|||
|
JWTs are intended to provide a simple security token format that is
|
|||
|
small enough to fit into HTTP headers and query arguments in URIs.
|
|||
|
It does this by supporting a much simpler token model than SAML and
|
|||
|
using the JSON [RFC7159] object encoding syntax. It also supports
|
|||
|
securing tokens using Message Authentication Codes (MACs) and digital
|
|||
|
signatures using a smaller (and less flexible) format than XML DSIG.
|
|||
|
|
|||
|
Therefore, while JWTs can do some of the things SAML Assertions do,
|
|||
|
JWTs are not intended as a full replacement for SAML Assertions, but
|
|||
|
rather as a token format to be used when ease of implementation or
|
|||
|
compactness are considerations.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 28]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
SAML Assertions are always statements made by an entity about a
|
|||
|
subject. JWTs are often used in the same manner, with the entity
|
|||
|
making the statements being represented by the "iss" (issuer) claim,
|
|||
|
and the subject being represented by the "sub" (subject) claim.
|
|||
|
However, with these claims being optional, other uses of the JWT
|
|||
|
format are also permitted.
|
|||
|
|
|||
|
Appendix C. Relationship of JWTs to Simple Web Tokens (SWTs)
|
|||
|
|
|||
|
Both JWTs and SWTs [SWT], at their core, enable sets of claims to be
|
|||
|
communicated between applications. For SWTs, both the claim names
|
|||
|
and claim values are strings. For JWTs, while claim names are
|
|||
|
strings, claim values can be any JSON type. Both token types offer
|
|||
|
cryptographic protection of their content: SWTs with HMAC SHA-256 and
|
|||
|
JWTs with a choice of algorithms, including signature, MAC, and
|
|||
|
encryption algorithms.
|
|||
|
|
|||
|
Acknowledgements
|
|||
|
|
|||
|
The authors acknowledge that the design of JWTs was intentionally
|
|||
|
influenced by the design and simplicity of SWTs [SWT] and ideas for
|
|||
|
JSON tokens that Dick Hardt discussed within the OpenID community.
|
|||
|
|
|||
|
Solutions for signing JSON content were previously explored by Magic
|
|||
|
Signatures [MagicSignatures], JSON Simple Sign [JSS], and Canvas
|
|||
|
Applications [CanvasApp], all of which influenced this document.
|
|||
|
|
|||
|
This specification is the work of the OAuth working group, which
|
|||
|
includes dozens of active and dedicated participants. In particular,
|
|||
|
the following individuals contributed ideas, feedback, and wording
|
|||
|
that influenced this specification:
|
|||
|
|
|||
|
Dirk Balfanz, Richard Barnes, Brian Campbell, Alissa Cooper, Breno de
|
|||
|
Medeiros, Stephen Farrell, Yaron Y. Goland, Dick Hardt, Joe
|
|||
|
Hildebrand, Jeff Hodges, Edmund Jay, Warren Kumari, Ben Laurie, Barry
|
|||
|
Leiba, Ted Lemon, James Manger, Prateek Mishra, Kathleen Moriarty,
|
|||
|
Tony Nadalin, Axel Nennker, John Panzer, Emmanuel Raviart, David
|
|||
|
Recordon, Eric Rescorla, Jim Schaad, Paul Tarjan, Hannes Tschofenig,
|
|||
|
Sean Turner, and Tom Yu.
|
|||
|
|
|||
|
Hannes Tschofenig and Derek Atkins chaired the OAuth working group
|
|||
|
and Sean Turner, Stephen Farrell, and Kathleen Moriarty served as
|
|||
|
Security Area Directors during the creation of this specification.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 29]
|
|||
|
|
|||
|
RFC 7519 JSON Web Token (JWT) May 2015
|
|||
|
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Michael B. Jones
|
|||
|
Microsoft
|
|||
|
|
|||
|
EMail: mbj@microsoft.com
|
|||
|
URI: http://self-issued.info/
|
|||
|
|
|||
|
|
|||
|
John Bradley
|
|||
|
Ping Identity
|
|||
|
|
|||
|
EMail: ve7jtb@ve7jtb.com
|
|||
|
URI: http://www.thread-safe.com/
|
|||
|
|
|||
|
|
|||
|
Nat Sakimura
|
|||
|
Nomura Research Institute
|
|||
|
|
|||
|
EMail: n-sakimura@nri.co.jp
|
|||
|
URI: http://nat.sakimura.org/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Jones, et al. Standards Track [Page 30]
|
|||
|
|