| < draft-ietf-oauth-proof-of-possession-03.txt | draft-ietf-oauth-proof-of-possession-04.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: January 7, 2016 Ping Identity | Expires: February 29, 2016 Ping Identity | |||
| H. Tschofenig | H. Tschofenig | |||
| ARM Limited | ARM Limited | |||
| July 6, 2015 | August 28, 2015 | |||
| Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs) | Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs) | |||
| draft-ietf-oauth-proof-of-possession-03 | draft-ietf-oauth-proof-of-possession-04 | |||
| 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 January 7, 2016. | This Internet-Draft will expire on February 29, 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 14 ¶ | skipping to change at page 2, line 14 ¶ | |||
| 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. Representations for Proof-of-Possession Keys . . . . . . . . . 4 | 3. Representations for Proof-of-Possession Keys . . . . . . . . . 4 | |||
| 3.1. Representation for an Asymmetric Proof-of-Possession | 3.1. Confirmation Claim . . . . . . . . . . . . . . . . . . . . 5 | |||
| Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Representation of an Asymmetric Proof-of-Possession Key . 5 | |||
| 3.2. Representation for an Encrypted Symmetric | 3.3. Representation of an Encrypted Symmetric | |||
| Proof-of-Possession Key . . . . . . . . . . . . . . . . . 5 | Proof-of-Possession Key . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. Representation of a Key ID for a Proof-of-Possession | 3.4. Representation of a Key ID for a Proof-of-Possession | |||
| Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.4. Confirmation . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.5. Representation of a URL for a Proof-of-Possession Key . . 8 | |||
| 3.5. Specifics Intentionally Not Specified . . . . . . . . . . 7 | 3.6. Specifics Intentionally Not Specified . . . . . . . . . . 8 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 5. Privacy Considerations . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. JSON Web Token Claims Registration . . . . . . . . . . . . 9 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.1.1. Registry Contents . . . . . . . . . . . . . . . . . . 10 | 6.1. JSON Web Token Claims Registration . . . . . . . . . . . . 11 | |||
| 5.2. JWT Confirmation Methods Registry . . . . . . . . . . . . 10 | 6.1.1. Registry Contents . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2.1. Registration Template . . . . . . . . . . . . . . . . 10 | 6.2. JWT Confirmation Methods Registry . . . . . . . . . . . . 11 | |||
| 5.2.2. Initial Registry Contents . . . . . . . . . . . . . . 10 | 6.2.1. Registration Template . . . . . . . . . . . . . . . . 11 | |||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6.2.2. Initial Registry Contents . . . . . . . . . . . . . . 12 | |||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.2. Informative References . . . . . . . . . . . . . . . . . . 11 | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | 7.2. Informative References . . . . . . . . . . . . . . . . . . 13 | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 12 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 13 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| 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. See | |||
| [I-D.ietf-oauth-pop-architecture] for a further discussion of key | ||||
| confirmation. | ||||
| 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 issuer generates a JWT and places an encrypted symmetric key | An issuer generates a JWT and places an encrypted symmetric key | |||
| inside the newly introduced confirmation claim. This symmetric key | inside the newly introduced confirmation claim. This symmetric key | |||
| is encrypted with a key known only to the issuer and the recipient. | is encrypted with a key known only to the issuer and the recipient. | |||
| The entire JWT is then integrity protected by the issuer. The JWT is | The entire JWT is then integrity protected by the issuer. The JWT is | |||
| then sent to the presenter. Since the presenter is unable to obtain | then sent to the presenter. Since the presenter is unable to obtain | |||
| skipping to change at page 3, line 52 ¶ | skipping to change at page 4, line 5 ¶ | |||
| modifications. The JWT is then sent to the presenter. When the | modifications. The JWT is then sent to the presenter. When the | |||
| presenter needs to present the JWT to the recipient, it also needs to | presenter needs to present the JWT to the recipient, it also needs to | |||
| demonstrate possession of the private key. The presenter, for | demonstrate possession of the private key. The presenter, for | |||
| example, uses the private key in a TLS exchange with the recipient or | example, uses the private key in a TLS exchange with the recipient or | |||
| signs a nonce with the private key. 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 or checking the nonce signature. | key in the TLS exchange or checking the nonce signature. | |||
| 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 | |||
| application. | the 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]. | |||
| Unless otherwise noted, all the protocol parameter names and values | Unless otherwise noted, all the protocol parameter names and values | |||
| are case sensitive. | are case sensitive. | |||
| skipping to change at page 4, line 31 ¶ | skipping to change at page 4, line 33 ¶ | |||
| 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 distinct | recipient. | |||
| 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. Representations for Proof-of-Possession Keys | 3. Representations for Proof-of-Possession Keys | |||
| The issuer of a JWT declares that the presenter possesses a | The issuer of a JWT declares that the presenter 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 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 a | (confirmation) claim in the JWT whose value is a JSON object. | |||
| JSON object containing a "jwk" (JSON Web Key) member, a "jwe" (JSON | Members in the JSON object identify the proof-of-possession key. | |||
| Web Encryption) member, or a "kid" (key ID) member identifying the | ||||
| key. | ||||
| The presenter can be identified in one of several 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 normally the subject | "sub" (subject) claim, the presenter is normally the subject | |||
| identified by the JWT. (In some applications, the subject identifier | identified by the JWT. (In some applications, the subject identifier | |||
| will be relative to the issuer identified by the "iss" (issuer) | will be relative to the issuer identified by the "iss" (issuer) | |||
| claim.) If the JWT contains no "sub" (subject) claim, the presenter | claim.) If the JWT contains no "sub" (subject) claim, the presenter | |||
| is normally the issuer identified by the JWT using the "iss" (issuer) | is normally the issuer identified by the JWT using the "iss" (issuer) | |||
| claim. The case in which the presenter is the subject of the JWT is | claim. The case in which the presenter is the subject of the JWT is | |||
| analogous to SAML 2.0 [OASIS.saml-core-2.0-os] SubjectConfirmation | analogous to SAML 2.0 [OASIS.saml-core-2.0-os] SubjectConfirmation | |||
| usage. At least one of the "sub" and "iss" claims MUST be present in | usage. At least one of the "sub" and "iss" claims MUST be present in | |||
| the JWT. Some use cases may require that both be present. | the JWT. Some use cases may require that both be present. | |||
| Another means used by some applications to identify the presenter is | Another means used by some applications to identify the presenter is | |||
| an explicit claim, such as the "azp" (authorized party) claim defined | an explicit claim, such as the "azp" (authorized party) claim defined | |||
| by OpenID Connect [OpenID.Core]. Ultimately, the means of | by OpenID Connect [OpenID.Core]. Ultimately, the means of | |||
| identifying the presenter is application-specific, as is the means of | identifying the presenter is application-specific, as is the means of | |||
| confirming possession of the key that is communicated. | confirming possession of the key that is communicated. | |||
| 3.1. Representation for an Asymmetric Proof-of-Possession Key | 3.1. Confirmation Claim | |||
| The "cnf" (confirmation) claim is used in the JWT to contain members | ||||
| used to identify the proof-of-possession key. Other members of the | ||||
| "cnf" object may be defined because a proof-of-possession key may not | ||||
| be the only means of confirming the authenticity of the token. This | ||||
| is analogous to the SAML 2.0 [OASIS.saml-core-2.0-os] | ||||
| SubjectConfirmation element, in which a number of different subject | ||||
| confirmation methods can be included, including proof-of-possession | ||||
| key information. When a recipient receives a "cnf" claim with a | ||||
| member that it does not understand, it MUST ignore that member. | ||||
| This specification establishes the IANA "JWT Confirmation Methods" | ||||
| registry for these members in Section 6.2 and registers the members | ||||
| defined by this specification. Other specifications can register | ||||
| other members used for confirmation, including other members for | ||||
| conveying proof-of-possession keys, possibly using different key | ||||
| representations. | ||||
| Note that if an application needs to represent multiple proof-of- | ||||
| possession keys in the same JWT, one way for it to achieve this is to | ||||
| use other claim names, in addition to "cnf", to hold the additional | ||||
| proof-of-possession key information. These claims could use the same | ||||
| syntax and semantics as the "cnf" claim. | ||||
| 3.2. Representation of 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 | |||
| "jwk" member is a JSON Web Key (JWK) [JWK] representing the | "jwk" member is a JSON Web Key (JWK) [JWK] representing 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", | ||||
| "cnf":{ | "cnf":{ | |||
| "jwk":{ | "jwk":{ | |||
| "kty": "EC", | "kty": "EC", | |||
| "use": "sig", | "use": "sig", | |||
| "crv": "P-256", | "crv": "P-256", | |||
| "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. Representation for an Encrypted Symmetric Proof-of-Possession Key | The "jwk" member MAY also be used for a JWK representing a symmetric | |||
| key, provided that the JWT is encrypted so that the key is not | ||||
| revealed to unintended parties. If the JWT is not encrypted, the | ||||
| symmetric key MUST be encrypted as described below. | ||||
| 3.3. Representation of an Encrypted Symmetric Proof-of-Possession Key | ||||
| When the key held by the presenter is a symmetric key, the "jwe" | When the key held by the presenter is a symmetric key, the "jwe" | |||
| member is an encrypted JSON Web Key (JWK) [JWK] encrypted to a key | member is an encrypted JSON Web Key (JWK) [JWK] encrypted to a key | |||
| known to the recipient using the JWE Compact Serialization containing | known to the recipient using the JWE Compact Serialization containing | |||
| the symmetric key. The rules for encrypting a JWK are found in | the symmetric key. The rules for encrypting a JWK are found in | |||
| Section 7 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 "jwe" 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 is used as the JWE Plaintext | |||
| Plaintext when encrypting the key. | 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": "RSA-OAEP", | |||
| "enc": "A128CBC-HS256" | "enc": "A128CBC-HS256" | |||
| } | } | |||
| 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 "jwe" member 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":{ | |||
| "jwe": | "jwe": | |||
| "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0. | "eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhDQkMtSFMyNTYifQ. | |||
| (remainder of JWE omitted for brevity)" | (remainder of JWE omitted for brevity)" | |||
| } | } | |||
| } | } | |||
| 3.3. Representation of a Key ID for a Proof-of-Possession Key | 3.4. Representation of a Key ID for a Proof-of-Possession Key | |||
| 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 issuer of a JWT declares that the presenter possesses | this case, the issuer of a JWT declares that the presenter possesses | |||
| a 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", | |||
| "aud": "https://client.example.org", | "aud": "https://client.example.org", | |||
| "exp": "1361398824", | "exp": "1361398824", | |||
| "nbf": "1360189224", | ||||
| "cnf":{ | "cnf":{ | |||
| "kid": "dfd1aa97-6d8d-4575-a0fe-34b96de2bfad" | "kid": "dfd1aa97-6d8d-4575-a0fe-34b96de2bfad" | |||
| } | } | |||
| } | } | |||
| 3.4. Confirmation | The content of the "kid" value is application specific. For | |||
| instance, some applications may choose to use a JWK Thumbprint | ||||
| The "cnf" (confirmation) claim is used in the JWT to contain the | [JWK.Thumbprint] value as the "kid" value. | |||
| "jwk", "jwe", or "kid" member because a proof-of-possession key may | ||||
| not be the only means of confirming the authenticity of the token. | ||||
| This is analogous to the SAML 2.0 [OASIS.saml-core-2.0-os] | ||||
| SubjectConfirmation element, in which a number of different subject | ||||
| confirmation methods can be included, including proof-of-possession | ||||
| key information. When a recipient receives a "cnf" claim with a | ||||
| member that it does not understand, it MUST ignore that member. | ||||
| This specification establishes the IANA "JWT Confirmation Methods" | 3.5. Representation of a URL for a Proof-of-Possession Key | |||
| registry for these members in Section 5.2 and registers the "jwk", | ||||
| "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 | The proof-of-possession key can be passed by reference instead of | |||
| being passed by value. This is done using the "jku" (JWK Set URL) | ||||
| member. Its value is a URI [RFC3986] that refers to a resource for a | ||||
| set of JSON-encoded public keys represented as a JWK Set [JWK], one | ||||
| of which is the proof-of-possession key. If there are multiple keys | ||||
| in the referenced JWK Set document, a "kid" member MUST also be | ||||
| included, with the referenced key's JWK also containing the same | ||||
| "kid" value. | ||||
| The protocol used to acquire the resource MUST provide integrity | ||||
| protection; an HTTP GET request to retrieve the JWK Set MUST use | ||||
| Transport Layer Security (TLS) [RFC5246]; and the identity of the | ||||
| server MUST be validated, as per Section 6 of RFC 6125 [RFC6125]. | ||||
| The following example demonstrates such a declaration in the JWT | ||||
| Claims Set of a JWT: | ||||
| { | ||||
| "iss": "https://server.example.com", | ||||
| "sub": "17760704", | ||||
| "aud": "https://client.example.org", | ||||
| "exp": "1440804813", | ||||
| "cnf":{ | ||||
| "jku": "https://keys.example.net/pop-keys.json", | ||||
| "kid": "2015-08-28" | ||||
| } | ||||
| } | ||||
| 3.6. 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 | |||
| protocols will communicate this information in different ways. | protocols will communicate this information in different ways. | |||
| Likewise, the means of communicating the signed nonce is also not | Likewise, the means of communicating the signed nonce is also not | |||
| specified, as this is also protocol-specific. | specified, as this is also protocol-specific. | |||
| Note that another means of proving possession of the key when it is a | Note that another means of proving possession of the key when it is a | |||
| symmetric key is to encrypt the key to the recipient. The means of | symmetric key is to encrypt the key to the recipient. The means of | |||
| obtaining a key for the recipient is likewise protocol-specific. | obtaining a key for the recipient is likewise protocol-specific. | |||
| For an example specification that uses the mechanisms defined in this | For examples using the mechanisms defined in this specification, see | |||
| document, see [I-D.ietf-oauth-pop-architecture]. | [I-D.ietf-oauth-pop-architecture]. | |||
| 4. Security Considerations | 4. Security Considerations | |||
| All of the normal security issues, especially in relationship to | All of the normal security issues, especially in relationship to | |||
| comparing URIs and dealing with unrecognized values, that are | comparing URIs and dealing with unrecognized values, that are | |||
| discussed in JWT [JWT] also apply here. | discussed in JWT [JWT] also apply here. | |||
| In addition, proof-of-possession introduces its own unique security | In addition, proof-of-possession introduces its own unique security | |||
| issues. Possessing the key is only valuable if it is kept secret. | issues. Possessing the key is only valuable if it is kept secret. | |||
| Appropriate means must be used to ensure that unintended parties do | Appropriate means must be used to ensure that unintended parties do | |||
| skipping to change at page 8, line 46 ¶ | skipping to change at page 9, line 42 ¶ | |||
| those not only require integrity protection, but also confidentiality | those not only require integrity protection, but also confidentiality | |||
| protection. | protection. | |||
| A recipient may not understand the newly introduced "cnf" claim and | A recipient may not understand the newly introduced "cnf" claim and | |||
| may consequently treat it as a bearer token. While this is a | may consequently treat it as a bearer token. While this is a | |||
| 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. Privacy Considerations | |||
| A proof-of-possession key can be used as a correlation handle if the | ||||
| same key is used with multiple parties. Thus, for privacy reasons, | ||||
| it is recommended that different proof-of-possession keys be used | ||||
| when interacting with different parties. | ||||
| 6. 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 on a Specification Required [RFC5226] basis | Values are registered on a Specification Required [RFC5226] basis | |||
| after a three-week review period on the oauth-pop-reg-review@ietf.org | after a three-week review period on the oauth-pop-reg-review@ietf.org | |||
| mailing list, on the advice of one or more Designated Experts. | mailing list, on the advice of one or more Designated Experts. | |||
| However, to allow for the allocation of values prior to publication, | However, to allow for the allocation of values prior to publication, | |||
| the Designated Experts may approve registration once they are | the Designated Experts may approve registration once they are | |||
| satisfied that such a specification will be published. [[ Note to the | satisfied that such a specification will be published. [[ Note to the | |||
| skipping to change at page 9, line 45 ¶ | skipping to change at page 11, line 5 ¶ | |||
| 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 | |||
| Experts. | Experts. | |||
| 5.1. JSON Web Token Claims Registration | 6.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 [IANA.JWT.Claims] established by [JWT]. | |||
| 5.1.1. Registry Contents | 6.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.1 of [[ this document ]] | |||
| 5.2. JWT Confirmation Methods Registry | 6.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 | 6.2.1. Registration Template | |||
| Confirmation Method Value: | Confirmation Method Value: | |||
| The name requested (e.g., "kid"). 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 Experts state that | case-insensitive manner unless the Designated Experts state that | |||
| there is a compelling reason to allow an exception. | there is a compelling reason to allow an exception. | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at page 12, line 5 ¶ | |||
| For Standards Track RFCs, list the "IESG". For others, give the | For Standards Track RFCs, list the "IESG". For others, give the | |||
| name of the responsible party. Other details (e.g., postal | name of the responsible party. Other details (e.g., postal | |||
| address, 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 or documents that specify the parameter, | Reference to the document or documents that specify the parameter, | |||
| preferably including URIs that can be used to retrieve copies of | preferably including URIs that can be used to retrieve copies of | |||
| the documents. An indication of the relevant sections may also be | the documents. An indication of the relevant sections may also be | |||
| included but is not required. | included but is not required. | |||
| 5.2.2. Initial Registry Contents | 6.2.2. Initial Registry Contents | |||
| o Confirmation Method Value: "jwk" | o Confirmation Method Value: "jwk" | |||
| o Confirmation Method Description: JSON Web Key Representing Public | o Confirmation Method Description: JSON Web Key Representing Public | |||
| 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.2 of [[ this document ]] | |||
| o Confirmation Method Value: "jwe" | o Confirmation Method Value: "jwe" | |||
| o Confirmation Method Description: Encrypted JSON Web Key | o Confirmation Method Description: Encrypted JSON Web Key | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): Section 3.2 of [[ this document ]] | o Specification Document(s): Section 3.3 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.4 of [[ this document ]] | |||
| 6. References | o Confirmation Method Value: "jku" | |||
| o Confirmation Method Description: JWK Set URL | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): Section 3.5 of [[ this document ]] | ||||
| 6.1. Normative References | 7. References | |||
| 7.1. Normative References | ||||
| [IANA.JWT.Claims] | ||||
| IANA, "JSON Web Token Claims", | ||||
| <http://www.iana.org/assignments/jwt>. | ||||
| [JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", | [JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", | |||
| RFC 7516, May 2015, | RFC 7516, May 2015, | |||
| <http://www.rfc-editor.org/info/rfc7516>. | <http://www.rfc-editor.org/info/rfc7516>. | |||
| [JWK] Jones, M., "JSON Web Key (JWK)", RFC 7517, May 2015, | [JWK] Jones, M., "JSON Web Key (JWK)", RFC 7517, May 2015, | |||
| <http://www.rfc-editor.org/info/rfc7517>. | <http://www.rfc-editor.org/info/rfc7517>. | |||
| [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", RFC 7519, May 2015, | (JWT)", RFC 7519, May 2015, | |||
| <http://www.rfc-editor.org/info/rfc7519>. | <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, DOI 10.17487/ | |||
| RFC2119, March 1997, | ||||
| <http://www.rfc-editor.org/info/rfc2119>. | ||||
| [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, DOI 10.17487/RFC3629, | |||
| November 2003, <http://www.rfc-editor.org/info/rfc3629>. | ||||
| [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>. | ||||
| [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. | DOI 10.17487/RFC5226, May 2008, | |||
| <http://www.rfc-editor.org/info/rfc5226>. | ||||
| 6.2. Informative References | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/ | ||||
| RFC5246, August 2008, | ||||
| <http://www.rfc-editor.org/info/rfc5246>. | ||||
| [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | ||||
| Verification of Domain-Based Application Service Identity | ||||
| within Internet Public Key Infrastructure Using X.509 | ||||
| (PKIX) Certificates in the Context of Transport Layer | ||||
| Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, | ||||
| March 2011, <http://www.rfc-editor.org/info/rfc6125>. | ||||
| 7.2. Informative References | ||||
| [I-D.ietf-oauth-pop-architecture] | [I-D.ietf-oauth-pop-architecture] | |||
| Hunt, P., Richer, J., Mills, W., Mishra, P., and H. | Hunt, P., Richer, J., Mills, W., Mishra, P., and H. | |||
| Tschofenig, "OAuth 2.0 Proof-of-Possession (PoP) Security | Tschofenig, "OAuth 2.0 Proof-of-Possession (PoP) Security | |||
| Architecture", draft-ietf-oauth-pop-architecture-01 (work | Architecture", draft-ietf-oauth-pop-architecture-01 (work | |||
| in progress), March 2015. | in progress), March 2015. | |||
| [JWK.Thumbprint] | ||||
| Jones, M. and N. Sakimura, "JSON Web Key (JWK) | ||||
| Thumbprint", draft-ietf-jose-jwk-thumbprint (work in | ||||
| progress), July 2015, <http://tools.ietf.org/html/ | ||||
| draft-ietf-jose-jwk-thumbprint-08>. | ||||
| [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] | [OpenID.Core] | |||
| Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
| C. Mortimore, "OpenID Connect Core 1.0", November 2014, | C. Mortimore, "OpenID Connect Core 1.0", November 2014, | |||
| <http://openid.net/specs/openid-connect-core-1_0.html>. | <http://openid.net/specs/openid-connect-core-1_0.html>. | |||
| Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
| The authors wish to thank Brian Campbell, James Manger, Justin | The authors wish to thank Brian Campbell, James Manger, Justin | |||
| Richer, and Nat Sakimura for their reviews of the 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 ]] | |||
| -04 | ||||
| o Allowed the use of "jwk" for symmetric keys when the JWT is | ||||
| encrypted. | ||||
| o Added the "jku" (JWK Set URL) member. | ||||
| o Added privacy considerations. | ||||
| o Reordered sections so that the "cnf" (confirmation) claim is | ||||
| defined before it is used. | ||||
| o Noted that applications can define new claim names, in addition to | ||||
| "cnf", to represent additional proof-of-possession keys, using the | ||||
| same representation as "cnf". | ||||
| o Applied wording clarifications suggested by Nat Sakimura. | ||||
| -03 | -03 | |||
| o Separated the "jwk" and "jwe" confirmation members; the former | o Separated the "jwk" and "jwe" confirmation members; the former | |||
| represents a public key as a JWK and the latter represents a | represents a public key as a JWK and the latter represents a | |||
| symmetric key as a JWE encrypted JWK. | symmetric key as a JWE encrypted JWK. | |||
| o Changed the title to indicate that a proof-of-possession key is | o Changed the title to indicate that a proof-of-possession key is | |||
| being communicated. | being communicated. | |||
| o Updated language that formerly assumed that the issuer was an | o Updated language that formerly assumed that the issuer was an | |||
| End of changes. 41 change blocks. | ||||
| 79 lines changed or deleted | 185 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||