draft-ietf-oauth-proof-of-possession-02.txt | draft-ietf-oauth-proof-of-possession-03.txt | |||
---|---|---|---|---|
OAuth Working Group M. Jones | OAuth Working Group M. Jones | |||
Internet-Draft Microsoft | Internet-Draft Microsoft | |||
Intended status: Standards Track J. Bradley | Intended status: Standards Track J. Bradley | |||
Expires: September 10, 2015 Ping Identity | Expires: January 7, 2016 Ping Identity | |||
H. Tschofenig | H. Tschofenig | |||
ARM Limited | ARM Limited | |||
March 9, 2015 | July 6, 2015 | |||
Proof-Of-Possession Semantics for JSON Web Tokens (JWTs) | Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs) | |||
draft-ietf-oauth-proof-of-possession-02 | draft-ietf-oauth-proof-of-possession-03 | |||
Abstract | Abstract | |||
This specification defines how to express a declaration in a JSON Web | This specification defines how to express a declaration in a JSON Web | |||
Token (JWT) that the presenter of the JWT possesses a particular key | Token (JWT) that the presenter of the JWT possesses a particular key | |||
and that the recipient can cryptographically confirm proof-of- | and that the recipient can cryptographically confirm proof-of- | |||
possession of the key by the presenter. This property is also | possession of the key by the presenter. This property is also | |||
sometimes described as the presenter being a holder-of-key. | sometimes described as the presenter being a holder-of-key. | |||
Status of this Memo | Status of this Memo | |||
skipping to change at page 1, line 37 | skipping to change at page 1, line 37 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on September 10, 2015. | This Internet-Draft will expire on January 7, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 13 | skipping to change at page 2, line 13 | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 4 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Proof-Of-Possession Representation . . . . . . . . . . . . . . 4 | 3. Representations for Proof-of-Possession Keys . . . . . . . . . 4 | |||
3.1. Proof-of-Possession of an Asymmetric Key . . . . . . . . . 5 | 3.1. Representation for an Asymmetric Proof-of-Possession | |||
3.2. Proof-of-Possession of a Symmetric Key . . . . . . . . . . 5 | Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.3. Proof-of-Possession Using a Key ID . . . . . . . . . . . . 6 | 3.2. Representation for an Encrypted Symmetric | |||
Proof-of-Possession Key . . . . . . . . . . . . . . . . . 5 | ||||
3.3. Representation of a Key ID for a Proof-of-Possession | ||||
Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
3.4. Confirmation . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.4. Confirmation . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.5. Specifics Intentionally Not Specified . . . . . . . . . . 7 | 3.5. Specifics Intentionally Not Specified . . . . . . . . . . 7 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | |||
5.1. JSON Web Token Claims Registration . . . . . . . . . . . . 9 | 5.1. JSON Web Token Claims Registration . . . . . . . . . . . . 9 | |||
5.1.1. Registry Contents . . . . . . . . . . . . . . . . . . 9 | 5.1.1. Registry Contents . . . . . . . . . . . . . . . . . . 10 | |||
5.2. JWT Confirmation Methods Registry . . . . . . . . . . . . 10 | 5.2. JWT Confirmation Methods Registry . . . . . . . . . . . . 10 | |||
5.2.1. Registration Template . . . . . . . . . . . . . . . . 10 | 5.2.1. Registration Template . . . . . . . . . . . . . . . . 10 | |||
5.2.2. Initial Registry Contents . . . . . . . . . . . . . . 10 | 5.2.2. Initial Registry Contents . . . . . . . . . . . . . . 10 | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | 6.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . . 11 | 6.2. Informative References . . . . . . . . . . . . . . . . . . 11 | |||
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 12 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 12 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 12 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
1. Introduction | 1. Introduction | |||
This specification defines how to express a declaration in a JSON Web | This specification defines how to express a declaration in a JSON Web | |||
Token (JWT) [JWT] that the presenter of the JWT possesses a | Token (JWT) [JWT] that the presenter of the JWT possesses a | |||
particular key and that the recipient can cryptographically confirm | particular key and that the recipient can cryptographically confirm | |||
proof-of-possession of the key by the presenter. This property is | proof-of-possession of the key by the presenter. This property is | |||
also sometimes described as the presenter being a holder-of-key. | also sometimes described as the presenter being a holder-of-key. | |||
Envision the following two use cases. The first use case describes | Envision the following two use cases. The first use case describes | |||
the use of a symmetric proof-of-possession key and the second use | the use of a symmetric proof-of-possession key and the second use | |||
case uses an asymmetric proof-of-possession key. | case uses an asymmetric proof-of-possession key. | |||
An OAuth 2.0 authorization server generates a JWT and places an | An issuer generates a JWT and places an encrypted symmetric key | |||
encrypted symmetric key inside the newly introduced confirmation | inside the newly introduced confirmation claim. This symmetric key | |||
claim. This symmetric key is encrypted with a key known only to the | is encrypted with a key known only to the issuer and the recipient. | |||
authorization server and the recipient. The entire JWT is then | The entire JWT is then integrity protected by the issuer. The JWT is | |||
integrity protected by the issuer (the authorization server). The | then sent to the presenter. Since the presenter is unable to obtain | |||
JWT is then sent to the presenter. Since the presenter is unable to | the encrypted symmetric key from the JWT itself, the issuer conveys | |||
obtain the encrypted symmetric key from the JWT itself, the | that symmetric key separately to the presenter. Now, the presenter | |||
authorization server conveys that symmetric key separately to the | is in possession of the symmetric key as well as the JWT (which | |||
presenter. Now, the presenter is in possession of the symmetric key | includes the confirmation claim member). When the presenter needs to | |||
as well as the JWT (which includes the confirmation claim member). | present the JWT to the recipient, it also needs to demonstrate | |||
When the presenter needs to present the JWT to the recipient, it also | possession of the symmetric key; the presenter, for example, uses the | |||
needs to demonstrate possession of the symmetric key; the presenter, | symmetric key in a challenge/response protocol with the recipient. | |||
for example, uses the symmetric key in a challenge/response protocol | The recipient is then able to verify that it is interacting with the | |||
with the recipient. The recipient is then able to verify that it is | genuine presenter by decrypting the JWK contained inside the | |||
interacting with the genuine presenter by decrypting the JWK | confirmation claim of the JWT. By doing this, the recipient obtains | |||
contained inside the confirmation claim of the JWT. By doing this, | the symmetric key, which it then uses to verify cryptographically | |||
the recipient obtains the symmetric key, which it then uses to verify | protected messages exchanged with the presenter. This symmetric key | |||
cryptographically protected messages exchanged with the presenter. | mechanism described above is conceptually similar to the use of | |||
This symmetric key mechanism described above is conceptually similar | Kerberos tickets. | |||
to the use of Kerberos tickets. | ||||
In the second case, consider a presenter that generates a public/ | In the second case, consider a presenter that generates a public/ | |||
private key pair. It then sends the public key to an OAuth 2.0 | private key pair. It then sends the public key to an issuer, which | |||
authorization server (the issuer), which creates a JWT and places a | creates a JWT and places a public key (or an identifier for it) | |||
public key (or an identifier for it) inside the newly introduced | inside the newly introduced confirmation claim. The entire JWT is | |||
confirmation claim. The entire JWT is integrity protected using a | integrity protected using a digital signature to protect it against | |||
digital signature to protect it against modifications. The JWT is | modifications. The JWT is then sent to the presenter. When the | |||
then sent to the presenter. When the presenter needs to present the | presenter needs to present the JWT to the recipient, it also needs to | |||
JWT to the recipient, it also needs to demonstrate possession of the | demonstrate possession of the private key. The presenter, for | |||
private key. The presenter, for example, uses the private key in a | example, uses the private key in a TLS exchange with the recipient or | |||
TLS exchange with the recipient. The recipient is able to verify | signs a nonce with the private key. The recipient is able to verify | |||
that it is interacting with the genuine presenter by extracting the | that it is interacting with the genuine presenter by extracting the | |||
public key from the confirmation claim of the JWT (after verifying | public key from the confirmation claim of the JWT (after verifying | |||
the digital signature of the JWT) and utilizing it with the private | the digital signature of the JWT) and utilizing it with the private | |||
key in the TLS exchange. The asymmetric key mechanism described | key in the TLS exchange or checking the nonce signature. | |||
above is conceptually similar to a certificate. | ||||
In both cases the JWT may contain other claims that are needed by the | In both cases the JWT may contain other claims that are needed by the | |||
application. | application. | |||
1.1. Notational Conventions | 1.1. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in RFC | "OPTIONAL" in this document are to be interpreted as described in RFC | |||
2119 [RFC2119]. | 2119 [RFC2119]. | |||
skipping to change at page 4, line 33 | skipping to change at page 4, line 31 | |||
These terms are defined by this specification: | These terms are defined by this specification: | |||
Issuer | Issuer | |||
Party that creates the JWT and binds the proof-of-possession key | Party that creates the JWT and binds the proof-of-possession key | |||
to it. | to it. | |||
Presenter | Presenter | |||
Party that proves possession of a private key (for asymmetric key | Party that proves possession of a private key (for asymmetric key | |||
cryptography) or secret key (for symmetric key cryptography) to a | cryptography) or secret key (for symmetric key cryptography) to a | |||
recipient. The presenter may be the issuer or a party different | recipient. The presenter may be the issuer or a party distinct | |||
from the issuer. | from the issuer. | |||
Recipient | Recipient | |||
Party that receives the JWT containing the proof-of-possession key | Party that receives the JWT containing the proof-of-possession key | |||
information from the presenter. | information from the presenter. | |||
3. Proof-Of-Possession Representation | 3. Representations for Proof-of-Possession Keys | |||
The presenter of a JWT declares that it possesses a particular key | The issuer of a JWT declares that the presenter possesses a | |||
and that the recipient can cryptographically confirm proof-of- | particular key and that the recipient can cryptographically confirm | |||
possession of the key by the presenter by including a "cnf" | proof-of-possession of the key by the presenter by including a "cnf" | |||
(confirmation) claim in the JWT whose value is a JSON object, with | (confirmation) claim in the JWT whose value is a JSON object, with a | |||
the JSON object containing a "jwk" (JSON Web Key) or "kid" (key ID) | JSON object containing a "jwk" (JSON Web Key) member, a "jwe" (JSON | |||
member identifying the key. | Web Encryption) member, or a "kid" (key ID) member identifying the | |||
key. | ||||
The presenter can be identified in one of two ways by the JWT, | The presenter can be identified in one of several ways by the JWT, | |||
depending upon the application requirements. If the JWT contains a | depending upon the application requirements. If the JWT contains a | |||
"sub" (subject) claim, the presenter is the subject identified by the | "sub" (subject) claim, the presenter is normally the subject | |||
JWT. (In some applications, the subject identifier will be relative | identified by the JWT. (In some applications, the subject identifier | |||
to the issuer identified by the "iss" (issuer) claim.) If the JWT | will be relative to the issuer identified by the "iss" (issuer) | |||
contains no "sub" (subject) claim, the presenter is the issuer | claim.) If the JWT contains no "sub" (subject) claim, the presenter | |||
identified by the JWT using the "iss" (issuer) claim. The case in | is normally the issuer identified by the JWT using the "iss" (issuer) | |||
which the presenter is the subject of the JWT is analogous to SAML | claim. The case in which the presenter is the subject of the JWT is | |||
2.0 [OASIS.saml-core-2.0-os] SubjectConfirmation usage. At least one | analogous to SAML 2.0 [OASIS.saml-core-2.0-os] SubjectConfirmation | |||
of the "sub" and "iss" claims MUST be present in the JWT, and in some | usage. At least one of the "sub" and "iss" claims MUST be present in | |||
use cases, both MUST be present. | the JWT. Some use cases may require that both be present. | |||
3.1. Proof-of-Possession of an Asymmetric Key | Another means used by some applications to identify the presenter is | |||
an explicit claim, such as the "azp" (authorized party) claim defined | ||||
by OpenID Connect [OpenID.Core]. Ultimately, the means of | ||||
identifying the presenter is application-specific, as is the means of | ||||
confirming possession of the key that is communicated. | ||||
3.1. Representation for an Asymmetric Proof-of-Possession Key | ||||
When the key held by the presenter is an asymmetric private key, the | When the key held by the presenter is an asymmetric private key, the | |||
value of the "jwk" member is a JSON Web Key (JWK) [JWK] representing | "jwk" member is a JSON Web Key (JWK) [JWK] representing the | |||
the corresponding asymmetric public key. The following example | corresponding asymmetric public key. The following example | |||
demonstrates such a declaration in the JWT Claims Set of a JWT: | demonstrates such a declaration in the JWT Claims Set of a JWT: | |||
{ | { | |||
"iss": "https://server.example.com", | "iss": "https://server.example.com", | |||
"aud": "https://client.example.org", | "aud": "https://client.example.org", | |||
"exp": "1361398824", | "exp": "1361398824", | |||
"nbf": "1360189224", | "nbf": "1360189224", | |||
"cnf":{ | "cnf":{ | |||
"jwk":{ | "jwk":{ | |||
"kty": "EC", | "kty": "EC", | |||
skipping to change at page 5, line 41 | skipping to change at page 5, line 47 | |||
"x": "18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM", | "x": "18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM", | |||
"y": "-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA" | "y": "-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA" | |||
} | } | |||
} | } | |||
} | } | |||
The JWK MUST contain the required key members for a JWK of that key | The JWK MUST contain the required key members for a JWK of that key | |||
type and MAY contain other JWK members, including the "kid" (key ID) | type and MAY contain other JWK members, including the "kid" (key ID) | |||
member. | member. | |||
3.2. Proof-of-Possession of a Symmetric Key | 3.2. Representation for an Encrypted Symmetric Proof-of-Possession Key | |||
When the key held by the presenter is a symmetric key, the value of | When the key held by the presenter is a symmetric key, the "jwe" | |||
the "jwk" member is an encrypted JSON Web Key (JWK) [JWK] encrypted | member is an encrypted JSON Web Key (JWK) [JWK] encrypted to a key | |||
to a key known to the recipient using the JWE Compact Serialization | known to the recipient using the JWE Compact Serialization containing | |||
containing the symmetric key. The rules for encrypting a JWK are | the symmetric key. The rules for encrypting a JWK are found in | |||
found in Section 6 of the JSON Web Key [JWK] specification. | Section 7 of the JSON Web Key [JWK] specification. | |||
The following example illustrates a symmetric key that could | The following example illustrates a symmetric key that could | |||
subsequently be encrypted for use in the "jwk" member: | subsequently be encrypted for use in the "jwe" member: | |||
{ | { | |||
"kty": "oct", | "kty": "oct", | |||
"alg": "HS256", | "alg": "HS256", | |||
"k": "ZoRSOrFzN_FzUA5XKMYoVHyzff5oRJxl-IXRtztJ6uE" | "k": "ZoRSOrFzN_FzUA5XKMYoVHyzff5oRJxl-IXRtztJ6uE" | |||
} | } | |||
The UTF-8 [RFC3629] encoding of this JWK would be used as the JWE | The UTF-8 [RFC3629] encoding of this JWK would be used as the JWE | |||
Plaintext when encrypting the key. | Plaintext when encrypting the key. | |||
The following example is a JWE Header that could be used when | The following example is a JWE Header that could be used when | |||
encrypting this key: | encrypting this key: | |||
{ | { | |||
"alg": "RSA1_5", | "alg": "RSA1_5", | |||
"enc": "A128CBC-HS256", | "enc": "A128CBC-HS256" | |||
"cty": "jwk+json" | ||||
} | } | |||
The following example JWT Claims Set of a JWT illustrates the use of | The following example JWT Claims Set of a JWT illustrates the use of | |||
an encrypted symmetric key as the "jwk" claim value: | an encrypted symmetric key as the "jwe" member value: | |||
{ | { | |||
"iss": "https://server.example.com", | "iss": "https://server.example.com", | |||
"sub": "24400320", | "sub": "24400320", | |||
"aud": "s6BhdRkqt3", | "aud": "s6BhdRkqt3", | |||
"nonce": "n-0S6_WzA2Mj", | "nonce": "n-0S6_WzA2Mj", | |||
"exp": 1311281970, | "exp": 1311281970, | |||
"iat": 1311280970, | "iat": 1311280970, | |||
"cnf":{ | "cnf":{ | |||
"jwk": | "jwe": | |||
"eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiY3R5Ijoi | "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0. | |||
andrK2pzb24ifQ. ... (remainder of JWE omitted for brevity)" | (remainder of JWE omitted for brevity)" | |||
} | } | |||
} | } | |||
Note that the case in which the "jwk" claim contains an unencoded JWK | 3.3. Representation of a Key ID for a Proof-of-Possession Key | |||
value and the case in which it contains an encrypted JWK value can be | ||||
distinguished by the type of the member value. In the first case, | ||||
the value is a JSON object containing the JWK and in the second case, | ||||
the value is a string containing the JWE JSON Serialization of the | ||||
encrypted JWK representation. | ||||
3.3. Proof-of-Possession Using a Key ID | ||||
The proof-of-possession key can also be identified by the use of a | The proof-of-possession key can also be identified by the use of a | |||
Key ID instead of communicating the actual key, provided the | Key ID instead of communicating the actual key, provided the | |||
recipient is able to obtain the identified key using the Key ID. In | recipient is able to obtain the identified key using the Key ID. In | |||
this case, the presenter of a JWT declares that it possesses a | this case, the issuer of a JWT declares that the presenter possesses | |||
particular key and that the recipient can cryptographically confirm | a particular key and that the recipient can cryptographically confirm | |||
proof-of-possession of the key by the presenter by including a "cnf" | proof-of-possession of the key by the presenter by including a "cnf" | |||
(confirmation) claim in the JWT whose value is a JSON object, with | (confirmation) claim in the JWT whose value is a JSON object, with | |||
the JSON object containing a "kid" (key ID) member identifying the | the JSON object containing a "kid" (key ID) member identifying the | |||
key. | key. | |||
The following example demonstrates such a declaration in the JWT | The following example demonstrates such a declaration in the JWT | |||
Claims Set of a JWT: | Claims Set of a JWT: | |||
{ | { | |||
"iss": "https://server.example.com", | "iss": "https://server.example.com", | |||
skipping to change at page 7, line 26 | skipping to change at page 7, line 24 | |||
"exp": "1361398824", | "exp": "1361398824", | |||
"nbf": "1360189224", | "nbf": "1360189224", | |||
"cnf":{ | "cnf":{ | |||
"kid": "dfd1aa97-6d8d-4575-a0fe-34b96de2bfad" | "kid": "dfd1aa97-6d8d-4575-a0fe-34b96de2bfad" | |||
} | } | |||
} | } | |||
3.4. Confirmation | 3.4. Confirmation | |||
The "cnf" (confirmation) claim is used in the JWT to contain the | The "cnf" (confirmation) claim is used in the JWT to contain the | |||
"jwk" or "kid" member because a proof-of-possession key may not be | "jwk", "jwe", or "kid" member because a proof-of-possession key may | |||
the only means of confirming the authenticity of the token. This is | not be the only means of confirming the authenticity of the token. | |||
analogous to the SAML 2.0 [OASIS.saml-core-2.0-os] | This is analogous to the SAML 2.0 [OASIS.saml-core-2.0-os] | |||
SubjectConfirmation element, in which a number of different subject | SubjectConfirmation element, in which a number of different subject | |||
confirmation methods can be included, including proof-of-possession | confirmation methods can be included, including proof-of-possession | |||
key information. When a recipient receives a "cnf" claim with a | key information. When a recipient receives a "cnf" claim with a | |||
member that it does not understand, it MUST ignore that member. | member that it does not understand, it MUST ignore that member. | |||
This specification defines a registry for these members in | This specification establishes the IANA "JWT Confirmation Methods" | |||
Section 5.2 and registers the "jwk" and "kid" members within the | registry for these members in Section 5.2 and registers the "jwk", | |||
registry. | "jwe", and "kid" members within the registry. Other specifications | |||
can register other members used for confirmation, including members | ||||
for conveying other proof-of-possession keys, possibly using | ||||
different key representations. | ||||
3.5. Specifics Intentionally Not Specified | 3.5. Specifics Intentionally Not Specified | |||
Proof-of-possession is typically demonstrated by having the presenter | Proof-of-possession is typically demonstrated by having the presenter | |||
sign a value determined by the recipient using the key possessed by | sign a value determined by the recipient using the key possessed by | |||
the presenter. This value is sometimes called a "nonce" or a | the presenter. This value is sometimes called a "nonce" or a | |||
"challenge". | "challenge". | |||
The means of communicating the nonce and the nature of its contents | The means of communicating the nonce and the nature of its contents | |||
are intentionally not described in this specification, as different | are intentionally not described in this specification, as different | |||
skipping to change at page 8, line 49 | skipping to change at page 9, line 5 | |||
legitimate concern, it is outside the scope of this specification, | legitimate concern, it is outside the scope of this specification, | |||
since demonstration the possession of the key associated with the | since demonstration the possession of the key associated with the | |||
"cnf" claim is not covered by this specification. For more details, | "cnf" claim is not covered by this specification. For more details, | |||
please consult [I-D.ietf-oauth-pop-architecture]. | please consult [I-D.ietf-oauth-pop-architecture]. | |||
5. IANA Considerations | 5. IANA Considerations | |||
The following registration procedure is used for all the registries | The following registration procedure is used for all the registries | |||
established by this specification. | established by this specification. | |||
Values are registered with a Specification Required [RFC5226] after a | Values are registered on a Specification Required [RFC5226] basis | |||
three-week review period on the [TBD]@ietf.org mailing list, on the | after a three-week review period on the oauth-pop-reg-review@ietf.org | |||
advice of one or more Designated Experts. However, to allow for the | mailing list, on the advice of one or more Designated Experts. | |||
allocation of values prior to publication, the Designated Expert(s) | However, to allow for the allocation of values prior to publication, | |||
may approve registration once they are satisfied that such a | the Designated Experts may approve registration once they are | |||
specification will be published. | satisfied that such a specification will be published. [[ Note to the | |||
RFC Editor: The name of the mailing list should be determined in | ||||
consultation with the IESG and IANA. Suggested name: | ||||
oauth-pop-reg-review@ietf.org. ]] | ||||
Registration requests must be sent to the [TBD]@ietf.org mailing list | Registration requests sent to the mailing list for review should use | |||
for review and comment, with an appropriate subject (e.g., "Request | an appropriate subject (e.g., "Request to register JWT Confirmation | |||
for access token type: example"). [[ Note to the RFC Editor: The name | Method: example"). | |||
of the mailing list should be determined in consultation with the | ||||
IESG and IANA. Suggested name: oauth-pop-reg-review@ietf.org. ]] | ||||
Within the review period, the Designated Expert(s) will either | Within the review period, the Designated Experts will either approve | |||
approve or deny the registration request, communicating this decision | or deny the registration request, communicating this decision to the | |||
to the review list and IANA. Denials should include an explanation | review list and IANA. Denials should include an explanation and, if | |||
and, if applicable, suggestions as to how to make the request | applicable, suggestions as to how to make the request successful. | |||
successful. Registration requests that are undetermined for a period | Registration requests that are undetermined for a period longer than | |||
longer than 21 days can be brought to the IESG's attention (using the | 21 days can be brought to the IESG's attention (using the | |||
iesg@ietf.org mailing list) for resolution. | iesg@ietf.org mailing list) for resolution. | |||
Criteria that should be applied by the Designated Expert(s) includes | Criteria that should be applied by the Designated Experts includes | |||
determining whether the proposed registration duplicates existing | determining whether the proposed registration duplicates existing | |||
functionality, determining whether it is likely to be of general | functionality, determining whether it is likely to be of general | |||
applicability or whether it is useful only for a single application, | applicability or whether it is useful only for a single application, | |||
and whether the registration makes sense. | and whether the registration makes sense. | |||
IANA must only accept registry updates from the Designated Expert(s) | IANA must only accept registry updates from the Designated Experts | |||
and should direct all requests for registration to the review mailing | and should direct all requests for registration to the review mailing | |||
list. | list. | |||
It is suggested that multiple Designated Experts be appointed who are | It is suggested that multiple Designated Experts be appointed who are | |||
able to represent the perspectives of different applications using | able to represent the perspectives of different applications using | |||
this specification, in order to enable broadly-informed review of | this specification, in order to enable broadly-informed review of | |||
registration decisions. In cases where a registration decision could | registration decisions. In cases where a registration decision could | |||
be perceived as creating a conflict of interest for a particular | be perceived as creating a conflict of interest for a particular | |||
Expert, that Expert should defer to the judgment of the other | Expert, that Expert should defer to the judgment of the other | |||
Expert(s). | Experts. | |||
5.1. JSON Web Token Claims Registration | 5.1. JSON Web Token Claims Registration | |||
This specification registers the "cnf" claim in the IANA JSON Web | This specification registers the "cnf" claim in the IANA JSON Web | |||
Token Claims registry defined in [JWT]. | Token Claims registry defined in [JWT]. | |||
5.1.1. Registry Contents | 5.1.1. Registry Contents | |||
o Claim Name: "cnf" | o Claim Name: "cnf" | |||
o Claim Description: Confirmation | o Claim Description: Confirmation | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): Section 3.4 of this document | o Specification Document(s): Section 3.4 of this document | |||
5.2. JWT Confirmation Methods Registry | 5.2. JWT Confirmation Methods Registry | |||
This specification establishes the IANA JWT Confirmation Methods | This specification establishes the IANA "JWT Confirmation Methods" | |||
registry for JWT "cnf" member values. The registry records the | registry for JWT "cnf" member values. The registry records the | |||
confirmation method member and a reference to the specification that | confirmation method member and a reference to the specification that | |||
defines it. | defines it. | |||
5.2.1. Registration Template | 5.2.1. Registration Template | |||
Confirmation Method Value: | Confirmation Method Value: | |||
The name requested (e.g., "example"). Because a core goal of this | The name requested (e.g., "kid"). Because a core goal of this | |||
specification is for the resulting representations to be compact, | specification is for the resulting representations to be compact, | |||
it is RECOMMENDED that the name be short -- not to exceed 8 | it is RECOMMENDED that the name be short -- not to exceed 8 | |||
characters without a compelling reason to do so. This name is | characters without a compelling reason to do so. This name is | |||
case-sensitive. Names may not match other registered names in a | case-sensitive. Names may not match other registered names in a | |||
case-insensitive manner unless the Designated Expert(s) state that | case-insensitive manner unless the Designated Experts state that | |||
there is a compelling reason to allow an exception in this | there is a compelling reason to allow an exception. | |||
particular case. | ||||
Confirmation Method Description: | Confirmation Method Description: | |||
Brief description of the confirmation method (e.g., "Example | Brief description of the confirmation method (e.g., "Key | |||
description"). | Identifier"). | |||
Change Controller: | Change Controller: | |||
For Standards Track RFCs, state "IESG". For others, give the name | For Standards Track RFCs, list the "IESG". For others, give the | |||
of the responsible party. Other details (e.g., postal address, | name of the responsible party. Other details (e.g., postal | |||
email address, home page URI) may also be included. | address, email address, home page URI) may also be included. | |||
Specification Document(s): | Specification Document(s): | |||
Reference to the document(s) that specify the parameter, | Reference to the document or documents that specify the parameter, | |||
preferably including URI(s) that can be used to retrieve copies of | preferably including URIs that can be used to retrieve copies of | |||
the document(s). An indication of the relevant sections may also | the documents. An indication of the relevant sections may also be | |||
be included but is not required. | included but is not required. | |||
5.2.2. Initial Registry Contents | 5.2.2. Initial Registry Contents | |||
o Confirmation Method Value: "jwk" | o Confirmation Method Value: "jwk" | |||
o Confirmation Method Description: JSON Web Key or Encrypted JSON | o Confirmation Method Description: JSON Web Key Representing Public | |||
Web Key | Key | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): Section 3.1 of [[ this document ]] | o Specification Document(s): Section 3.1 of [[ this document ]] | |||
o Confirmation Method Value: "jwe" | ||||
o Confirmation Method Description: Encrypted JSON Web Key | ||||
o Change Controller: IESG | ||||
o Specification Document(s): Section 3.2 of [[ this document ]] | ||||
o Confirmation Method Value: "kid" | o Confirmation Method Value: "kid" | |||
o Confirmation Method Description: Key Identifier | o Confirmation Method Description: Key Identifier | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): Section 3.3 of [[ this document ]] | o Specification Document(s): Section 3.3 of [[ this document ]] | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", | [JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", | |||
draft-ietf-jose-json-web-encryption (work in progress), | RFC 7516, May 2015, | |||
January 2015. | <http://www.rfc-editor.org/info/rfc7516>. | |||
[JWK] Jones, M., "JSON Web Key (JWK)", | [JWK] Jones, M., "JSON Web Key (JWK)", RFC 7517, May 2015, | |||
draft-ietf-jose-json-web-key (work in progress), | <http://www.rfc-editor.org/info/rfc7517>. | |||
January 2015. | ||||
[JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", draft-ietf-oauth-json-web-token (work in | (JWT)", RFC 7519, May 2015, | |||
progress), December 2014. | <http://www.rfc-editor.org/info/rfc7519>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD 63, RFC 3629, November 2003. | 10646", STD 63, RFC 3629, November 2003. | |||
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
IANA Considerations Section in RFCs", BCP 26, RFC 5226, | IANA Considerations Section in RFCs", BCP 26, RFC 5226, | |||
May 2008. | May 2008. | |||
6.2. Informative References | 6.2. Informative References | |||
[I-D.ietf-oauth-pop-architecture] | [I-D.ietf-oauth-pop-architecture] | |||
Hunt, P., ietf@justin.richer.org, i., Mills, W., Mishra, | Hunt, P., Richer, J., Mills, W., Mishra, P., and H. | |||
P., and H. Tschofenig, "OAuth 2.0 Proof-of-Possession | Tschofenig, "OAuth 2.0 Proof-of-Possession (PoP) Security | |||
(PoP) Security Architecture", | Architecture", draft-ietf-oauth-pop-architecture-01 (work | |||
draft-ietf-oauth-pop-architecture-01 (work in progress), | in progress), March 2015. | |||
March 2015. | ||||
[OASIS.saml-core-2.0-os] | [OASIS.saml-core-2.0-os] | |||
Cantor, S., Kemp, J., Philpott, R., and E. Maler, | Cantor, S., Kemp, J., Philpott, R., and E. Maler, | |||
"Assertions and Protocol for the OASIS Security Assertion | "Assertions and Protocol for the OASIS Security Assertion | |||
Markup Language (SAML) V2.0", OASIS Standard saml-core- | Markup Language (SAML) V2.0", OASIS Standard saml-core- | |||
2.0-os, March 2005. | 2.0-os, March 2005. | |||
[OpenID.Core] | ||||
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | ||||
C. Mortimore, "OpenID Connect Core 1.0", November 2014, | ||||
<http://openid.net/specs/openid-connect-core-1_0.html>. | ||||
Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
The authors wish to thank James Manger for his review of the | The authors wish to thank Brian Campbell, James Manger, Justin | |||
specification. | Richer, and Nat Sakimura for their reviews of the specification. | |||
Appendix B. Document History | Appendix B. Document History | |||
[[ to be removed by the RFC Editor before publication as an RFC ]] | [[ to be removed by the RFC Editor before publication as an RFC ]] | |||
-03 | ||||
o Separated the "jwk" and "jwe" confirmation members; the former | ||||
represents a public key as a JWK and the latter represents a | ||||
symmetric key as a JWE encrypted JWK. | ||||
o Changed the title to indicate that a proof-of-possession key is | ||||
being communicated. | ||||
o Updated language that formerly assumed that the issuer was an | ||||
OAuth 2.0 authorization server. | ||||
o Described ways that applications can choose to identify the | ||||
presenter, including use of the "iss", "sub", and "azp" claims. | ||||
o Harmonized the registry language with that used in JWT [RFC 7519]. | ||||
o Addressed other issues identified during working group last call. | ||||
o Referenced the JWT and JOSE RFCs. | ||||
-02 | -02 | |||
o Defined the terms Issuer, Presenter, and Recipient and updated | o Defined the terms Issuer, Presenter, and Recipient and updated | |||
their usage within the document. | their usage within the document. | |||
o Added a description of a use case using an asymmetric proof-of- | o Added a description of a use case using an asymmetric proof-of- | |||
possession key to the introduction. | possession key to the introduction. | |||
o Added the "kid" (key ID) confirmation method. | o Added the "kid" (key ID) confirmation method. | |||
End of changes. 48 change blocks. | ||||
142 lines changed or deleted | 175 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |