| < draft-ietf-ace-oauth-authz-08.txt | draft-ietf-ace-oauth-authz-09.txt > | |||
|---|---|---|---|---|
| ACE Working Group L. Seitz | ACE Working Group L. Seitz | |||
| Internet-Draft RISE SICS | Internet-Draft RISE SICS | |||
| Intended status: Standards Track G. Selander | Intended status: Standards Track G. Selander | |||
| Expires: April 22, 2018 Ericsson | Expires: May 20, 2018 Ericsson | |||
| E. Wahlstroem | E. Wahlstroem | |||
| (no affiliation) | (no affiliation) | |||
| S. Erdtman | S. Erdtman | |||
| Spotify AB | Spotify AB | |||
| H. Tschofenig | H. Tschofenig | |||
| ARM Ltd. | ARM Ltd. | |||
| October 19, 2017 | November 16, 2017 | |||
| Authentication and Authorization for Constrained Environments (ACE) | Authentication and Authorization for Constrained Environments (ACE) | |||
| draft-ietf-ace-oauth-authz-08 | draft-ietf-ace-oauth-authz-09 | |||
| Abstract | Abstract | |||
| This specification defines a framework for authentication and | This specification defines a framework for authentication and | |||
| authorization in Internet of Things (IoT) environments. The | authorization in Internet of Things (IoT) environments. The | |||
| framework is based on a set of building blocks including OAuth 2.0 | framework is based on a set of building blocks including OAuth 2.0 | |||
| and CoAP, thus making a well-known and widely used authorization | and CoAP, thus making a well-known and widely used authorization | |||
| solution suitable for IoT devices. Existing specifications are used | solution suitable for IoT devices. Existing specifications are used | |||
| where possible, but where the constraints of IoT devices require it, | where possible, but where the constraints of IoT devices require it, | |||
| extensions are added and profiles are defined. | extensions are added and profiles are defined. | |||
| skipping to change at page 1, line 43 ¶ | skipping to change at page 1, line 43 ¶ | |||
| 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 April 22, 2018. | This Internet-Draft will expire on May 20, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. OAuth 2.0 . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. OAuth 2.0 . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2. CoAP . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. CoAP . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4. Protocol Interactions . . . . . . . . . . . . . . . . . . . . 10 | 4. Protocol Interactions . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5. Framework . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5. Framework . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.1. Discovering Authorization Servers . . . . . . . . . . . . 15 | 5.1. Discovering Authorization Servers . . . . . . . . . . . . 14 | |||
| 5.1.1. Unauthorized Resource Request Message . . . . . . . . 15 | 5.1.1. Unauthorized Resource Request Message . . . . . . . . 15 | |||
| 5.1.2. AS Information . . . . . . . . . . . . . . . . . . . 16 | 5.1.2. AS Information . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.2. Authorization Grants . . . . . . . . . . . . . . . . . . 17 | 5.2. Authorization Grants . . . . . . . . . . . . . . . . . . 17 | |||
| 5.3. Client Credentials . . . . . . . . . . . . . . . . . . . 18 | 5.3. Client Credentials . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.4. AS Authentication . . . . . . . . . . . . . . . . . . . . 18 | 5.4. AS Authentication . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.5. The Authorization Endpoint . . . . . . . . . . . . . . . 18 | 5.5. The Authorization Endpoint . . . . . . . . . . . . . . . 18 | |||
| 5.6. The Token Endpoint . . . . . . . . . . . . . . . . . . . 19 | 5.6. The Token Endpoint . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.6.1. Client-to-AS Request . . . . . . . . . . . . . . . . 19 | 5.6.1. Client-to-AS Request . . . . . . . . . . . . . . . . 19 | |||
| 5.6.2. AS-to-Client Response . . . . . . . . . . . . . . . . 22 | 5.6.2. AS-to-Client Response . . . . . . . . . . . . . . . . 21 | |||
| 5.6.3. Error Response . . . . . . . . . . . . . . . . . . . 24 | 5.6.3. Error Response . . . . . . . . . . . . . . . . . . . 24 | |||
| 5.6.4. Request and Response Parameters . . . . . . . . . . . 25 | 5.6.4. Request and Response Parameters . . . . . . . . . . . 24 | |||
| 5.6.4.1. Audience . . . . . . . . . . . . . . . . . . . . 25 | 5.6.4.1. Audience . . . . . . . . . . . . . . . . . . . . 25 | |||
| 5.6.4.2. Grant Type . . . . . . . . . . . . . . . . . . . 25 | 5.6.4.2. Grant Type . . . . . . . . . . . . . . . . . . . 25 | |||
| 5.6.4.3. Token Type . . . . . . . . . . . . . . . . . . . 26 | 5.6.4.3. Token Type . . . . . . . . . . . . . . . . . . . 25 | |||
| 5.6.4.4. Profile . . . . . . . . . . . . . . . . . . . . . 26 | 5.6.4.4. Profile . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 5.6.4.5. Confirmation . . . . . . . . . . . . . . . . . . 26 | 5.6.4.5. Confirmation . . . . . . . . . . . . . . . . . . 26 | |||
| 5.6.5. Mapping parameters to CBOR . . . . . . . . . . . . . 27 | 5.6.5. Mapping parameters to CBOR . . . . . . . . . . . . . 26 | |||
| 5.7. The 'Introspect' Endpoint . . . . . . . . . . . . . . . . 28 | 5.7. The 'Introspect' Endpoint . . . . . . . . . . . . . . . . 27 | |||
| 5.7.1. RS-to-AS Request . . . . . . . . . . . . . . . . . . 29 | 5.7.1. RS-to-AS Request . . . . . . . . . . . . . . . . . . 28 | |||
| 5.7.2. AS-to-RS Response . . . . . . . . . . . . . . . . . . 29 | 5.7.2. AS-to-RS Response . . . . . . . . . . . . . . . . . . 28 | |||
| 5.7.3. Error Response . . . . . . . . . . . . . . . . . . . 30 | 5.7.3. Error Response . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.7.4. Client Token . . . . . . . . . . . . . . . . . . . . 31 | 5.7.4. Client Token . . . . . . . . . . . . . . . . . . . . 30 | |||
| 5.7.5. Mapping Introspection parameters to CBOR . . . . . . 33 | 5.7.5. Mapping Introspection parameters to CBOR . . . . . . 32 | |||
| 5.8. The Access Token . . . . . . . . . . . . . . . . . . . . 33 | 5.8. The Access Token . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.8.1. The 'Authorization Information' Endpoint . . . . . . 34 | 5.8.1. The 'Authorization Information' Endpoint . . . . . . 33 | |||
| 5.8.2. Token Expiration . . . . . . . . . . . . . . . . . . 35 | 5.8.2. Token Expiration . . . . . . . . . . . . . . . . . . 34 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 36 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 34 | |||
| 6.1. Unprotected AS Information . . . . . . . . . . . . . . . 37 | 6.1. Unprotected AS Information . . . . . . . . . . . . . . . 36 | |||
| 6.2. Use of Nonces for Replay Protection . . . . . . . . . . . 37 | 6.2. Use of Nonces for Replay Protection . . . . . . . . . . . 36 | |||
| 6.3. Combining profiles . . . . . . . . . . . . . . . . . . . 37 | 6.3. Combining profiles . . . . . . . . . . . . . . . . . . . 36 | |||
| 6.4. Error responses . . . . . . . . . . . . . . . . . . . . . 37 | 6.4. Error responses . . . . . . . . . . . . . . . . . . . . . 36 | |||
| 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 38 | 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 37 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 8.1. OAuth Introspection Response Parameter Registration . . . 39 | 8.1. Authorization Server Information . . . . . . . . . . . . 37 | |||
| 8.2. OAuth Parameter Registration . . . . . . . . . . . . . . 39 | 8.2. OAuth Error Code CBOR Mappings Registry . . . . . . . . . 38 | |||
| 8.3. OAuth Access Token Types . . . . . . . . . . . . . . . . 40 | 8.3. OAuth Grant Type CBOR Mappings . . . . . . . . . . . . . 38 | |||
| 8.4. OAuth Token Type CBOR Mappings . . . . . . . . 40 | 8.4. OAuth Access Token Types . . . . . . . . . . . . . . . . 39 | |||
| 8.4.1. Registration Template . . . . . . . . . . . . . . . . 40 | 8.5. OAuth Token Type CBOR Mappings . . . . . . . . . . . . . 39 | |||
| 8.4.2. Initial Registry Contents . . . . . . . . . . . . . . 40 | 8.5.1. Initial Registry Contents . . . . . . . . . . . . . . 40 | |||
| 8.5. CBOR Web Token Claims . . . . . . . . . . . . . . . . . . 41 | 8.6. ACE OAuth Profile Registry . . . . . . . . . . . . . . . 40 | |||
| 8.6. ACE OAuth Profile Registry . . . . . . . . . . . . . . . 41 | 8.7. OAuth Parameter Registration . . . . . . . . . . . . . . 40 | |||
| 8.6.1. Registration Template . . . . . . . . . . . . . . . . 41 | 8.8. OAuth CBOR Parameter Mappings Registry . . . . . . . . . 41 | |||
| 8.7. OAuth CBOR Parameter Mappings Registry . . . . . . . . . 41 | 8.9. OAuth Introspection Response Parameter Registration . . . 41 | |||
| 8.7.1. Registration Template . . . . . . . . . . . . . . . . 42 | 8.10. Introspection Endpoint CBOR Mappings Registry . . . . . . 42 | |||
| 8.7.2. Initial Registry Contents . . . . . . . . . . . . . . 42 | 8.11. JSON Web Token Claims . . . . . . . . . . . . . . . . . . 42 | |||
| 8.8. Introspection Endpoint CBOR Mappings Registry . . . . . . 44 | 8.12. CBOR Web Token Claims . . . . . . . . . . . . . . . . . . 42 | |||
| 8.8.1. Registration Template . . . . . . . . . . . . . . . . 44 | 8.13. CoAP Option Number Registration . . . . . . . . . . . . . 43 | |||
| 8.8.2. Initial Registry Contents . . . . . . . . . . . . . . 45 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 8.9. CoAP Option Number Registration . . . . . . . . . . . . . 47 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 47 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 44 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 | 10.2. Informative References . . . . . . . . . . . . . . . . . 44 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 48 | Appendix A. Design Justification . . . . . . . . . . . . . . . . 47 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 49 | Appendix B. Roles and Responsibilities . . . . . . . . . . . . . 51 | |||
| Appendix A. Design Justification . . . . . . . . . . . . . . . . 51 | Appendix C. Requirements on Profiles . . . . . . . . . . . . . . 53 | |||
| Appendix B. Roles and Responsibilities . . . . . . . . . . . . . 55 | Appendix D. Assumptions on AS knowledge about C and RS . . . . . 54 | |||
| Appendix C. Requirements on Profiles . . . . . . . . . . . . . . 57 | Appendix E. Deployment Examples . . . . . . . . . . . . . . . . 54 | |||
| Appendix D. Assumptions on AS knowledge about C and RS . . . . . 58 | E.1. Local Token Validation . . . . . . . . . . . . . . . . . 54 | |||
| Appendix E. Deployment Examples . . . . . . . . . . . . . . . . 58 | E.2. Introspection Aided Token Validation . . . . . . . . . . 58 | |||
| E.1. Local Token Validation . . . . . . . . . . . . . . . . . 58 | Appendix F. Document Updates . . . . . . . . . . . . . . . . . . 62 | |||
| E.2. Introspection Aided Token Validation . . . . . . . . . . 62 | F.1. Version -08 to -09 . . . . . . . . . . . . . . . . . . . 62 | |||
| Appendix F. Document Updates . . . . . . . . . . . . . . . . . . 66 | F.2. Version -07 to -08 . . . . . . . . . . . . . . . . . . . 62 | |||
| F.1. Version -08 to -09 . . . . . . . . . . . . . . . . . . . 66 | F.3. Version -06 to -07 . . . . . . . . . . . . . . . . . . . 63 | |||
| F.2. Version -07 to -08 . . . . . . . . . . . . . . . . . . . 67 | F.4. Version -05 to -06 . . . . . . . . . . . . . . . . . . . 63 | |||
| F.3. Version -06 to -07 . . . . . . . . . . . . . . . . . . . 67 | F.5. Version -04 to -05 . . . . . . . . . . . . . . . . . . . 63 | |||
| F.4. Version -05 to -06 . . . . . . . . . . . . . . . . . . . 67 | F.6. Version -03 to -04 . . . . . . . . . . . . . . . . . . . 64 | |||
| F.5. Version -04 to -05 . . . . . . . . . . . . . . . . . . . 67 | F.7. Version -02 to -03 . . . . . . . . . . . . . . . . . . . 64 | |||
| F.6. Version -03 to -04 . . . . . . . . . . . . . . . . . . . 67 | F.8. Version -01 to -02 . . . . . . . . . . . . . . . . . . . 64 | |||
| F.7. Version -02 to -03 . . . . . . . . . . . . . . . . . . . 68 | F.9. Version -00 to -01 . . . . . . . . . . . . . . . . . . . 64 | |||
| F.8. Version -01 to -02 . . . . . . . . . . . . . . . . . . . 68 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65 | |||
| F.9. Version -00 to -01 . . . . . . . . . . . . . . . . . . . 68 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 69 | ||||
| 1. Introduction | 1. Introduction | |||
| Authorization is the process for granting approval to an entity to | Authorization is the process for granting approval to an entity to | |||
| access a resource [RFC4949]. The authorization task itself can best | access a resource [RFC4949]. The authorization task itself can best | |||
| be described as granting access to a requesting client, for a | be described as granting access to a requesting client, for a | |||
| resource hosted on a device, the resource server (RS). This exchange | resource hosted on a device, the resource server (RS). This exchange | |||
| is mediated by one or multiple authorization servers (AS). Managing | is mediated by one or multiple authorization servers (AS). Managing | |||
| authorization for a large number of devices and users can be a | authorization for a large number of devices and users can be a | |||
| complex task. | complex task. | |||
| skipping to change at page 6, line 15 ¶ | skipping to change at page 5, line 51 ¶ | |||
| The basic block is the OAuth 2.0 [RFC6749] framework, which enjoys | The basic block is the OAuth 2.0 [RFC6749] framework, which enjoys | |||
| widespread deployment. Many IoT devices can support OAuth 2.0 | widespread deployment. Many IoT devices can support OAuth 2.0 | |||
| without any additional extensions, but for certain constrained | without any additional extensions, but for certain constrained | |||
| settings additional profiling is needed. | settings additional profiling is needed. | |||
| Another building block is the lightweight web transfer protocol CoAP | Another building block is the lightweight web transfer protocol CoAP | |||
| [RFC7252], for those communication environments where HTTP is not | [RFC7252], for those communication environments where HTTP is not | |||
| appropriate. CoAP typically runs on top of UDP, which further | appropriate. CoAP typically runs on top of UDP, which further | |||
| reduces overhead and message exchanges. While this specification | reduces overhead and message exchanges. While this specification | |||
| defines extensions for the use of OAuth over CoAP, other underlying | defines extensions for the use of OAuth over CoAP, other underlying | |||
| protocols are not prohibited from beeing supported in the future, | protocols are not prohibited from being supported in the future, such | |||
| such as HTTP/2, MQTT, BLE and QUIC. | as HTTP/2, MQTT, BLE and QUIC. | |||
| A third building block is CBOR [RFC7049], for encodings where JSON | A third building block is CBOR [RFC7049], for encodings where JSON | |||
| [RFC7159] is not sufficiently compact. CBOR is a binary encoding | [RFC7159] is not sufficiently compact. CBOR is a binary encoding | |||
| designed for small code and message size, which may be used for | designed for small code and message size, which may be used for | |||
| encoding of self contained tokens, and also for encoding payload | encoding of self contained tokens, and also for encoding payload | |||
| transferred in protocol messages. | transferred in protocol messages. | |||
| A fourth building block is the compact CBOR-based secure message | A fourth building block is the compact CBOR-based secure message | |||
| format COSE [RFC8152], which enables application layer security as an | format COSE [RFC8152], which enables application layer security as an | |||
| alternative or complement to transport layer security (DTLS [RFC6347] | alternative or complement to transport layer security (DTLS [RFC6347] | |||
| skipping to change at page 7, line 18 ¶ | skipping to change at page 6, line 50 ¶ | |||
| scoped access to a resource with the permission of a resource owner. | scoped access to a resource with the permission of a resource owner. | |||
| Authorization information, or references to it, is passed between the | Authorization information, or references to it, is passed between the | |||
| nodes using access tokens. These access tokens are issued to clients | nodes using access tokens. These access tokens are issued to clients | |||
| by an authorization server with the approval of the resource owner. | by an authorization server with the approval of the resource owner. | |||
| The client uses the access token to access the protected resources | The client uses the access token to access the protected resources | |||
| hosted by the resource server. | hosted by the resource server. | |||
| A number of OAuth 2.0 terms are used within this specification: | A number of OAuth 2.0 terms are used within this specification: | |||
| The token and introspection Endpoints: | The token and introspection Endpoints: | |||
| The AS hosts the token endpoint that allows a client to request | The AS hosts the token endpoint that allows a client to request | |||
| access tokens. The client makes a POST request to the token | access tokens. The client makes a POST request to the token | |||
| endpoint on the AS and receives the access token in the response | endpoint on the AS and receives the access token in the response | |||
| (if the request was successful). | (if the request was successful). | |||
| In some deployments, a token introspection endpoint is provided by | ||||
| In some deployments, a token introspection endpoint is provied by | ||||
| the AS, which can be used by the RS if it needs to request | the AS, which can be used by the RS if it needs to request | |||
| additional information regarding a received access token. The RS | additional information regarding a received access token. The RS | |||
| makes a POST request to the introspecton endpoint on the AS and | makes a POST request to the introspection endpoint on the AS and | |||
| receives information about the access token in the response. (See | receives information about the access token in the response. (See | |||
| "Introspection" below.) | "Introspection" below.) | |||
| Access Tokens: | Access Tokens: | |||
| Access tokens are credentials needed to access protected | Access tokens are credentials needed to access protected | |||
| resources. An access token is a data structure representing | resources. An access token is a data structure representing | |||
| authorization permissions issued by the AS to the client. Access | authorization permissions issued by the AS to the client. Access | |||
| tokens are generated by the AS and consumed by the RS. The access | tokens are generated by the AS and consumed by the RS. The access | |||
| token content is opaque to the client. | token content is opaque to the client. | |||
| Access tokens can have different formats, and various methods of | Access tokens can have different formats, and various methods of | |||
| utilization (e.g., cryptographic properties) based on the security | utilization (e.g., cryptographic properties) based on the security | |||
| requirements of the given deployment. | requirements of the given deployment. | |||
| skipping to change at page 7, line 44 ¶ | skipping to change at page 7, line 25 ¶ | |||
| resources. An access token is a data structure representing | resources. An access token is a data structure representing | |||
| authorization permissions issued by the AS to the client. Access | authorization permissions issued by the AS to the client. Access | |||
| tokens are generated by the AS and consumed by the RS. The access | tokens are generated by the AS and consumed by the RS. The access | |||
| token content is opaque to the client. | token content is opaque to the client. | |||
| Access tokens can have different formats, and various methods of | Access tokens can have different formats, and various methods of | |||
| utilization (e.g., cryptographic properties) based on the security | utilization (e.g., cryptographic properties) based on the security | |||
| requirements of the given deployment. | requirements of the given deployment. | |||
| Proof of Possession Tokens: | Proof of Possession Tokens: | |||
| An access token may be bound to a cryptographic key, which is then | An access token may be bound to a cryptographic key, which is then | |||
| used by an RS to authenticate requests from a client. Such tokens | used by an RS to authenticate requests from a client. Such tokens | |||
| are called proof-of-possession access tokens (or PoP access | are called proof-of-possession access tokens (or PoP access | |||
| tokens). | tokens). | |||
| The proof-of-possession (PoP) security concept assumes that the AS | The proof-of-possession (PoP) security concept assumes that the AS | |||
| acts as a trusted third party that binds keys to access tokens. | acts as a trusted third party that binds keys to access tokens. | |||
| These so called PoP keys are then used by the client to | These so called PoP keys are then used by the client to | |||
| demonstrate the possession of the secret to the RS when accessing | demonstrate the possession of the secret to the RS when accessing | |||
| the resource. The RS, when receiving an access token, needs to | the resource. The RS, when receiving an access token, needs to | |||
| verify that the key used by the client matches the one bound to | verify that the key used by the client matches the one bound to | |||
| the access token. When this specification uses the term "access | the access token. When this specification uses the term "access | |||
| token" it is assumed to be a PoP access token token unless | token" it is assumed to be a PoP access token token unless | |||
| specifically stated otherwise. | specifically stated otherwise. | |||
| The key bound to the access token (the PoP key) may use either | The key bound to the access token (the PoP key) may use either | |||
| symmetric or asymmetric cryptography. The appropriate choice of | symmetric or asymmetric cryptography. The appropriate choice of | |||
| the kind of cryptography depends on the constraints of the IoT | the kind of cryptography depends on the constraints of the IoT | |||
| devices as well as on the security requirements of the use case. | devices as well as on the security requirements of the use case. | |||
| Symmetric PoP key: The AS generates a random symmetric PoP key. | Symmetric PoP key: | |||
| The key is either stored to be returned on introspection calls | The AS generates a random symmetric PoP key. The key is either | |||
| or encrypted and included in the access token. The PoP key is | stored to be returned on introspection calls or encrypted and | |||
| also encrypted for the client and sent together with the access | included in the access token. The PoP key is also encrypted | |||
| token to the client. | for the client and sent together with the access token to the | |||
| client. | ||||
| Asymmetric PoP key: An asymmetric key pair is generated on the | Asymmetric PoP key: | |||
| client and the public key is sent to the AS (if it does not | An asymmetric key pair is generated on the client and the | |||
| already have knowledge of the client's public key). | public key is sent to the AS (if it does not already have | |||
| Information about the public key, which is the PoP key in this | knowledge of the client's public key). Information about the | |||
| case, is either stored to be returned on introspection calls or | public key, which is the PoP key in this case, is either stored | |||
| included inside the access token and sent back to the | to be returned on introspection calls or included inside the | |||
| requesting client. The RS can identify the client's public key | access token and sent back to the requesting client. The RS | |||
| from the information in the token, which allows the client to | can identify the client's public key from the information in | |||
| use the corresponding private key for the proof of possession. | the token, which allows the client to use the corresponding | |||
| private key for the proof of possession. | ||||
| The access token is either a simple reference, or a structured | The access token is either a simple reference, or a structured | |||
| information object (e.g., CWT [I-D.ietf-ace-cbor-web-token]), | information object (e.g., CWT [I-D.ietf-ace-cbor-web-token]), | |||
| protected by a cryptographic wrapper (e.g., COSE [RFC8152]). The | protected by a cryptographic wrapper (e.g., COSE [RFC8152]). The | |||
| choice of PoP key does not necessarily imply a specific credential | choice of PoP key does not necessarily imply a specific credential | |||
| type for the integrity protection of the token. | type for the integrity protection of the token. | |||
| Scopes and Permissions: | Scopes and Permissions: | |||
| In OAuth 2.0, the client specifies the type of permissions it is | In OAuth 2.0, the client specifies the type of permissions it is | |||
| seeking to obtain (via the scope parameter) in the access token | seeking to obtain (via the scope parameter) in the access token | |||
| request. In turn, the AS may use the scope response parameter to | request. In turn, the AS may use the scope response parameter to | |||
| inform the client of the scope of the access token issued. As the | inform the client of the scope of the access token issued. As the | |||
| client could be a constrained device as well, this specification | client could be a constrained device as well, this specification | |||
| uses CBOR encoding as data formt, defined in Section 5, to request | uses CBOR encoding as data format, defined in Section 5, to | |||
| scopes and to be informed what scopes the access token actually | request scopes and to be informed what scopes the access token | |||
| authorizes. | actually authorizes. | |||
| The values of the scope parameter are expressed as a list of | The values of the scope parameter in OAuth 2.0 are expressed as a | |||
| space-delimited, case-sensitive strings, with a semantic that is | list of space-delimited, case-sensitive strings, with a semantic | |||
| well-known to the AS and the RS. More details about the concept | that is well-known to the AS and the RS. More details about the | |||
| of scopes is found under Section 3.3 in [RFC6749]. | concept of scopes is found under Section 3.3 in [RFC6749]. | |||
| Claims: | Claims: | |||
| Information carried in the access token or returned from | Information carried in the access token or returned from | |||
| introspection, called claims, is in the form of name-value pairs. | introspection, called claims, is in the form of name-value pairs. | |||
| An access token may, for example, include a claim identifying the | An access token may, for example, include a claim identifying the | |||
| AS that issued the token (via the "iss" claim) and what audience | AS that issued the token (via the "iss" claim) and what audience | |||
| the access token is intended for (via the "aud" claim). The | the access token is intended for (via the "aud" claim). The | |||
| audience of an access token can be a specific resource or one or | audience of an access token can be a specific resource or one or | |||
| many resource servers. The resource owner policies influence what | many resource servers. The resource owner policies influence what | |||
| claims are put into the access token by the authorization server. | claims are put into the access token by the authorization server. | |||
| While the structure and encoding of the access token varies | While the structure and encoding of the access token varies | |||
| skipping to change at page 14, line 15 ¶ | skipping to change at page 13, line 39 ¶ | |||
| The RS uses the dynamically established keys to protect the | The RS uses the dynamically established keys to protect the | |||
| response, according to used communication security protocol. | response, according to used communication security protocol. | |||
| 5. Framework | 5. Framework | |||
| The following sections detail the profiling and extensions of OAuth | The following sections detail the profiling and extensions of OAuth | |||
| 2.0 for constrained environments, which constitutes the ACE | 2.0 for constrained environments, which constitutes the ACE | |||
| framework. | framework. | |||
| Credential Provisioning | Credential Provisioning | |||
| For IoT, it cannot be assumed that the client and RS are part of a | For IoT, it cannot be assumed that the client and RS are part of a | |||
| common key infrastructure, so the AS provisions credentials or | common key infrastructure, so the AS provisions credentials or | |||
| associated information to allow mutual authentication. These | associated information to allow mutual authentication. These | |||
| credentials need to be provided to the parties before or during | credentials need to be provided to the parties before or during | |||
| the authentication protocol is executed, and may be re-used for | the authentication protocol is executed, and may be re-used for | |||
| subsequent token requests. | subsequent token requests. | |||
| Proof-of-Possession | Proof-of-Possession | |||
| The ACE framework, by default, implements proof-of-possession for | The ACE framework, by default, implements proof-of-possession for | |||
| access tokens, i.e., that the token holder can prove being a | access tokens, i.e., that the token holder can prove being a | |||
| holder of the key bound to the token. The binding is provided by | holder of the key bound to the token. The binding is provided by | |||
| the "cnf" claim [I-D.jones-ace-cwt-proof-of-possession] indicating | the "cnf" claim [I-D.ietf-ace-cwt-proof-of-possession] indicating | |||
| what key is used for proof-of-possession. If a client needs to | what key is used for proof-of-possession. If a client needs to | |||
| submit a new access token e.g., to obtain additional access | submit a new access token e.g., to obtain additional access | |||
| rights, they can request that the AS binds this token to the same | rights, they can request that the AS binds this token to the same | |||
| key as the previous one. | key as the previous one. | |||
| ACE Profiles | ACE Profiles | |||
| The client or RS may be limited in the encodings or protocols it | The client or RS may be limited in the encodings or protocols it | |||
| supports. To support a variety of different deployment settings, | supports. To support a variety of different deployment settings, | |||
| specific interactions between client and RS are defined in an ACE | specific interactions between client and RS are defined in an ACE | |||
| profile. In ACE framework the AS is expected to manage the | profile. In ACE framework the AS is expected to manage the | |||
| matching of compatible profile choices between a client and an RS. | matching of compatible profile choices between a client and an RS. | |||
| The AS informs the client of the selected profile using the | The AS informs the client of the selected profile using the | |||
| "profile" parameter in the token response. | "profile" parameter in the token response. | |||
| OAuth 2.0 requires the use of TLS both to protect the communication | OAuth 2.0 requires the use of TLS both to protect the communication | |||
| between AS and client when requesting an access token; between client | between AS and client when requesting an access token; between client | |||
| skipping to change at page 16, line 40 ¶ | skipping to change at page 16, line 19 ¶ | |||
| the Unauthorized Resource Request message to RS's AS. The AS | the Unauthorized Resource Request message to RS's AS. The AS | |||
| information is a set of attributes containing an absolute URI (see | information is a set of attributes containing an absolute URI (see | |||
| Section 4.3 of [RFC3986]) that specifies the AS in charge of RS. | Section 4.3 of [RFC3986]) that specifies the AS in charge of RS. | |||
| The message MAY also contain a nonce generated by RS to ensure | The message MAY also contain a nonce generated by RS to ensure | |||
| freshness in case that the RS and AS do not have synchronized clocks. | freshness in case that the RS and AS do not have synchronized clocks. | |||
| Figure 2 summarizes the parameters that may be part of the AS | Figure 2 summarizes the parameters that may be part of the AS | |||
| Information. | Information. | |||
| /----------------+----------+-------------------\ | /-------+----------+-----------------\ | |||
| | Parameter name | CBOR Key | Major Type | | | Name | CBOR Key | Major Type | | |||
| |----------------+----------+-------------------| | |-------+----------+-----------------| | |||
| | AS | 0 | 3 (text string) | | | AS | 0 | 3 (text string) | | |||
| | nonce | 5 | 2 (byte string) | | | nonce | 5 | 2 (byte string) | | |||
| \----------------+----------+-------------------/ | \-------+----------+-----------------/ | |||
| Figure 2: AS Information parameters | Figure 2: AS Information parameters | |||
| Figure 3 shows an example for an AS Information message payload using | Figure 3 shows an example for an AS Information message payload using | |||
| CBOR [RFC7049] diagnostic notation, using the parameter names instead | CBOR [RFC7049] diagnostic notation, using the parameter names instead | |||
| of the CBOR keys for better human readability. | of the CBOR keys for better human readability. | |||
| 4.01 Unauthorized | 4.01 Unauthorized | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| {AS: "coaps://as.example.com/token", | {AS: "coaps://as.example.com/token", | |||
| skipping to change at page 19, line 22 ¶ | skipping to change at page 18, line 48 ¶ | |||
| functionality of the token endpoint, giving the AS the possibility to | functionality of the token endpoint, giving the AS the possibility to | |||
| help the client and RS to establish shared keys or to exchange their | help the client and RS to establish shared keys or to exchange their | |||
| public keys. Furthermore, this framework defines encodings using | public keys. Furthermore, this framework defines encodings using | |||
| CBOR, as a substitute for JSON. | CBOR, as a substitute for JSON. | |||
| For the AS to be able to issue a token, the client MUST be | For the AS to be able to issue a token, the client MUST be | |||
| authenticated and present a valid grant for the scopes requested. | authenticated and present a valid grant for the scopes requested. | |||
| Profiles of this framework MUST specify how the AS authenticates the | Profiles of this framework MUST specify how the AS authenticates the | |||
| client and how the communication between client and AS is protected. | client and how the communication between client and AS is protected. | |||
| The default name of this endpoint in an url-path is 'token', however | ||||
| implementations are not required to use this name and can define | ||||
| their own instead. | ||||
| The figures of this section use CBOR diagnostic notation without the | The figures of this section use CBOR diagnostic notation without the | |||
| integer abbreviations for the parameters or their values for | integer abbreviations for the parameters or their values for | |||
| illustrative purposes. Note that implementations MUST use the | illustrative purposes. Note that implementations MUST use the | |||
| integer abbreviations and the binary CBOR encoding. | integer abbreviations and the binary CBOR encoding. | |||
| 5.6.1. Client-to-AS Request | 5.6.1. Client-to-AS Request | |||
| The client sends a POST request to the token endpoint at the AS. The | The client sends a POST request to the token endpoint at the AS. The | |||
| profile MUST specify the Content-Type and wrapping of the payload. | profile MUST specify the Content-Type and wrapping of the payload. | |||
| The content of the request consists of the parameters specified in | The content of the request consists of the parameters specified in | |||
| section 4 of the OAuth 2.0 specification [RFC6749], encoded as a CBOR | section 4 of the OAuth 2.0 specification [RFC6749], encoded as a CBOR | |||
| map. | map, where the "scope" parameter can additionally be formatted as a | |||
| byte array, in order to allow compact encoding of complex scope | ||||
| structures. | ||||
| In addition to these parameters, this framework defines the following | In addition to these parameters, this framework defines the following | |||
| parameters for requesting an access token from a token endpoint: | parameters for requesting an access token from a token endpoint: | |||
| aud | aud | |||
| OPTIONAL. Specifies the audience for which the client is | OPTIONAL. Specifies the audience for which the client is | |||
| requesting an access token. If this parameter is missing, it is | requesting an access token. If this parameter is missing, it is | |||
| assumed that the client and the AS have a pre-established | assumed that the client and the AS have a pre-established | |||
| understanding of the audience that an access token should address. | understanding of the audience that an access token should address. | |||
| If a client submits a request for an access token without | If a client submits a request for an access token without | |||
| skipping to change at page 20, line 19 ¶ | skipping to change at page 20, line 6 ¶ | |||
| The following examples illustrate different types of requests for | The following examples illustrate different types of requests for | |||
| proof-of-possession tokens. | proof-of-possession tokens. | |||
| Figure 5 shows a request for a token with a symmetric proof-of- | Figure 5 shows a request for a token with a symmetric proof-of- | |||
| possession key. Note that in this example it is assumed that | possession key. Note that in this example it is assumed that | |||
| transport layer communication security is used, therefore the | transport layer communication security is used, therefore the | |||
| Content-Type is "application/cbor". The content is displayed in CBOR | Content-Type is "application/cbor". The content is displayed in CBOR | |||
| diagnostic notation, without abbreviations for better readability. | diagnostic notation, without abbreviations for better readability. | |||
| Header: POST (Code=0.02) | Header: POST (Code=0.02) | |||
| Uri-Host: "server.example.com" | Uri-Host: "as.example.com" | |||
| Uri-Path: "token" | Uri-Path: "token" | |||
| Content-Type: "application/cbor" | Content-Type: "application/cbor" | |||
| Payload: | Payload: | |||
| { | { | |||
| "grant_type" : "client_credentials", | "grant_type" : "client_credentials", | |||
| "client_id" : "myclient", | "client_id" : "myclient", | |||
| "aud" : "tempSensor4711" | "aud" : "tempSensor4711" | |||
| } | } | |||
| Figure 5: Example request for an access token bound to a symmetric | Figure 5: Example request for an access token bound to a symmetric | |||
| key. | key. | |||
| Figure 6 shows a request for a token with an asymmetric proof-of- | Figure 6 shows a request for a token with an asymmetric proof-of- | |||
| possession key. Note that in this example COSE is used to provide | possession key. Note that in this example COSE is used to provide | |||
| object-security, therefore the Content-Type is "application/cose". | object-security, therefore the Content-Type is "application/cose". | |||
| Header: POST (Code=0.02) | Header: POST (Code=0.02) | |||
| Uri-Host: "server.example.com" | Uri-Host: "as.example.com" | |||
| Uri-Path: "token" | Uri-Path: "token" | |||
| Content-Type: "application/cose" | Content-Type: "application/cose" | |||
| Payload: | Payload: | |||
| "COSE_Encrypted" : { | 16( # COSE_ENCRYPTED | |||
| 16( | ||||
| [ h'a1010a', # protected header: {"alg" : "AES-CCM-16-64-128"} | [ h'a1010a', # protected header: {"alg" : "AES-CCM-16-64-128"} | |||
| {5 : b64'ifUvZaHFgJM7UmGnjA'}, # unprotected header, IV | {5 : b64'ifUvZaHFgJM7UmGnjA'}, # unprotected header, IV | |||
| b64'WXThuZo6TMCaZZqi6ef/8WHTjOdGk8kNzaIhIQ' # ciphertext | b64'WXThuZo6TMCaZZqi6ef/8WHTjOdGk8kNzaIhIQ' # ciphertext | |||
| ] | ] | |||
| ) | ) | |||
| } | ||||
| Decrypted payload: | Decrypted payload: | |||
| { | { | |||
| "grant_type" : "client_credentials", | "grant_type" : "client_credentials", | |||
| "client_id" : "myclient", | "client_id" : "myclient", | |||
| "cnf" : { | "cnf" : { | |||
| "COSE_Key" : { | "COSE_Key" : { | |||
| "kty" : "EC", | "kty" : "EC", | |||
| "kid" : h'11', | "kid" : h'11', | |||
| "crv" : "P-256", | "crv" : "P-256", | |||
| skipping to change at page 22, line 6 ¶ | skipping to change at page 21, line 14 ¶ | |||
| Figure 7 shows a request for a token where a previously communicated | Figure 7 shows a request for a token where a previously communicated | |||
| proof-of-possession key is only referenced. Note that a transport | proof-of-possession key is only referenced. Note that a transport | |||
| layer based communication security profile is assumed in this | layer based communication security profile is assumed in this | |||
| example, therefore the Content-Type is "application/cbor". Also note | example, therefore the Content-Type is "application/cbor". Also note | |||
| that the client performs a password based authentication in this | that the client performs a password based authentication in this | |||
| example by submitting its client_secret (see section 2.3.1. of | example by submitting its client_secret (see section 2.3.1. of | |||
| [RFC6749]). | [RFC6749]). | |||
| Header: POST (Code=0.02) | Header: POST (Code=0.02) | |||
| Uri-Host: "server.example.com" | Uri-Host: "as.example.com" | |||
| Uri-Path: "token" | Uri-Path: "token" | |||
| Content-Type: "application/cbor" | Content-Type: "application/cbor" | |||
| Payload: | Payload: | |||
| { | { | |||
| "grant_type" : "client_credentials", | "grant_type" : "client_credentials", | |||
| "client_id" : "myclient", | "client_id" : "myclient", | |||
| "client_secret" : "mysecret234", | "client_secret" : "mysecret234", | |||
| "aud" : "valve424", | "aud" : "valve424", | |||
| "scope" : "read", | "scope" : "read", | |||
| "cnf" : { | "cnf" : { | |||
| skipping to change at page 22, line 44 ¶ | skipping to change at page 22, line 5 ¶ | |||
| issuing a successful response. It is assumed that the AS has prior | issuing a successful response. It is assumed that the AS has prior | |||
| knowledge of the capabilities of the client and the RS (see | knowledge of the capabilities of the client and the RS (see | |||
| Appendix D. This prior knowledge may, for example, be set by the use | Appendix D. This prior knowledge may, for example, be set by the use | |||
| of a dynamic client registration protocol exchange [RFC7591]. | of a dynamic client registration protocol exchange [RFC7591]. | |||
| The content of the successful reply is the RS Information. It MUST | The content of the successful reply is the RS Information. It MUST | |||
| be encoded as CBOR map, containing parameters as specified in section | be encoded as CBOR map, containing parameters as specified in section | |||
| 5.1 of [RFC6749]. In addition to these parameters, the following | 5.1 of [RFC6749]. In addition to these parameters, the following | |||
| parameters are also part of a successful response: | parameters are also part of a successful response: | |||
| profile | profile OPTIONAL. This indicates the profile that the client MUST | |||
| OPTIONAL. This indicates the profile that the client MUST use | use towards the RS. See Section 5.6.4.4 for the formatting of | |||
| towards the RS. See Section 5.6.4.4 for the formatting of this | this parameter. | |||
| parameter. | ||||
| . If this parameter is absent, the AS assumes that the client | . If this parameter is absent, the AS assumes that the client | |||
| implicitly knows which profile to use towards the RS. | implicitly knows which profile to use towards the RS. | |||
| cnf | cnf REQUIRED if the token type is "pop" and a symmetric key is used. | |||
| REQUIRED if the token type is "pop" and a symmetric key is used. | ||||
| MUST NOT be present otherwise. This field contains the symmetric | MUST NOT be present otherwise. This field contains the symmetric | |||
| proof-of-possession key the client is supposed to use. See | proof-of-possession key the client is supposed to use. See | |||
| Section 5.6.4.5 for details on the use of this parameter. | Section 5.6.4.5 for details on the use of this parameter. | |||
| rs_cnf | rs_cnf OPTIONAL if the token type is "pop" and asymmetric keys are | |||
| OPTIONAL if the token type is "pop" and asymmetric keys are used. | used. MUST NOT be present otherwise. This field contains | |||
| MUST NOT be present otherwise. This field contains information | information about the public key used by the RS to authenticate. | |||
| about the public key used by the RS to authenticate. See | See Section 5.6.4.5 for details on the use of this parameter. If | |||
| Section 5.6.4.5 for details on the use of this parameter. If this | this parameter is absent, the AS assumes that the client already | |||
| parameter is absent, the AS assumes that the client already knows | knows the public key of the RS. | |||
| the public key of the RS. | token_type OPTIONAL. By default implementations of this framework | |||
| token_type | SHOULD assume that the token_type is "pop". If a specific use | |||
| OPTIONAL. By default implementations of this framework SHOULD | case requires another token_type (e.g., "Bearer") to be used then | |||
| assume that the token_type is "pop". If a specific use case | this parameter is REQUIRED. | |||
| requires another token_type (e.g., "Bearer") to be used then this | ||||
| parameter is REQUIRED. | ||||
| Note that if CBOR Web Tokens [I-D.ietf-ace-cbor-web-token] are used, | Note that if CBOR Web Tokens [I-D.ietf-ace-cbor-web-token] are used, | |||
| the access token can also contain a "cnf" claim | the access token can also contain a "cnf" claim | |||
| [I-D.jones-ace-cwt-proof-of-possession]. This claim is however | [I-D.ietf-ace-cwt-proof-of-possession]. This claim is however | |||
| consumed by a different party. The access token is created by the AS | consumed by a different party. The access token is created by the AS | |||
| and processed by the RS (and opaque to the client) whereas the RS | and processed by the RS (and opaque to the client) whereas the RS | |||
| Information is created by the AS and processed by the client; it is | Information is created by the AS and processed by the client; it is | |||
| never forwarded to the resource server. | never forwarded to the resource server. | |||
| Figure 8 summarizes the parameters that may be part of the RS | Figure 8 summarizes the parameters that may be part of the RS | |||
| Information. | Information. | |||
| /-------------------+--------------------------\ | /-------------------+-----------------\ | |||
| | Parameter name | Specified in | | | Parameter name | Specified in | | |||
| |-------------------+--------------------------| | |-------------------+-----------------| | |||
| | access_token | RFC 6749 | | | access_token | RFC 6749 | | |||
| | token_type | RFC 6749 | | | token_type | RFC 6749 | | |||
| | expires_in | RFC 6749 | | | expires_in | RFC 6749 | | |||
| | refresh_token | RFC 6749 | | | refresh_token | RFC 6749 | | |||
| | scope | RFC 6749 | | | scope | RFC 6749 | | |||
| | state | RFC 6749 | | | state | RFC 6749 | | |||
| | error | RFC 6749 | | | error | RFC 6749 | | |||
| | error_description | RFC 6749 | | | error_description | RFC 6749 | | |||
| | error_uri | RFC 6749 | | | error_uri | RFC 6749 | | |||
| | profile | [[ this specification ]] | | | profile | [this document] | | |||
| | cnf | [[ this specification ]] | | | cnf | [this document] | | |||
| | rs_cnf | [[ this specification ]] | | | rs_cnf | [this document] | | |||
| \-------------------+--------------------------/ | \-------------------+-----------------/ | |||
| Figure 8: RS Information parameters | Figure 8: RS Information parameters | |||
| Figure 9 shows a response containing a token and a "cnf" parameter | Figure 9 shows a response containing a token and a "cnf" parameter | |||
| with a symmetric proof-of-possession key. Note that transport layer | with a symmetric proof-of-possession key. Note that transport layer | |||
| security is assumed in this example, therefore the Content-Type is | security is assumed in this example, therefore the Content-Type is | |||
| "application/cbor". | "application/cbor". | |||
| Header: Created (Code=2.01) | Header: Created (Code=2.01) | |||
| Content-Type: "application/cbor" | Content-Type: "application/cbor" | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at page 24, line 25 ¶ | |||
| o A response code equivalent to the CoAP code 4.00 (Bad Request) | o A response code equivalent to the CoAP code 4.00 (Bad Request) | |||
| MUST be used for all error responses, except for invalid_client | MUST be used for all error responses, except for invalid_client | |||
| where a response code equivalent to the CoAP code 4.01 | where a response code equivalent to the CoAP code 4.01 | |||
| (Unauthorized) MAY be used under the same conditions as specified | (Unauthorized) MAY be used under the same conditions as specified | |||
| in section 5.2 of [RFC6749]. | in section 5.2 of [RFC6749]. | |||
| o The parameters "error", "error_description" and "error_uri" MUST | o The parameters "error", "error_description" and "error_uri" MUST | |||
| be abbreviated using the codes specified in Figure 12. | be abbreviated using the codes specified in Figure 12. | |||
| o The error code (i.e., value of the "error" parameter) MUST be | o The error code (i.e., value of the "error" parameter) MUST be | |||
| abbreviated as specified in Figure 10. | abbreviated as specified in Figure 10. | |||
| /------------------------+-------------------\ | /------------------------+----------\ | |||
| | error code | CBOR Value (uint) | | | Name | CBOR Key | | |||
| |------------------------+-------------------| | |------------------------+----------| | |||
| | invalid_request | 0 | | | invalid_request | 0 | | |||
| | invalid_client | 1 | | | invalid_client | 1 | | |||
| | invalid_grant | 2 | | | invalid_grant | 2 | | |||
| | unauthorized_client | 3 | | | unauthorized_client | 3 | | |||
| | unsupported_grant_type | 4 | | | unsupported_grant_type | 4 | | |||
| | invalid_scope | 5 | | | invalid_scope | 5 | | |||
| | unsupported_pop_key | 6 | | | unsupported_pop_key | 6 | | |||
| \------------------------+-------------------/ | \------------------------+----------/ | |||
| Figure 10: CBOR abbreviations for common error codes | Figure 10: CBOR abbreviations for common error codes | |||
| In addition to the error responses defined in OAuth 2.0, the | In addition to the error responses defined in OAuth 2.0, the | |||
| following behavior MUST be implemented by the AS: If the client | following behavior MUST be implemented by the AS: If the client | |||
| submits an asymmetric key in the token request that the RS cannot | submits an asymmetric key in the token request that the RS cannot | |||
| process, the AS MUST reject that request with a response code | process, the AS MUST reject that request with a response code | |||
| equivalent to the CoAP code 4.00 (Bad Request) including the error | equivalent to the CoAP code 4.00 (Bad Request) including the error | |||
| code "unsupported_pop_key" defined in Figure 10. | code "unsupported_pop_key" defined in Figure 10. | |||
| skipping to change at page 26, line 5 ¶ | skipping to change at page 25, line 17 ¶ | |||
| This parameter specifies for which audience the client is requesting | This parameter specifies for which audience the client is requesting | |||
| a token. It should be encoded as CBOR text string (major type 3). | a token. It should be encoded as CBOR text string (major type 3). | |||
| The formatting and semantics of these strings are application | The formatting and semantics of these strings are application | |||
| specific. | specific. | |||
| 5.6.4.2. Grant Type | 5.6.4.2. Grant Type | |||
| The abbreviations in Figure 11 MUST be used in CBOR encodings instead | The abbreviations in Figure 11 MUST be used in CBOR encodings instead | |||
| of the string values defined in [RFC6749]. | of the string values defined in [RFC6749]. | |||
| /--------------------+-------------------\ | /--------------------+----------+------------------------\ | |||
| | grant_type | CBOR Value (uint) | | | Name | CBOR Key | Original Specification | | |||
| |--------------------+-------------------| | |--------------------+----------+------------------------| | |||
| | password | 0 | | | password | 0 | RFC6749 | | |||
| | authorization_code | 1 | | | authorization_code | 1 | RFC6749 | | |||
| | client_credentials | 2 | | | client_credentials | 2 | RFC6749 | | |||
| | refresh_token | 3 | | | refresh_token | 3 | RFC6749 | | |||
| \--------------------+-------------------/ | \--------------------+----------+------------------------/ | |||
| Figure 11: CBOR abbreviations for common grant types | Figure 11: CBOR abbreviations for common grant types | |||
| 5.6.4.3. Token Type | 5.6.4.3. Token Type | |||
| The token_type parameter is defined in [RFC6749], allowing the AS to | The token_type parameter is defined in [RFC6749], allowing the AS to | |||
| indicate to the client which type of access token it is receiving | indicate to the client which type of access token it is receiving | |||
| (e.g., a bearer token). | (e.g., a bearer token). | |||
| This document registers the new value "pop" for the OAuth Access | This document registers the new value "pop" for the OAuth Access | |||
| skipping to change at page 27, line 5 ¶ | skipping to change at page 26, line 17 ¶ | |||
| Profiles MAY define additional parameters for both the token request | Profiles MAY define additional parameters for both the token request | |||
| and the RS Information in the access token response in order to | and the RS Information in the access token response in order to | |||
| support negotiation or signaling of profile specific parameters. | support negotiation or signaling of profile specific parameters. | |||
| 5.6.4.5. Confirmation | 5.6.4.5. Confirmation | |||
| The "cnf" parameter identifies or provides the key used for proof-of- | The "cnf" parameter identifies or provides the key used for proof-of- | |||
| possession, while the "rs_cnf" parameter provides the raw public key | possession, while the "rs_cnf" parameter provides the raw public key | |||
| of the RS. Both parameters use the same formatting and semantics as | of the RS. Both parameters use the same formatting and semantics as | |||
| the "cnf" claim specified in [I-D.jones-ace-cwt-proof-of-possession]. | the "cnf" claim specified in [I-D.ietf-ace-cwt-proof-of-possession]. | |||
| In addition to the use as a claim in a CWT, the "cnf" parameter is | In addition to the use as a claim in a CWT, the "cnf" parameter is | |||
| used in the following contexts with the following meaning: | used in the following contexts with the following meaning: | |||
| o In the token request C -> AS, to indicate the client's raw public | o In the token request C -> AS, to indicate the client's raw public | |||
| key, or the key-identifier of a previously established key between | key, or the key-identifier of a previously established key between | |||
| C and RS. | C and RS. | |||
| o In the token response AS -> C, to indicate the symmetric key | o In the token response AS -> C, to indicate the symmetric key | |||
| generated by the AS for proof-of-possession. | generated by the AS for proof-of-possession. | |||
| o In the introspection response AS -> RS, to indicate the proof-of- | o In the introspection response AS -> RS, to indicate the proof-of- | |||
| skipping to change at page 28, line 5 ¶ | skipping to change at page 27, line 5 ¶ | |||
| 5.6.5. Mapping parameters to CBOR | 5.6.5. Mapping parameters to CBOR | |||
| All OAuth parameters in access token requests and responses MUST be | All OAuth parameters in access token requests and responses MUST be | |||
| mapped to CBOR types as specified in Figure 12, using the given | mapped to CBOR types as specified in Figure 12, using the given | |||
| integer abbreviation for the key. | integer abbreviation for the key. | |||
| Note that we have aligned these abbreviations with the claim | Note that we have aligned these abbreviations with the claim | |||
| abbreviations defined in [I-D.ietf-ace-cbor-web-token]. | abbreviations defined in [I-D.ietf-ace-cbor-web-token]. | |||
| /-------------------+----------+------------------\ | /-------------------+----------+---------------------\ | |||
| | Parameter name | CBOR Key | Type | | | Name | CBOR Key | Major Type | | |||
| |-------------------+----------+------------------| | |-------------------+----------+---------------------| | |||
| | aud | 3 | text string | | | aud | 3 | text string | | |||
| | client_id | 8 | text string | | | client_id | 8 | text string | | |||
| | client_secret | 9 | byte string | | | client_secret | 9 | byte string | | |||
| | response_type | 10 | text string | | | response_type | 10 | text string | | |||
| | redirect_uri | 11 | text string | | | redirect_uri | 11 | text string | | |||
| | scope | 12 | text string | | | scope | 12 | text or byte string | | |||
| | state | 13 | text string | | | state | 13 | text string | | |||
| | code | 14 | byte string | | | code | 14 | byte string | | |||
| | error | 15 | text string | | | error | 15 | text string | | |||
| | error_description | 16 | text string | | | error_description | 16 | text string | | |||
| | error_uri | 17 | text string | | | error_uri | 17 | text string | | |||
| | grant_type | 18 | unsigned integer | | | grant_type | 18 | unsigned integer | | |||
| | access_token | 19 | text string | | | access_token | 19 | text string | | |||
| | token_type | 20 | unsigned integer | | | token_type | 20 | unsigned integer | | |||
| | expires_in | 21 | unsigned integer | | | expires_in | 21 | unsigned integer | | |||
| | username | 22 | text string | | | username | 22 | text string | | |||
| | password | 23 | text string | | | password | 23 | text string | | |||
| | refresh_token | 24 | text string | | | refresh_token | 24 | text string | | |||
| | cnf | 25 | map | | | cnf | 25 | map | | |||
| | profile | 26 | text string | | | profile | 26 | text string | | |||
| | rs_cnf | 31 | map | | | rs_cnf | 31 | map | | |||
| \-------------------+----------+------------------/ | \-------------------+----------+---------------------/ | |||
| Figure 12: CBOR mappings used in token requests | Figure 12: CBOR mappings used in token requests | |||
| 5.7. The 'Introspect' Endpoint | 5.7. The 'Introspect' Endpoint | |||
| Token introspection [RFC7662] can be OPTIONALLY provided by the AS, | Token introspection [RFC7662] can be OPTIONALLY provided by the AS, | |||
| and is then used by the RS and potentially the client to query the AS | and is then used by the RS and potentially the client to query the AS | |||
| for metadata about a given token e.g., validity or scope. Analogous | for metadata about a given token e.g., validity or scope. Analogous | |||
| to the protocol defined in RFC 7662 [RFC7662] for HTTP and JSON, this | to the protocol defined in RFC 7662 [RFC7662] for HTTP and JSON, this | |||
| section defines adaptations to more constrained environments using | section defines adaptations to more constrained environments using | |||
| skipping to change at page 29, line 5 ¶ | skipping to change at page 28, line 5 ¶ | |||
| profile. | profile. | |||
| Communication between the RS and the introspection endpoint at the AS | Communication between the RS and the introspection endpoint at the AS | |||
| MUST be integrity protected and encrypted. Furthermore AS and RS | MUST be integrity protected and encrypted. Furthermore AS and RS | |||
| MUST perform mutual authentication. Finally the AS SHOULD verify | MUST perform mutual authentication. Finally the AS SHOULD verify | |||
| that the RS has the right to access introspection information about | that the RS has the right to access introspection information about | |||
| the provided token. Profiles of this framework that support | the provided token. Profiles of this framework that support | |||
| introspection MUST specify how authentication and communication | introspection MUST specify how authentication and communication | |||
| security between RS and AS is implemented. | security between RS and AS is implemented. | |||
| The default name of this endpoint in an url-path is 'introspect', | ||||
| however implementations are not required to use this name and can | ||||
| define their own instead. | ||||
| The figures of this section uses CBOR diagnostic notation without the | The figures of this section uses CBOR diagnostic notation without the | |||
| integer abbreviations for the parameters or their values for better | integer abbreviations for the parameters or their values for better | |||
| readability. | readability. | |||
| Note that supporting introspection is OPTIONAL for implementations of | Note that supporting introspection is OPTIONAL for implementations of | |||
| this framework. | this framework. | |||
| 5.7.1. RS-to-AS Request | 5.7.1. RS-to-AS Request | |||
| The RS sends a POST request to the introspection endpoint at the AS, | The RS sends a POST request to the introspection endpoint at the AS, | |||
| skipping to change at page 29, line 31 ¶ | skipping to change at page 28, line 35 ¶ | |||
| The same parameters are required and optional as in section 2.1 of | The same parameters are required and optional as in section 2.1 of | |||
| RFC 7662 [RFC7662]. | RFC 7662 [RFC7662]. | |||
| For example, Figure 13 shows a RS calling the token introspection | For example, Figure 13 shows a RS calling the token introspection | |||
| endpoint at the AS to query about an OAuth 2.0 proof-of-possession | endpoint at the AS to query about an OAuth 2.0 proof-of-possession | |||
| token. Note that object security based on COSE is assumed in this | token. Note that object security based on COSE is assumed in this | |||
| example, therefore the Content-Type is "application/cose+cbor". | example, therefore the Content-Type is "application/cose+cbor". | |||
| Header: POST (Code=0.02) | Header: POST (Code=0.02) | |||
| Uri-Host: "server.example.com" | Uri-Host: "as.example.com" | |||
| Uri-Path: "introspect" | Uri-Path: "introspect" | |||
| Content-Type: "application/cose+cbor" | Content-Type: "application/cose+cbor" | |||
| Payload: | Payload: | |||
| { | { | |||
| "token" : b64'7gj0dXJQ43U', | "token" : b64'7gj0dXJQ43U', | |||
| "token_type_hint" : "pop" | "token_type_hint" : "pop" | |||
| } | } | |||
| Figure 13: Example introspection request. | Figure 13: Example introspection request. | |||
| skipping to change at page 30, line 5 ¶ | skipping to change at page 29, line 9 ¶ | |||
| If the introspection request is authorized and successfully | If the introspection request is authorized and successfully | |||
| processed, the AS sends a response with the response code equivalent | processed, the AS sends a response with the response code equivalent | |||
| to the CoAP code 2.01 (Created). If the introspection request was | to the CoAP code 2.01 (Created). If the introspection request was | |||
| invalid, not authorized or couldn't be processed the AS returns an | invalid, not authorized or couldn't be processed the AS returns an | |||
| error response as described in Section 5.7.3. | error response as described in Section 5.7.3. | |||
| In a successful response, the AS encodes the response parameters in a | In a successful response, the AS encodes the response parameters in a | |||
| CBOR map including with the same required and optional parameters as | CBOR map including with the same required and optional parameters as | |||
| in section 2.2. of RFC 7662 [RFC7662] with the following additions: | in section 2.2. of RFC 7662 [RFC7662] with the following additions: | |||
| cnf | cnf OPTIONAL. This field contains information about the proof-of- | |||
| OPTIONAL. This field contains information about the proof-of- | ||||
| possession key that binds the client to the access token. See | possession key that binds the client to the access token. See | |||
| Section 5.6.4.5 for more details on the use of the "cnf" | Section 5.6.4.5 for more details on the use of the "cnf" | |||
| parameter. | parameter. | |||
| profile OPTIONAL. This indicates the profile that the RS MUST use | ||||
| profile | with the client. See Section 5.6.4.4 for more details on the | |||
| OPTIONAL. This indicates the profile that the RS MUST use with | ||||
| the client. See Section 5.6.4.4 for more details on the | ||||
| formatting of this parameter. | formatting of this parameter. | |||
| client_token OPTIONAL. This parameter contains information that the | ||||
| client_token | RS MUST pass on to the client. See Section 5.7.4 for more | |||
| OPTIONAL. This parameter contains information that the RS MUST | details. | |||
| pass on to the client. See Section 5.7.4 for more details. | ||||
| For example, Figure 14 shows an AS response to the introspection | For example, Figure 14 shows an AS response to the introspection | |||
| request in Figure 13. Note that transport layer security is assumed | request in Figure 13. Note that transport layer security is assumed | |||
| in this example, therefore the Content-Type is "application/cbor". | in this example, therefore the Content-Type is "application/cbor". | |||
| Header: Created Code=2.01) | Header: Created Code=2.01) | |||
| Content-Type: "application/cbor" | Content-Type: "application/cbor" | |||
| Payload: | Payload: | |||
| { | { | |||
| "active" : true, | "active" : true, | |||
| skipping to change at page 32, line 29 ¶ | skipping to change at page 31, line 29 ¶ | |||
| | | + Client Token | | | | + Client Token | | |||
| |<---------------+ | | |<---------------+ | | |||
| | 2.01 Created | | | | 2.01 Created | | | |||
| | + Client Token | | | + Client Token | | |||
| Figure 15: Use of the client_token parameter. | Figure 15: Use of the client_token parameter. | |||
| The client token is a COSE_Encrypted object, containing as payload a | The client token is a COSE_Encrypted object, containing as payload a | |||
| CBOR map with the following claims: | CBOR map with the following claims: | |||
| cnf | cnf REQUIRED if the token type is "pop", OPTIONAL otherwise. | |||
| REQUIRED if the token type is "pop", OPTIONAL otherwise. Contains | Contains information about the proof-of-possession key the client | |||
| information about the proof-of-possession key the client is to use | is to use with its access token. See Section 5.6.4.5. | |||
| with its access token. See Section 5.6.4.5. | token_type OPTIONAL. See Section 5.6.4.3. | |||
| profile REQUIRED. See Section 5.6.4.4. | ||||
| token_type | rs_cnf OPTIONAL. Contains information about the key that the RS | |||
| OPTIONAL. See Section 5.6.4.3. | uses to authenticate towards the client. If the key is symmetric | |||
| then this claim MUST NOT be part of the Client Token, since this | ||||
| profile | is the same key as the one specified through the "cnf" claim. | |||
| REQUIRED. See Section 5.6.4.4. | This claim uses the same encoding as the "cnf" parameter. See | |||
| rs_cnf | ||||
| OPTIONAL. Contains information about the key that the RS uses to | ||||
| authenticate towards the client. If the key is symmetric then | ||||
| this claim MUST NOT be part of the Client Token, since this is the | ||||
| same key as the one specified through the "cnf" claim. This claim | ||||
| uses the same encoding as the "cnf" parameter. See | ||||
| Section 5.6.4.4. | Section 5.6.4.4. | |||
| The AS encrypts this token using a key shared between the AS and the | The AS encrypts this token using a key shared between the AS and the | |||
| client, so that only the client can decrypt it and access its | client, so that only the client can decrypt it and access its | |||
| payload. How this key is established is out of scope of this | payload. How this key is established is out of scope of this | |||
| framework, however it can be established at the same time at which | framework, however it can be established at the same time at which | |||
| the client's long term token is created. | the client's long term token is created. | |||
| An RS that is configured to perform introspection, MUST do so | An RS that is configured to perform introspection, MUST do so | |||
| immediately after receiving an access token, in order to be able to | immediately after receiving an access token, in order to be able to | |||
| return a potential client token to the client. This does not | return a potential client token to the client. This does not | |||
| preclude the RS to perform additional introspection asynchronously, | preclude the RS to perform additional introspection asynchronously, | |||
| e.g., when the token is later used. | e.g., when the token is later used. | |||
| 5.7.5. Mapping Introspection parameters to CBOR | 5.7.5. Mapping Introspection parameters to CBOR | |||
| The introspection request and response parameters MUST be mapped to | The introspection request and response parameters MUST be mapped to | |||
| CBOR types as specified in Figure 16, using the given integer | CBOR types as specified in Figure 16, using the given integer | |||
| abbreviation for the key. | abbreviation for the key. | |||
| Note that we have aligned these abbreviatations with the claim | Note that we have aligned these abbreviations with the claim | |||
| abbreviations defined in [I-D.ietf-ace-cbor-web-token]. | abbreviations defined in [I-D.ietf-ace-cbor-web-token]. | |||
| /-----------------+----------+-----------------\ | /-----------------+----------+-----------------------\ | |||
| | Parameter name | CBOR Key | Major Type | | | Parameter name | CBOR Key | Major Type | | |||
| |-----------------+----------+-----------------| | |-----------------+----------+-----------------------| | |||
| | iss | 1 | 3 (text string) | | | iss | 1 | text string | | |||
| | sub | 2 | 3 | | | sub | 2 | text string | | |||
| | aud | 3 | 3 | | | aud | 3 | text string | | |||
| | exp | 4 | 6 tag value 1 | | | exp | 4 | Epoch-based date/time | | |||
| | nbf | 5 | 6 tag value 1 | | | nbf | 5 | Epoch-based date/time | | |||
| | iat | 6 | 6 tag value 1 | | | iat | 6 | Epoch-based date/time | | |||
| | cti | 7 | 2 (byte string) | | | cti | 7 | byte string | | |||
| | client_id | 8 | 3 | | | client_id | 8 | text string | | |||
| | scope | 12 | 3 | | | scope | 12 | text OR byte string | | |||
| | token_type | 20 | 3 | | | token_type | 20 | text string | | |||
| | username | 22 | 3 | | | username | 22 | text string | | |||
| | cnf | 25 | 5 (map) | | | cnf | 25 | map | | |||
| | profile | 26 | 0 (uint) | | | profile | 26 | unsigned integer | | |||
| | token | 27 | 3 | | | token | 27 | text string | | |||
| | token_type_hint | 28 | 3 | | | token_type_hint | 28 | text string | | |||
| | active | 29 | 0 | | | active | 29 | unsigned integer | | |||
| | client_token | 30 | 3 | | | client_token | 30 | byte string | | |||
| | rs_cnf | 31 | 5 | | | rs_cnf | 31 | map | | |||
| \-----------------+----------+-----------------/ | \-----------------+----------+-----------------------/ | |||
| Figure 16: CBOR Mappings to Token Introspection Parameters. | Figure 16: CBOR Mappings to Token Introspection Parameters. | |||
| 5.8. The Access Token | 5.8. The Access Token | |||
| This framework RECOMMENDS the use of CBOR web token (CWT) as | This framework RECOMMENDS the use of CBOR web token (CWT) as | |||
| specified in [I-D.ietf-ace-cbor-web-token]. | specified in [I-D.ietf-ace-cbor-web-token]. | |||
| In order to facilitate offline processing of access tokens, this | In order to facilitate offline processing of access tokens, this | |||
| draft uses the "cnf" claim from | draft uses the "cnf" claim from | |||
| [I-D.ietf-ace-cwt-proof-of-possession] and specifies the "scope" | ||||
| [I-D.jones-ace-cwt-proof-of-possession] and specifies the "scope" | claim for both JSON and CBOR web tokens. | |||
| claim for CBOR web tokens. | ||||
| The "scope" claim explicitly encodes the scope of a given access | The "scope" claim explicitly encodes the scope of a given access | |||
| token. This claim follows the same encoding rules as defined in | token. This claim follows the same encoding rules as defined in | |||
| section 3.3 of [RFC6749]. The meaning of a specific scope value is | section 3.3 of [RFC6749], but in addition implementers MAY use byte | |||
| application specific and expected to be known to the RS running that | arrays as scope values, to achieve compact encoding of large scope | |||
| application. | elements. The meaning of a specific scope value is application | |||
| specific and expected to be known to the RS running that application. | ||||
| 5.8.1. The 'Authorization Information' Endpoint | 5.8.1. The 'Authorization Information' Endpoint | |||
| The access token, containing authorization information and | The access token, containing authorization information and | |||
| information about the key used by the client, needs to be transported | information about the key used by the client, needs to be transported | |||
| to the RS so that the RS can authenticate and authorize the client | to the RS so that the RS can authenticate and authorize the client | |||
| request. | request. | |||
| This section defines a method for transporting the access token to | This section defines a method for transporting the access token to | |||
| the RS using a RESTful protocol such as CoAP. Profiles of this | the RS using a RESTful protocol such as CoAP. Profiles of this | |||
| skipping to change at page 35, line 12 ¶ | skipping to change at page 34, line 5 ¶ | |||
| responding to the POST request to the authz-info endpoint. If the | responding to the POST request to the authz-info endpoint. If the | |||
| introspection response contains a client token (Section 5.7.4) then | introspection response contains a client token (Section 5.7.4) then | |||
| this token SHALL be included in the payload of the 2.01 (Created) | this token SHALL be included in the payload of the 2.01 (Created) | |||
| response. | response. | |||
| Profiles MUST specify how the authz-info endpoint is protected. Note | Profiles MUST specify how the authz-info endpoint is protected. Note | |||
| that since the token contains information that allow the client and | that since the token contains information that allow the client and | |||
| the RS to establish a security context in the first place, mutual | the RS to establish a security context in the first place, mutual | |||
| authentication may not be possible at this point. | authentication may not be possible at this point. | |||
| The default name of this endpoint in an url-path is 'authz-info', | ||||
| however implementations are not required to use this name and can | ||||
| define their own instead. | ||||
| 5.8.2. Token Expiration | 5.8.2. Token Expiration | |||
| Depending on the capabilities of the RS, there are various ways in | Depending on the capabilities of the RS, there are various ways in | |||
| which it can verify the validity of a received access token. Here | which it can verify the validity of a received access token. Here | |||
| follows a list of the possibilities including what functionality they | follows a list of the possibilities including what functionality they | |||
| require of the RS. | require of the RS. | |||
| o The token is a CWT and includes an "exp" claim and possibly the | o The token is a CWT and includes an "exp" claim and possibly the | |||
| "nbf" claim. The RS verifies these by comparing them to values | "nbf" claim. The RS verifies these by comparing them to values | |||
| from its internal clock as defined in [RFC7519]. In this case the | from its internal clock as defined in [RFC7519]. In this case the | |||
| skipping to change at page 39, line 8 ¶ | skipping to change at page 37, line 46 ¶ | |||
| relationship with C. It is advisable to include as little | relationship with C. It is advisable to include as little | |||
| information as possible in an unencrypted response. Means of | information as possible in an unencrypted response. Means of | |||
| encrypting communication between C and RS already exist, more | encrypting communication between C and RS already exist, more | |||
| detailed information may be included with an error response to | detailed information may be included with an error response to | |||
| provide C with sufficient information to react on that particular | provide C with sufficient information to react on that particular | |||
| error. | error. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| This specification registers new parameters for OAuth and establishes | This specification registers new parameters for OAuth and establishes | |||
| registries for mappings to CBOR. | registries for mappings to CBOR abbreviations. | |||
| 8.1. OAuth Introspection Response Parameter Registration | 8.1. Authorization Server Information | |||
| This specification registers the following parameters in the OAuth | A new registry will be requested from IANA, entitled "Authorization | |||
| introspection response parameters | Server Information". The registry is to be created as Expert Review | |||
| Required. | ||||
| o Name: "cnf" | The columns of this table are: | |||
| o Description: Key to prove the right to use an access token, | ||||
| formatted as specified in [I-D.jones-ace-cwt-proof-of-possession]. | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Name: "profile" | Name The name of the parameter | |||
| o Description: The communication and communication security profile | CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | |||
| used between client and RS, as defined in ACE profiles. | this parameter name. Registration in the table is based on the | |||
| o Change Controller: IESG | value of the mapping requested. Integer values between 1 and 255 | |||
| o Specification Document(s): this document | are designated as Standards Track Document required. Integer | |||
| values from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Major Type The CBOR major type allowable for the values of this | ||||
| parameter. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| grant type abbreviation, if one exists. | ||||
| o Name: "client_token" | This registry will be initially populated by the values in Figure 2. | |||
| o Description: Information that the RS MUST pass to the client e.g., | The Reference column for all of these entries will be this document. | |||
| about the proof-of-possession keys. | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Name: "rs_cnf" | 8.2. OAuth Error Code CBOR Mappings Registry | |||
| o Description: Describes the public key the RS uses to authenticate. | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| 8.2. OAuth Parameter Registration | A new registry will be requested from IANA, entitled "OAuth Error | |||
| Code CBOR Mappings Registry". The registry is to be created as | ||||
| Expert Review Required. | ||||
| This specification registers the following parameters in the OAuth | The columns of this table are: | |||
| Parameters Registry | ||||
| o Parameter name: "profile" | Name The OAuth Error Code name, refers to the name in section 5.2. | |||
| o Parameter usage location: token request, and token response | of [RFC6749] e.g., "invalid_request". | |||
| o Change Controller: IESG | CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | |||
| o Specification Document(s): this document | this error code. Registration in the table is based on the value | |||
| of the mapping requested. Integer values between 1 and 255 are | ||||
| designated as Standards Track Document required. Integer values | ||||
| from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| grant type abbreviation, if one exists. | ||||
| o Name: "cnf" | This registry will be initially populated by the values in Figure 10. | |||
| o Description: Key to prove the right to use an access token, | The Reference column for all of these entries will be this document. | |||
| formatted as defined in [I-D.jones-ace-cwt-proof-of-possession]. | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| 8.3. OAuth Access Token Types | 8.3. OAuth Grant Type CBOR Mappings | |||
| A new registry will be requested from IANA, entitled "OAuth Grant | ||||
| Type CBOR Mappings". The registry is to be created as Expert Review | ||||
| Required. | ||||
| The columns of this table are: | ||||
| Name The name of the grant type as specified in Section 1.3 of | ||||
| [RFC6749]. | ||||
| CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | ||||
| this grant type. Registration in the table is based on the value | ||||
| of the mapping requested. Integer values between 1 and 255 are | ||||
| designated as Standards Track Document required. Integer values | ||||
| from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| grant type abbreviation, if one exists. | ||||
| Original Specification This contains a pointer to the public | ||||
| specification of the grant type, if one exists. | ||||
| This registry will be initially populated by the values in Figure 11. | ||||
| The Reference column for all of these entries will be this document. | ||||
| 8.4. OAuth Access Token Types | ||||
| This specification registers the following new token type in the | This specification registers the following new token type in the | |||
| OAuth Access Token Types Registry | OAuth Access Token Types Registry | |||
| o Name: "PoP" | o Name: "PoP" | |||
| o Description: A proof-of-possession token. | o Change Controller: IETF | |||
| o Change Controller: IESG | o Reference: [this document] | |||
| o Specification Document(s): this document | ||||
| 8.4. OAuth Token Type CBOR Mappings | 8.5. OAuth Token Type CBOR Mappings | |||
| A new registry will be requested from IANA, entitled "Token Type | A new registry will be requested from IANA, entitled "Token Type CBOR | |||
| Mappings". The registry is to be created as Expert Review Required. | Mappings". The registry is to be created as Expert Review Required. | |||
| 8.4.1. Registration Template | The columns of this table are: | |||
| Token Type: | ||||
| Name of token type as registered in the OAuth token type registry | ||||
| e.g., "Bearer". | ||||
| Mapped value: | ||||
| Integer representation for the token type value. The key value | ||||
| MUST be an integer. Integer values from -65536 to 65535 are | ||||
| designated as Specification Required. Integer values of greater | ||||
| than 65535 designated as expert review. Integer values less than | ||||
| -65536 are marked as private use. | ||||
| 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. | ||||
| 8.4.2. Initial Registry Contents | ||||
| o Parameter name: "Bearer" | ||||
| o Mapped value: 1 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "pop" | Name The name of token type as registered in the OAuth Access Token | |||
| o Mapped value: 2 | Types registry e.g., "Bearer". | |||
| o Change Controller: IESG | CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | |||
| o Specification Document(s): this document | this access token type. Registration in the table is based on the | |||
| value of the mapping requested. Integer values between 1 and 255 | ||||
| are designated as Standards Track Document required. Integer | ||||
| values from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| OAuth token type abbreviation, if one exists. | ||||
| Original Specification This contains a pointer to the public | ||||
| specification of the grant type, if one exists. | ||||
| 8.5. CBOR Web Token Claims | 8.5.1. Initial Registry Contents | |||
| This specification registers the following new claims in the CBOR Web | o Name: "Bearer" | |||
| Token (CWT) registry: | o Value: 1 | |||
| o Reference: [this document] | ||||
| o Original Specification: [RFC6749] | ||||
| o Claim Name: "scope" | o Name: "pop" | |||
| o Claim Description: The scope of an access token as defined in | o Value: 2 | |||
| [RFC6749]. | o Reference: [this document] | |||
| o Change Controller: IESG | o Original Specification: [this document] | |||
| o Specification Document(s): this document | ||||
| 8.6. ACE OAuth Profile Registry | 8.6. ACE OAuth Profile Registry | |||
| A new registry will be requested from IANA, entitled "ACE Profile | A new registry will be requested from IANA, entitled "ACE Profile | |||
| Registry". The registry is to be created as Expert Review Required. | Registry". The registry is to be created as Expert Review Required. | |||
| 8.6.1. Registration Template | The columns of this table are: | |||
| Profile name: | ||||
| Name of the profile to be included in the profile attribute. | ||||
| Profile description: | ||||
| Text giving an overview of the profile and the context it is | ||||
| developed for. | ||||
| Profile ID: | ||||
| Integer value to identify the profile. Integer values from -65536 | ||||
| to 65535 are designated as Specification Required. Integer values | ||||
| of greater than 65535 designated as expert review. Integer values | ||||
| less than -65536 are marked as private use. | ||||
| 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. | ||||
| 8.7. OAuth CBOR Parameter Mappings Registry | ||||
| A new registry will be requested from IANA, entitled "Token Endpoint | ||||
| CBOR Mappings Registry". The registry is to be created as Expert | ||||
| Review Required. | ||||
| 8.7.1. Registration Template | ||||
| Parameter name: | ||||
| OAuth Parameter name, refers to the name in the OAuth parameter | ||||
| registry e.g., "client_id". | ||||
| CBOR key value: | ||||
| Key value for the claim. The key value MUST be an integer. | ||||
| Integer values from -65536 to 65535 are designated as | ||||
| Specification Required. Integer values of greater than 65535 | ||||
| designated as expert review. Integer values less than -65536 are | ||||
| marked as private use. | ||||
| 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. | ||||
| 8.7.2. Initial Registry Contents | ||||
| o Parameter name: "aud" | ||||
| o CBOR key value: 3 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "client_id" | ||||
| o CBOR key value: 8 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "client_secret" | Name The name of the profile, to be used as value of the profile | |||
| o CBOR key value: 9 | attribute. | |||
| o Change Controller: IESG | Description Text giving an overview of the profile and the context | |||
| o Specification Document(s): this document | it is developed for. | |||
| CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | ||||
| this profile name. Registration in the table is based on the | ||||
| value of the mapping requested. Integer values between 1 and 255 | ||||
| are designated as Standards Track Document required. Integer | ||||
| values from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| profile abbreviation, if one exists. | ||||
| o Parameter name: "response_type" | 8.7. OAuth Parameter Registration | |||
| o CBOR key value: 10 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "redirect_uri" | This specification registers the following parameters in the OAuth | |||
| o CBOR key value: 11 | Parameters Registry | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "scope" | ||||
| o CBOR key value: 12 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "state" | o Name: "profile" | |||
| o CBOR key value: 13 | o Parameter Usage Location: token request, token response | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.6.4.4 of [this document] | |||
| o Parameter name: "code" | o Name: "cnf" | |||
| o CBOR key value: 14 | o Parameter Usage Location: token request, token response | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.6.4.5 of [this document] | |||
| o Parameter name: "error" | o Name: "rs_cnf" | |||
| o CBOR key value: 15 | o Parameter Usage Location: token response | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.6.4.5 of [this document] | |||
| o Parameter name: "error_description" | 8.8. OAuth CBOR Parameter Mappings Registry | |||
| o CBOR key value: 16 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "error_uri" | A new registry will be requested from IANA, entitled "Token Endpoint | |||
| o CBOR key value: 17 | CBOR Mappings Registry". The registry is to be created as Expert | |||
| o Change Controller: IESG | Review Required. | |||
| o Specification Document(s): this document | ||||
| o Parameter name: "grant_type" | The columns of this table are: | |||
| o CBOR key value: 18 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "access_token" | Name The OAuth Parameter name, refers to the name in the OAuth | |||
| o CBOR key value: 19 | parameter registry e.g., "client_id". | |||
| o Change Controller: IESG | CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | |||
| o Specification Document(s): this document | this parameter. Registration in the table is based on the value | |||
| of the mapping requested. Integer values between 1 and 255 are | ||||
| designated as Standards Track Document required. Integer values | ||||
| from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Major Type The allowable CBOR data types for values of this | ||||
| parameter. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| grant type abbreviation, if one exists. | ||||
| o Parameter name: "token_type" | This registry will be initially populated by the values in Figure 12. | |||
| o CBOR key value: 20 | The Reference column for all of these entries will be this document. | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "expires_in" | Note that these mappings intentionally coincide with the CWT claim | |||
| o CBOR key value: 21 | name mappings from [I-D.ietf-ace-cbor-web-token]. | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "username" | 8.9. OAuth Introspection Response Parameter Registration | |||
| o CBOR key value: 22 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "password" | This specification registers the following parameters in the OAuth | |||
| o CBOR key value: 23 | Token Introspection Response registry. | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "refresh_token" | o Name: "cnf" | |||
| o CBOR key value: 24 | o Description: Key to prove the right to use an access token, | |||
| formatted as specified in [I-D.ietf-ace-cwt-proof-of-possession]. | ||||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.7.2 of [this document] | |||
| o Parameter name: "cnf" | o Name: "profile" | |||
| o CBOR key value: 25 | o Description: The communication and communication security profile | |||
| used between client and RS, as defined in ACE profiles. | ||||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.7.2 of [this document] | |||
| o Name: "client_token" | ||||
| o Parameter name: "profile" | o Description: Information that the RS MUST pass to the client e.g., | |||
| o CBOR key value: 26 | about the proof-of-possession keys. | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.7.2 of [this document] | |||
| 8.8. Introspection Endpoint CBOR Mappings Registry | 8.10. Introspection Endpoint CBOR Mappings Registry | |||
| A new registry will be requested from IANA, entitled "Introspection | A new registry will be requested from IANA, entitled "Introspection | |||
| Endpoint CBOR Mappings Registry". The registry is to be created as | Endpoint CBOR Mappings Registry". The registry is to be created as | |||
| Expert Review Required. | Expert Review Required. | |||
| 8.8.1. Registration Template | The columns of this table are: | |||
| Response parameter name: | ||||
| Name of the response parameter as defined in the "OAuth Token | ||||
| Introspection Response" registry e.g., "active". | ||||
| CBOR key value: | ||||
| Key value for the claim. The key value MUST be an integer. | ||||
| Integer values from -65536 to 65535 are designated as | ||||
| Specification Required. Integer values of greater than 65535 | ||||
| designated as expert review. Integer values less than -65536 are | ||||
| marked as private use. | ||||
| 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. | ||||
| 8.8.2. Initial Registry Contents | ||||
| o Response parameter name: "iss" | ||||
| o CBOR key value: 1 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "sub" | ||||
| o CBOR key value: 2 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "aud" | ||||
| o CBOR key value: 3 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "exp" | ||||
| o CBOR key value: 4 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "nbf" | ||||
| o CBOR key value: 5 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "iat" | ||||
| o CBOR key value: 6 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "cti" | ||||
| o CBOR key value: 7 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "client_id" | ||||
| o CBOR key value: 8 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "scope" | ||||
| o CBOR key value: 12 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "token_type" | ||||
| o CBOR key value: 20 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "username" | Name The OAuth Parameter name, refers to the name in the OAuth | |||
| o CBOR key value: 22 | parameter registry e.g., "client_id". | |||
| o Change Controller: IESG | CBOR Key The unsigned integer value (CBOR major type 0) abbreviating | |||
| o Specification Document(s): this document | this parameter. Registration in the table is based on the value | |||
| of the mapping requested. Integer values between 1 and 255 are | ||||
| designated as Standards Track Document required. Integer values | ||||
| from 256 to 65535 are designated as Specification Required. | ||||
| Integer values greater than 65535 are designated as private use. | ||||
| Major Type The allowable CBOR data types for values of this | ||||
| parameter. | ||||
| Reference This contains a pointer to the public specification of the | ||||
| grant type abbreviation, if one exists. | ||||
| o Parameter name: "cnf" | This registry will be initially populated by the values in Figure 16. | |||
| o CBOR key value: 25 | The Reference column for all of these entries will be this document. | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter name: "profile" | 8.11. JSON Web Token Claims | |||
| o CBOR key value: 26 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "token" | This specification registers the following new claims in the JSON Web | |||
| o CBOR key value: 27 | Token (JWT) registry of JSON Web Token Claims: | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "token_type_hint" | o Claim Name: "scope" | |||
| o CBOR key value: 28 | o Claim Description: The scope of an access token as defined in | |||
| [RFC6749]. | ||||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Reference: Section 5.8 of [this document] | |||
| o Response parameter name: "active" | 8.12. CBOR Web Token Claims | |||
| o CBOR key value: 29 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "client_token" | This specification registers the following new claims in the CBOR Web | |||
| o CBOR key value: 30 | Token (CWT) registry of CBOR Web Token Claim:s | |||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Response parameter name: "rs_cnf" | o Claim Name: "scope" | |||
| o CBOR key value: 31 | o Claim Description: The scope of an access token as defined in | |||
| [RFC6749]. | ||||
| o JWT Claim Name: N/A | ||||
| o Claim Key: 12 | ||||
| o Claim Value Type(s): 0 (uint), 2 (byte string), 3 (text string) | ||||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): Section 5.8 of [this document] | |||
| 8.9. CoAP Option Number Registration | 8.13. CoAP Option Number Registration | |||
| This section registers the "Access-Token" CoAP Option Number in the | This section registers the "Access-Token" CoAP Option Number in the | |||
| "CoRE Parameters" sub-registry "CoAP Option Numbers" in the manner | "CoRE Parameters" sub-registry "CoAP Option Numbers" in the manner | |||
| described in [RFC7252]. | described in [RFC7252]. | |||
| Name | o Name: "Access-Token" | |||
| o Number: TBD | ||||
| Access-Token | o Reference: [this document]. | |||
| Number | o Meaning in Request: Contains an Access Token according to [this | |||
| document] containing access permissions of the client. | ||||
| TBD | o Meaning in Response: Not used in response. | |||
| Reference | o Safe-to-Forward: Yes | |||
| o Format: Based on the observer the format is perceived differently. | ||||
| [This document]. | Opaque data to the client and CWT or reference token to the RS. | |||
| Meaning in Request | o Length: Less than 255 bytes | |||
| Contains an Access Token according to [This document] containing | ||||
| access permissions of the client. | ||||
| Meaning in Response | ||||
| Not used in response | ||||
| Safe-to-Forward | ||||
| Yes | ||||
| Format | ||||
| Based on the observer the format is perceived differently. Opaque | ||||
| data to the client and CWT or reference token to the RS. | ||||
| Length | ||||
| Less then 255 bytes | ||||
| 9. Acknowledgments | 9. Acknowledgments | |||
| This document is a product of the ACE working group of the IETF. | This document is a product of the ACE working group of the IETF. | |||
| Thanks to Eve Maler for her contributions to the use of OAuth 2.0 and | Thanks to Eve Maler for her contributions to the use of OAuth 2.0 and | |||
| UMA in IoT scenarios, Robert Taylor for his discussion input, and | UMA in IoT scenarios, Robert Taylor for his discussion input, and | |||
| Malisa Vucinic for his input on the predecessors of this proposal. | Malisa Vucinic for his input on the predecessors of this proposal. | |||
| Thanks to the authors of draft-ietf-oauth-pop-key-distribution, from | Thanks to the authors of draft-ietf-oauth-pop-key-distribution, from | |||
| skipping to change at page 48, line 13 ¶ | skipping to change at page 44, line 4 ¶ | |||
| where large parts of the security considerations where copied. | where large parts of the security considerations where copied. | |||
| Thanks to Stefanie Gerdes, Olaf Bergmann, and Carsten Bormann for | Thanks to Stefanie Gerdes, Olaf Bergmann, and Carsten Bormann for | |||
| contributing their work on AS discovery from draft-gerdes-ace-dcaf- | contributing their work on AS discovery from draft-gerdes-ace-dcaf- | |||
| authorize (see Section 5.1). | authorize (see Section 5.1). | |||
| Ludwig Seitz and Goeran Selander worked on this document as part of | Ludwig Seitz and Goeran Selander worked on this document as part of | |||
| the CelticPlus project CyberWI, with funding from Vinnova. | the CelticPlus project CyberWI, with funding from Vinnova. | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [I-D.ietf-ace-cbor-web-token] | [I-D.ietf-ace-cbor-web-token] | |||
| Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | |||
| "CBOR Web Token (CWT)", draft-ietf-ace-cbor-web-token-08 | "CBOR Web Token (CWT)", draft-ietf-ace-cbor-web-token-09 | |||
| (work in progress), August 2017. | (work in progress), October 2017. | |||
| [I-D.jones-ace-cwt-proof-of-possession] | [I-D.ietf-ace-cwt-proof-of-possession] | |||
| Jones, M., Seitz, L., Selander, G., Wahlstroem, E., | Jones, M., Seitz, L., Selander, G., Wahlstroem, E., | |||
| Erdtman, S., and H. Tschofenig, "Proof-of-Possession Key | Erdtman, S., and H. Tschofenig, "Proof-of-Possession Key | |||
| Semantics for CBOR Web Tokens (CWTs)", draft-jones-ace- | Semantics for CBOR Web Tokens (CWTs)", draft-ietf-ace-cwt- | |||
| cwt-proof-of-possession-01 (work in progress), June 2017. | proof-of-possession-01 (work in progress), October 2017. | |||
| [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, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | |||
| editor.org/info/rfc2119>. | editor.org/info/rfc2119>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
| <https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| skipping to change at page 49, line 10 ¶ | skipping to change at page 44, line 49 ¶ | |||
| [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
| RFC 8152, DOI 10.17487/RFC8152, July 2017, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
| <https://www.rfc-editor.org/info/rfc8152>. | <https://www.rfc-editor.org/info/rfc8152>. | |||
| 10.2. Informative References | 10.2. Informative References | |||
| [I-D.erdtman-ace-rpcc] | [I-D.erdtman-ace-rpcc] | |||
| Seitz, L. and S. Erdtman, "Raw-Public-Key and Pre-Shared- | Seitz, L. and S. Erdtman, "Raw-Public-Key and Pre-Shared- | |||
| Key as OAuth client credentials", draft-erdtman-ace- | Key as OAuth client credentials", draft-erdtman-ace- | |||
| rpcc-01 (work in progress), August 2017. | rpcc-02 (work in progress), October 2017. | |||
| [I-D.ietf-ace-actors] | [I-D.ietf-ace-actors] | |||
| Gerdes, S., Seitz, L., Selander, G., and C. Bormann, "An | Gerdes, S., Seitz, L., Selander, G., and C. Bormann, "An | |||
| architecture for authorization in constrained | architecture for authorization in constrained | |||
| environments", draft-ietf-ace-actors-05 (work in | environments", draft-ietf-ace-actors-06 (work in | |||
| progress), March 2017. | progress), November 2017. | |||
| [I-D.ietf-core-object-security] | [I-D.ietf-core-object-security] | |||
| Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", draft-ietf-core-object-security-05 (work in | (OSCORE)", draft-ietf-core-object-security-06 (work in | |||
| progress), September 2017. | progress), October 2017. | |||
| [I-D.ietf-core-resource-directory] | [I-D.ietf-core-resource-directory] | |||
| Shelby, Z., Koster, M., Bormann, C., Stok, P., and C. | Shelby, Z., Koster, M., Bormann, C., Stok, P., and C. | |||
| Amsuess, "CoRE Resource Directory", draft-ietf-core- | Amsuess, "CoRE Resource Directory", draft-ietf-core- | |||
| resource-directory-11 (work in progress), July 2017. | resource-directory-12 (work in progress), October 2017. | |||
| [I-D.ietf-oauth-device-flow] | [I-D.ietf-oauth-device-flow] | |||
| Denniss, W., Bradley, J., Jones, M., and H. Tschofenig, | Denniss, W., Bradley, J., Jones, M., and H. Tschofenig, | |||
| "OAuth 2.0 Device Flow for Browserless and Input | "OAuth 2.0 Device Flow for Browserless and Input | |||
| Constrained Devices", draft-ietf-oauth-device-flow-06 | Constrained Devices", draft-ietf-oauth-device-flow-07 | |||
| (work in progress), May 2017. | (work in progress), October 2017. | |||
| [I-D.ietf-oauth-discovery] | [I-D.ietf-oauth-discovery] | |||
| Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | |||
| Authorization Server Metadata", draft-ietf-oauth- | Authorization Server Metadata", draft-ietf-oauth- | |||
| discovery-07 (work in progress), September 2017. | discovery-07 (work in progress), September 2017. | |||
| [I-D.ietf-oauth-native-apps] | [I-D.ietf-oauth-native-apps] | |||
| Denniss, W. and J. Bradley, "OAuth 2.0 for Native Apps", | Denniss, W. and J. Bradley, "OAuth 2.0 for Native Apps", | |||
| draft-ietf-oauth-native-apps-12 (work in progress), June | draft-ietf-oauth-native-apps-12 (work in progress), June | |||
| 2017. | 2017. | |||
| skipping to change at page 53, line 49 ¶ | skipping to change at page 49, line 49 ¶ | |||
| concerning the RS that the AS returns to the client in an access | concerning the RS that the AS returns to the client in an access | |||
| token response (see Section 5.6.2). This includes the "profile" | token response (see Section 5.6.2). This includes the "profile" | |||
| and the "rs_cnf" parameters. This aims at enabling scenarios, | and the "rs_cnf" parameters. This aims at enabling scenarios, | |||
| where a powerful client, supporting multiple profiles, needs to | where a powerful client, supporting multiple profiles, needs to | |||
| interact with a RS for which it does not know the supported | interact with a RS for which it does not know the supported | |||
| profiles and the raw public key. | profiles and the raw public key. | |||
| Proof-of-Possession: | Proof-of-Possession: | |||
| This framework makes use of proof-of-possession tokens, using the | This framework makes use of proof-of-possession tokens, using the | |||
| "cnf" claim [I-D.jones-ace-cwt-proof-of-possession]. A | "cnf" claim [I-D.ietf-ace-cwt-proof-of-possession]. A | |||
| semantically and syntactically identical request and response | semantically and syntactically identical request and response | |||
| parameter is defined for the token endpoint, to allow requesting | parameter is defined for the token endpoint, to allow requesting | |||
| and stating confirmation keys. This aims at making token theft | and stating confirmation keys. This aims at making token theft | |||
| harder. Token theft is specifically relevant in constrained use | harder. Token theft is specifically relevant in constrained use | |||
| cases, as communication often passes through middle-boxes, which | cases, as communication often passes through middle-boxes, which | |||
| could be able to steal bearer tokens and use them to gain | could be able to steal bearer tokens and use them to gain | |||
| unauthorized access. | unauthorized access. | |||
| Auth-Info endpoint: | Auth-Info endpoint: | |||
| skipping to change at page 56, line 12 ¶ | skipping to change at page 52, line 12 ¶ | |||
| * Process a token request using the authorization policies | * Process a token request using the authorization policies | |||
| configured for the RS. | configured for the RS. | |||
| * Optionally: Expose the introspection endpoint that allows RS's | * Optionally: Expose the introspection endpoint that allows RS's | |||
| to submit token introspection requests. | to submit token introspection requests. | |||
| * If providing an introspection endpoint: Authenticate RSs that | * If providing an introspection endpoint: Authenticate RSs that | |||
| wish to get an introspection response. | wish to get an introspection response. | |||
| * If providing an introspection endpoint: Process token | * If providing an introspection endpoint: Process token | |||
| introspection requests. | introspection requests. | |||
| * Optionally: Handle token revocation. | * Optionally: Handle token revocation. | |||
| * Optionally: Provide discovery metadta. See | * Optionally: Provide discovery metadata. See | |||
| [I-D.ietf-oauth-discovery] | [I-D.ietf-oauth-discovery] | |||
| Client | Client | |||
| * Discover the AS in charge of the RS that is to be targeted with | * Discover the AS in charge of the RS that is to be targeted with | |||
| a request. | a request. | |||
| * Submit the token request (see step (A) of Figure 1). | * Submit the token request (see step (A) of Figure 1). | |||
| + Authenticate to the AS. | + Authenticate to the AS. | |||
| + Optionally (if not pre-configured): Specify which RS, which | + Optionally (if not pre-configured): Specify which RS, which | |||
| skipping to change at page 62, line 40 ¶ | skipping to change at page 58, line 40 ¶ | |||
| to access the AS at the time of the access request, whereas the RS is | to access the AS at the time of the access request, whereas the RS is | |||
| assumed to be connected to the back-end infrastructure. Thus the RS | assumed to be connected to the back-end infrastructure. Thus the RS | |||
| can make use of token introspection. This access procedure involves | can make use of token introspection. This access procedure involves | |||
| steps A-F of Figure 1, but assumes steps A and B have been carried | steps A-F of Figure 1, but assumes steps A and B have been carried | |||
| out during a phase when the client had connectivity to AS. | out during a phase when the client had connectivity to AS. | |||
| Since the client is assumed to be offline, at least for a certain | Since the client is assumed to be offline, at least for a certain | |||
| period of time, a pre-provisioned access token has to be long-lived. | period of time, a pre-provisioned access token has to be long-lived. | |||
| Since the client is constrained, the token will not be self contained | Since the client is constrained, the token will not be self contained | |||
| (i.e. not a CWT) but instead just a reference. The resource server | (i.e. not a CWT) but instead just a reference. The resource server | |||
| uses its connectivity to learn about the claims assoicated to the | uses its connectivity to learn about the claims associated to the | |||
| access token by using introspection, which is shown in the example | access token by using introspection, which is shown in the example | |||
| below. | below. | |||
| In the example interactions between an offline client (key fob), a RS | In the example interactions between an offline client (key fob), a RS | |||
| (online lock), and an AS is shown. It is assumed that there is a | (online lock), and an AS is shown. It is assumed that there is a | |||
| provisioning step where the client has access to the AS. This | provisioning step where the client has access to the AS. This | |||
| corresponds to message exchanges A and B which are shown in | corresponds to message exchanges A and B which are shown in | |||
| Figure 22. | Figure 22. | |||
| Authorization consent from the resource owner can be pre-configured, | Authorization consent from the resource owner can be pre-configured, | |||
| skipping to change at page 66, line 32 ¶ | skipping to change at page 62, line 32 ¶ | |||
| F: |<--------+ Header: 2.04 Changed | F: |<--------+ Header: 2.04 Changed | |||
| | 2.04 | Payload: <new state for the lock> | | 2.04 | Payload: <new state for the lock> | |||
| | | | | | | |||
| Figure 26: Resource request and response protected by OSCOAP | Figure 26: Resource request and response protected by OSCOAP | |||
| Appendix F. Document Updates | Appendix F. Document Updates | |||
| F.1. Version -08 to -09 | F.1. Version -08 to -09 | |||
| o Allowed scope to be byte arrays. | ||||
| o Defined default names for endpoints. | ||||
| o Refactored the IANA section for briefness and consistency. | ||||
| o Refactored tables that define IANA registry contents for | ||||
| consistency. | ||||
| o Created IANA registry for CBOR mappings of error codes, grant | ||||
| types and Authorization Server Information. | ||||
| o Added references to other document sections defining IANA entries | ||||
| in the IANA section. | ||||
| F.2. Version -07 to -08 | ||||
| o Moved AS discovery from the DTLS profile to the framework, see | o Moved AS discovery from the DTLS profile to the framework, see | |||
| Section 5.1. | Section 5.1. | |||
| o Made the use of CBOR mandatory. If you use JSON you can use | o Made the use of CBOR mandatory. If you use JSON you can use | |||
| vanilla OAuth. | vanilla OAuth. | |||
| o Made it mandatory for profiles to specify C-AS security and RS-AS | o Made it mandatory for profiles to specify C-AS security and RS-AS | |||
| security (the latter only if introspection is supported). | security (the latter only if introspection is supported). | |||
| o Made the use of CBOR abbreviations mandatory. | o Made the use of CBOR abbreviations mandatory. | |||
| o Added text to clarify the use of token references as an | o Added text to clarify the use of token references as an | |||
| alternative to CWTs. | alternative to CWTs. | |||
| o Added text to clarify that introspection must not be delayed, in | o Added text to clarify that introspection must not be delayed, in | |||
| case the RS has to return a client token. | case the RS has to return a client token. | |||
| o Added security considerations about leakage through unprotected AS | o Added security considerations about leakage through unprotected AS | |||
| discovery information, combining profiles and leakage through | discovery information, combining profiles and leakage through | |||
| error responses. | error responses. | |||
| o Added privacy considerations about leakage through unprotected AS | o Added privacy considerations about leakage through unprotected AS | |||
| discovery. | discovery. | |||
| o Added text that clarifies that introspection is optional. | o Added text that clarifies that introspection is optional. | |||
| o Made profile parameter optional since it can be implicit. | o Made profile parameter optional since it can be implicit. | |||
| o Clarified that CoAP is not mandatory and other protocols can be | o Clarified that CoAP is not mandatory and other protocols can be | |||
| skipping to change at page 67, line 4 ¶ | skipping to change at page 63, line 16 ¶ | |||
| case the RS has to return a client token. | case the RS has to return a client token. | |||
| o Added security considerations about leakage through unprotected AS | o Added security considerations about leakage through unprotected AS | |||
| discovery information, combining profiles and leakage through | discovery information, combining profiles and leakage through | |||
| error responses. | error responses. | |||
| o Added privacy considerations about leakage through unprotected AS | o Added privacy considerations about leakage through unprotected AS | |||
| discovery. | discovery. | |||
| o Added text that clarifies that introspection is optional. | o Added text that clarifies that introspection is optional. | |||
| o Made profile parameter optional since it can be implicit. | o Made profile parameter optional since it can be implicit. | |||
| o Clarified that CoAP is not mandatory and other protocols can be | o Clarified that CoAP is not mandatory and other protocols can be | |||
| used. | used. | |||
| o Clarified the design justification for specific features of the | o Clarified the design justification for specific features of the | |||
| framework in appendix A. | framework in appendix A. | |||
| o Clarified appendix E.2. | o Clarified appendix E.2. | |||
| F.2. Version -07 to -08 | ||||
| o Removed specification of the "cnf" claim for CBOR/COSE, and | o Removed specification of the "cnf" claim for CBOR/COSE, and | |||
| replaced with references to | replaced with references to [I-D.ietf-ace-cwt-proof-of-possession] | |||
| [I-D.jones-ace-cwt-proof-of-possession] | ||||
| F.3. Version -06 to -07 | F.3. Version -06 to -07 | |||
| o Various clarifications added. | o Various clarifications added. | |||
| o Fixed erroneous author email. | o Fixed erroneous author email. | |||
| F.4. Version -05 to -06 | F.4. Version -05 to -06 | |||
| o Moved sections that define the ACE framework into a subsection of | o Moved sections that define the ACE framework into a subsection of | |||
| the framework Section 5. | the framework Section 5. | |||
| End of changes. 131 change blocks. | ||||
| 616 lines changed or deleted | 466 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/ | ||||