| rfc9767.original | rfc9767.txt | |||
|---|---|---|---|---|
| GNAP J. Richer, Ed. | Internet Engineering Task Force (IETF) J. Richer, Ed. | |||
| Internet-Draft Bespoke Engineering | Request for Comments: 9767 Bespoke Engineering | |||
| Intended status: Standards Track F. Imbault | Category: Standards Track F. Imbault | |||
| Expires: 27 March 2025 acert.io | ISSN: 2070-1721 acert.io | |||
| 23 September 2024 | April 2025 | |||
| Grant Negotiation and Authorization Protocol Resource Server Connections | Grant Negotiation and Authorization Protocol Resource Server Connections | |||
| draft-ietf-gnap-resource-servers-09 | ||||
| Abstract | Abstract | |||
| GNAP defines a mechanism for delegating authorization to a piece of | The Grant Negotiation and Authorization Protocol (GNAP) defines a | |||
| software (the client), and conveying the results and artifacts of | mechanism for delegating authorization to a piece of software (the | |||
| that delegation to the software. This extension defines methods for | client) and conveying the results and artifacts of that delegation to | |||
| resource servers (RS) to connect with authorization servers (AS) in | the software. This extension defines methods for resource servers | |||
| an interoperable fashion. | (RSs) to connect with authorization servers (ASs) in an interoperable | |||
| fashion. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 27 March 2025. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9767. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology | |||
| 2. Access Tokens . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Access Tokens | |||
| 2.1. General-purpose Access Token Model . . . . . . . . . . . 5 | 2.1. General-Purpose Access Token Model | |||
| 2.1.1. Value . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1.1. Value | |||
| 2.1.2. Issuer . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1.2. Issuer | |||
| 2.1.3. Audience . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1.3. Audience | |||
| 2.1.4. Key Binding . . . . . . . . . . . . . . . . . . . . . 6 | 2.1.4. Key Binding | |||
| 2.1.5. Flags . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.1.5. Flags | |||
| 2.1.6. Access Rights . . . . . . . . . . . . . . . . . . . . 8 | 2.1.6. Access Rights | |||
| 2.1.7. Time Validity Window . . . . . . . . . . . . . . . . 8 | 2.1.7. Time Validity Window | |||
| 2.1.8. Token Identifier . . . . . . . . . . . . . . . . . . 9 | 2.1.8. Token Identifier | |||
| 2.1.9. Authorizing Resource Owner . . . . . . . . . . . . . 9 | 2.1.9. Authorizing Resource Owner | |||
| 2.1.10. End User . . . . . . . . . . . . . . . . . . . . . . 10 | 2.1.10. End User | |||
| 2.1.11. Client Instance . . . . . . . . . . . . . . . . . . . 10 | 2.1.11. Client Instance | |||
| 2.1.12. Label . . . . . . . . . . . . . . . . . . . . . . . . 10 | 2.1.12. Label | |||
| 2.1.13. Parent Grant Request . . . . . . . . . . . . . . . . 11 | 2.1.13. Parent Grant Request | |||
| 2.1.14. AS-Specific Access Tokens . . . . . . . . . . . . . . 12 | 2.1.14. AS-Specific Access Tokens | |||
| 2.2. Access Token Formats . . . . . . . . . . . . . . . . . . 13 | 2.2. Access Token Formats | |||
| 3. Resource-Server-Facing API . . . . . . . . . . . . . . . . . 13 | 3. Resource-Server-Facing API | |||
| 3.1. RS-facing AS Discovery . . . . . . . . . . . . . . . . . 14 | 3.1. RS-Facing AS Discovery | |||
| 3.2. Protecting RS requests to the AS . . . . . . . . . . . . 15 | 3.2. Protecting RS Requests to the AS | |||
| 3.3. Token Introspection . . . . . . . . . . . . . . . . . . . 16 | 3.3. Token Introspection | |||
| 3.4. Registering a Resource Set . . . . . . . . . . . . . . . 20 | 3.4. Registering a Resource Set | |||
| 3.5. Error Responses . . . . . . . . . . . . . . . . . . . . . 23 | 3.5. Error Responses | |||
| 4. Deriving a downstream token . . . . . . . . . . . . . . . . . 24 | 4. Deriving a Downstream Token | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | 5. IANA Considerations | |||
| 5.1. Well-Known URI . . . . . . . . . . . . . . . . . . . . . 26 | 5.1. Well-Known URIs | |||
| 5.2. GNAP Grant Request Parameters . . . . . . . . . . . . . . 27 | 5.2. GNAP Grant Request Parameters | |||
| 5.3. GNAP Token Formats . . . . . . . . . . . . . . . . . . . 27 | 5.3. GNAP Token Formats | |||
| 5.3.1. Registry Template . . . . . . . . . . . . . . . . . . 27 | 5.3.1. Registry Template | |||
| 5.3.2. Initial Registry Contents . . . . . . . . . . . . . . 28 | 5.3.2. Initial Registry Contents | |||
| 5.4. GNAP Token Introspection Request . . . . . . . . . . . . 28 | 5.4. GNAP Token Introspection Request | |||
| 5.4.1. Registry Template . . . . . . . . . . . . . . . . . . 28 | 5.4.1. Registry Template | |||
| 5.4.2. Initial Registry Contents . . . . . . . . . . . . . . 29 | 5.4.2. Initial Registry Contents | |||
| 5.5. GNAP Token Introspection Response . . . . . . . . . . . . 29 | 5.5. GNAP Token Introspection Response | |||
| 5.5.1. Registry Template . . . . . . . . . . . . . . . . . . 29 | 5.5.1. Registry Template | |||
| 5.5.2. Initial Registry Contents . . . . . . . . . . . . . . 30 | 5.5.2. Initial Registry Contents | |||
| 5.6. GNAP Resource Set Registration Request Parameters . . . . 30 | 5.6. GNAP Resource Set Registration Request Parameters | |||
| 5.6.1. Registry Template . . . . . . . . . . . . . . . . . . 31 | 5.6.1. Registry Template | |||
| 5.6.2. Initial Registry Contents . . . . . . . . . . . . . . 31 | 5.6.2. Initial Registry Contents | |||
| 5.7. GNAP Resource Set Registration Response Parameters . . . 31 | 5.7. GNAP Resource Set Registration Response Parameters | |||
| 5.7.1. Registry Template . . . . . . . . . . . . . . . . . . 32 | 5.7.1. Registry Template | |||
| 5.7.2. Initial Registry Contents . . . . . . . . . . . . . . 32 | 5.7.2. Initial Registry Contents | |||
| 5.8. GNAP RS-Facing Discovery Document Fields . . . . . . . . 32 | 5.8. GNAP RS-Facing Discovery Document Fields | |||
| 5.8.1. Registry Template . . . . . . . . . . . . . . . . . . 33 | 5.8.1. Registry Template | |||
| 5.8.2. Initial Registry Contents . . . . . . . . . . . . . . 33 | 5.8.2. Initial Registry Contents | |||
| 5.9. GNAP RS-Facing Error Codes . . . . . . . . . . . . . . . 34 | 5.9. GNAP RS-Facing Error Codes | |||
| 5.9.1. Registration Template . . . . . . . . . . . . . . . . 34 | 5.9.1. Registration Template | |||
| 5.9.2. Initial Contents . . . . . . . . . . . . . . . . . . 34 | 5.9.2. Initial Contents | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 35 | 6. Security Considerations | |||
| 6.1. TLS Protection in Transit . . . . . . . . . . . . . . . . 35 | 6.1. TLS Protection in Transit | |||
| 6.2. Token Validation . . . . . . . . . . . . . . . . . . . . 35 | 6.2. Token Validation | |||
| 6.3. Caching Token Validation Result . . . . . . . . . . . . . 36 | 6.3. Caching Token Validation Result | |||
| 6.4. Key Proof Validation . . . . . . . . . . . . . . . . . . 36 | 6.4. Key Proof Validation | |||
| 6.5. Token Exfiltration . . . . . . . . . . . . . . . . . . . 36 | 6.5. Token Exfiltration | |||
| 6.6. Token Re-Use by an RS . . . . . . . . . . . . . . . . . . 37 | 6.6. Token Reuse by an RS | |||
| 6.7. Token Format Considerations . . . . . . . . . . . . . . . 37 | 6.7. Token Format Considerations | |||
| 6.8. Over-sharing Token Contents . . . . . . . . . . . . . . . 37 | 6.8. Oversharing Token Contents | |||
| 6.9. Resource References . . . . . . . . . . . . . . . . . . . 37 | 6.9. Resource References | |||
| 6.10. Token Re-Issuance From an Untrusted AS . . . . . . . . . 38 | 6.10. Token Reissuance from an Untrusted AS | |||
| 6.11. Introspection of Token Keys . . . . . . . . . . . . . . . 38 | 6.11. Introspection of Token Keys | |||
| 6.12. RS Registration and Management . . . . . . . . . . . . . 39 | 6.12. RS Registration and Management | |||
| 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 39 | 7. Privacy Considerations | |||
| 7.1. Token Contents . . . . . . . . . . . . . . . . . . . . . 39 | 7.1. Token Contents | |||
| 7.2. Token Use Disclosure through Introspection . . . . . . . 40 | 7.2. Token Use Disclosure through Introspection | |||
| 7.3. Mapping a User to an AS . . . . . . . . . . . . . . . . . 40 | 7.3. Mapping a User to an AS | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 40 | 8. References | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 41 | 8.1. Normative References | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 41 | 8.2. Informative References | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 41 | Acknowledgements | |||
| Appendix A. Document History . . . . . . . . . . . . . . . . . . 42 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 | ||||
| 1. Introduction | 1. Introduction | |||
| The core GNAP specification ([GNAP]) defines distinct roles for the | The core GNAP specification [GNAP] defines distinct roles for the | |||
| authorization server (AS) and the resource server (RS). However, the | authorization server (AS) and the resource server (RS). However, the | |||
| core specification does not define how the RS gets answers to | core specification does not define how the RS gets answers to | |||
| important questions, such as whether a given access token is still | important questions, such as whether a given access token is still | |||
| valid or what set of access rights the access token is approved for. | valid or what set of access rights the access token is approved for. | |||
| While it's possible for the AS and RS to be tightly coupled, such as | While it's possible for the AS and RS to be tightly coupled, such as | |||
| a single deployed server with a shared storage system, GNAP does not | a single deployed server with a shared storage system, GNAP does not | |||
| presume or require such a tight coupling. It is increasingly common | presume or require such a tight coupling. It is increasingly common | |||
| for the AS and RS to be run and managed separately, particularly in | for the AS and RS to be run and managed separately, particularly in | |||
| cases where a single AS protects multiple RS's simultaneously. | cases where a single AS protects multiple RSs simultaneously. | |||
| This specification defines a set of RS-facing APIs that an AS can | This specification defines a set of RS-facing APIs that an AS can | |||
| make available for advanced loosely-coupled deployments. | make available for advanced loosely coupled deployments. | |||
| Additionally, this document defines a general-purpose model for | Additionally, this document defines a general-purpose model for | |||
| access tokens, which can be used in structured, formatted access | access tokens, which can be used in structured, formatted access | |||
| tokens or in token introspection responses. This specification also | tokens or in token introspection responses. This specification also | |||
| defines a method for an RS to derive a downstream token for calling | defines a method for an RS to derive a downstream token for calling | |||
| another chained RS. | another chained RS. | |||
| The means of the authorization server issuing the access token to the | The means for the authorization server to issue the access token to | |||
| client instance and the means of the client instance presenting the | the client instance and the means for the client instance to present | |||
| access token to the resource server are the subject of the core GNAP | the access token to the resource server are subjects of the core GNAP | |||
| specification [GNAP]. | specification [GNAP]. | |||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document contains non-normative examples of partial and complete | This document contains non-normative examples of partial and complete | |||
| HTTP messages, JSON structures, URLs, query components, keys, and | HTTP messages, JSON structures, URLs, query components, keys, and | |||
| other elements. Some examples use a single trailing backslash \ to | other elements. Some examples use a single trailing backslash \ to | |||
| indicate line wrapping for long values, as per [RFC8792]. The \ | indicate line wrapping for long values, as per [RFC8792]. The \ | |||
| character and leading spaces on wrapped lines are not part of the | character and leading spaces on wrapped lines are not part of the | |||
| value. | value. | |||
| Terminology specific to GNAP is defined in the terminology section of | Terminology specific to GNAP is defined in the terminology section of | |||
| the core specification [GNAP], and provides definitions for the | the core specification; see Section 1.1 of [GNAP]. The following | |||
| protocol roles: authorization server (AS), client, resource server | protocol roles are defined: authorization server, client, end user, | |||
| (RS), resource owner (RO), end user; as well as the protocol | resource owner, and resource server. The following protocol elements | |||
| elements: attribute, access token, grant, privilege, protected | are defined: access token, attribute, grant, privilege, protected | |||
| resource, right, subject, subject information. The same definitions | resource, right, subject, and subject information. The same | |||
| are used in this document. | definitions are used in this document. | |||
| 2. Access Tokens | 2. Access Tokens | |||
| Access tokens are a mechanism for an AS to provide a client instance | Access tokens are used as a mechanism for an AS to provide a client | |||
| limited access to an RS. These access tokens are artifacts | instance limited access to an RS. These access tokens are artifacts | |||
| representing a particular set of access rights granted to the client | representing a particular set of access rights granted to the client | |||
| instance to act on behalf of the RO. While the format of access | instance to act on behalf of the RO. While the format of access | |||
| tokens varies in different systems (see discussion in Section 2.2), | tokens varies in different systems (see discussion in Section 2.2), | |||
| the concept of an access token is consistent across all GNAP systems. | the concept of an access token is consistent across all GNAP systems. | |||
| 2.1. General-purpose Access Token Model | 2.1. General-Purpose Access Token Model | |||
| The core GNAP specification [GNAP] focuses on the relationship | The core GNAP specification [GNAP] focuses on the relationship | |||
| between the client and the AS. Since the access token is opaque to | between the client and the AS. Since the access token is opaque to | |||
| the client, the core specification does not define a token model. | the client, the core specification does not define a token model. | |||
| However, the AS will need to create tokens and the RS will need to | However, the AS will need to create tokens, and the RS will need to | |||
| understand tokens. To facilitate a level of structural | understand tokens. To facilitate a level of structural | |||
| interoperability, a common access token model is presented here. | interoperability, a common access token model is presented here. | |||
| Access tokens represent a common set of aspects across different GNAP | Access tokens represent a common set of aspects across different GNAP | |||
| deployments. This list is not intended to be universal or | deployments. This list is not intended to be universal or | |||
| comprehensive, but rather serves as guidance to implementers in | comprehensive but rather serves as guidance to implementers in | |||
| developing data structures and associated systems across a GNAP | developing data structures and associated systems across a GNAP | |||
| deployment. These data structures are communicated between the AS | deployment. These data structures are communicated between the AS | |||
| and RS either by using a structured token or an API-like mechanism | and RS by using either a structured token or an API-like mechanism | |||
| like token introspection (see Section 3.3). | such as token introspection (see Section 3.3). | |||
| This general-purpose data model does not assume either approach, and | This general-purpose data model does not assume either approach; in | |||
| in fact both can be used together to convey different pieces of | fact, both approaches can be used together to convey different pieces | |||
| information. Where possible, mappings to the [JWT] standard format | of information. Where possible, mappings to the JSON Web Token (JWT) | |||
| are provided for each item in the model. | [JWT] standard format are provided for each item in the model. | |||
| 2.1.1. Value | 2.1.1. Value | |||
| All access tokens have a _value_, which is the string that is passed | All access tokens have a _value_, which is the string that is passed | |||
| on the wire between parties. In order for different access tokens to | on the wire between parties. In order for different access tokens to | |||
| be differentiated at runtime, the value of a token needs to be unique | be differentiated at runtime, the value of a token needs to be unique | |||
| within a security domain (such as all systems controlled by an AS). | within a security domain (such as all systems controlled by an AS). | |||
| Otherwise, two separate tokens would be confused for each other which | Otherwise, two separate tokens would be confused for each other, | |||
| would lead to security issues. The AS chooses the value, which can | which would lead to security issues. The AS chooses the value, which | |||
| be structured as in Section 2.2 or unstructured. When the token is | can be structured (see Section 2.2) or unstructured. When the token | |||
| structured, the token value also has a _format_ known to the AS and | is structured, the token value also has a _format_ known to the AS | |||
| RS, and the other items in this token model are contained within the | and RS, and the other items in this token model are contained within | |||
| token's value in some fashion. When the token is unstructured, the | the token's value in some fashion. When the token is unstructured, | |||
| values are usually retrieved by the RS using a service like token | the values are usually retrieved by the RS using a service such as | |||
| introspection described in Section 3.3. | token introspection described in Section 3.3. | |||
| The access token value is conveyed the value field of an access_token | The access token value is conveyed in the value field of an | |||
| response from Section 3.2 of [GNAP]. | access_token response; see Section 3.2 of [GNAP]. | |||
| The format and content of the access token value is opaque to the | The format and content of the access token value is opaque to the | |||
| client software. While the client software needs to be able to carry | client software. While the client software needs to be able to carry | |||
| and present the access token value, the client software is never | and present the access token value, the client software is never | |||
| expected nor intended to be able to understand the token value | expected nor intended to be able to understand the token value | |||
| itself. | itself. | |||
| If structured tokens like [JWT] are used, the value of the token | If structured tokens like those in [JWT] are used, the value of the | |||
| might not be stored by the AS. Instead, a token identifier can be | token might not be stored by the AS. Instead, a token identifier can | |||
| used along with protection by an AS-generated signature to validate | be used along with protection by an AS-generated signature to | |||
| and identify an individual token. | validate and identify an individual token. | |||
| 2.1.2. Issuer | 2.1.2. Issuer | |||
| The access token is issued by the AS as defined by [GNAP]. The AS | The access token is issued by the AS as defined in [GNAP]. The AS | |||
| will need to identify itself in order to allow an RS to recognize | will need to identify itself in order to allow an RS to recognize | |||
| tokens that the AS has issued, particularly in cases where tokens | tokens that the AS has issued, particularly in cases where tokens | |||
| from multiple different AS's could be presented to the same RS. | from multiple different ASs could be presented to the same RS. | |||
| This information is not usually conveyed directly to the client | This information is not usually conveyed directly to the client | |||
| instance, since the client instance should know this information | instance, since the client instance should know this information | |||
| based on where it receives the token from. | based on where it receives the token from. | |||
| In a [JWT] formatted token or a token introspection response, this | In the payload of a JSON Web Token [JWT] or a token introspection | |||
| corresponds to the iss claim. | response, this corresponds to the iss claim. | |||
| 2.1.3. Audience | 2.1.3. Audience | |||
| The access token is intended for use at one or more RS's. The AS can | The access token is intended for use at one or more RSs. The AS can | |||
| list a token's intended RS's to allow each RS to ensure that the RS | list a token's intended RSs to allow each RS to ensure that the RS is | |||
| is not receiving a token intended for someone else. The AS and RS | not receiving a token intended for someone else. The AS and RS have | |||
| have to agree on the nature of any audience identifiers represented | to agree on the nature of any audience identifiers represented by the | |||
| by the token, but the URIs of the RS are a common pattern. | token, but the URIs of the RS are a common pattern. | |||
| In a [JWT] formatted token or token introspection response, this | In the payload of a JSON Web Token [JWT] or token introspection | |||
| corresponds to the aud claim. | response, this corresponds to the aud claim. | |||
| In cases where more complex access is required, the location field of | In cases where more complex access is required, the location field of | |||
| objects in the access array can also convey audience information. In | objects in the access array can also convey audience information. In | |||
| such cases, the client instance might need to know the audience | such cases, the client instance might need to know the audience | |||
| information in order to differentiate between possible RS's to | information in order to differentiate between possible RSs to present | |||
| present the token to. | the token to. | |||
| 2.1.4. Key Binding | 2.1.4. Key Binding | |||
| Access tokens in GNAP are bound to the client instance's registered | Access tokens in GNAP are bound to the client instance's registered | |||
| or presented key, except in cases where the access token is a bearer | or presented key, except in cases where the access token is a bearer | |||
| token. For all tokens bound to a key, the AS and RS need to be able | token. For all tokens bound to a key, the AS and RS need to be able | |||
| to identify which key the token is bound to, otherwise an attacker | to identify which key the token is bound to; otherwise, an attacker | |||
| could substitute their own key during presentation of the token. In | could substitute their own key during presentation of the token. In | |||
| the case of an asymmetric algorithm, the AS and RS needs to know only | the case of an asymmetric algorithm, the AS and RS need to know only | |||
| the public key, while the client instance will also need to know the | the public key, while the client instance will also need to know the | |||
| private key in order to present the token. In the case of a | private key in order to present the token. In the case of a | |||
| symmetric algorithm, all parties will need to either know or be able | symmetric algorithm, all parties will need to either know or be able | |||
| to derive the shared key. | to derive the shared key. | |||
| The source of this key information can vary depending on deployment | The source of this key information can vary depending on deployment | |||
| decisions. For example, an AS could decide that all tokens issued to | decisions. For example, an AS could decide that all tokens issued to | |||
| a client instance are always bound to that client instance's current | a client instance are always bound to that client instance's current | |||
| key. When the key needs to be dereferenced, the AS looks up the | key. When the key needs to be dereferenced, the AS looks up the | |||
| client instance to which the token was issued and finds the key | client instance to which the token was issued and finds the key | |||
| information there. The AS could alternatively bind each token to a | information there. Alternatively, the AS could bind each token to a | |||
| specific key that is managed separately from client instance | specific key that is managed separately from client instance | |||
| information. In such a case, the AS determines the key information | information. In such a case, the AS determines the key information | |||
| directly. This approach allows the client instance to use a | directly. This approach allows the client instance to use a | |||
| different key for each request, or allows the AS to issue a key for | different key for each request or allows the AS to issue a key for | |||
| the client instance to use with the particular token. | the client instance to use with the particular token. | |||
| In all cases, the key binding also includes a proofing mechanism, | In all cases, the key binding also includes a proofing mechanism, | |||
| along with any parameters needed for that mechanism such as a signing | along with any parameters needed for that mechanism such as a signing | |||
| or digest algorithm. If such information is not included with the | or digest algorithm. If such information is not included with the | |||
| proofing key, an attacker could present a token with a seemingly- | proofing key, an attacker could present a token with a seemingly | |||
| valid key using an insecure and incorrect proofing mechanism. | valid key using an insecure and incorrect proofing mechanism. | |||
| This value is conveyed to the client instance in the key field of the | This value is conveyed to the client instance in the key field of the | |||
| access_token response in Section 3.2 of [GNAP]. Since the common | access_token response in Section 3.2 of [GNAP]. Since the common | |||
| case is that the token is bound to the client instance's registered | case is that the token is bound to the client instance's registered | |||
| key, this field can be omitted in this case since the client will be | key, this field can be omitted in this case since the client will be | |||
| aware of its own key. | aware of its own key. | |||
| In a [JWT] formatted token, this corresponds to the cnf | In the payload of a JSON Web Token [JWT], this corresponds to the cnf | |||
| (confirmation) claim. In a token introspection response, this | (confirmation) claim. In a token introspection response, this | |||
| corresponds to the key claim. | corresponds to the key claim. | |||
| In the case of a bearer token, all parties need to know that a token | In the case of a bearer token, all parties need to know that a token | |||
| has no key bound to it, and will therefore reject any attempts to use | has no key bound to it and will therefore reject any attempts to use | |||
| the bearer token with a key in an undefined way. | the bearer token with a key in an undefined way. | |||
| 2.1.5. Flags | 2.1.5. Flags | |||
| GNAP access tokens can have multiple data flags associated with them | GNAP access tokens can have multiple associated data flags that | |||
| that indicate special processing or considerations for the token. | indicate special processing or considerations for a token. For | |||
| For example, whether the token is a bearer token, or should be | example, the data flags can indicate whether a token is a bearer | |||
| expected to be durable across grant updates. | token or should be expected to be durable across grant updates. | |||
| The client can request a set of flags using the flags field of the | The client can request a set of flags using the flags field of the | |||
| access_token grant request parameter in Section 2.1.1 of [GNAP]. | access_token grant request parameter in Section 2.1.1 of [GNAP]. | |||
| These flags are conveyed from the AS to the client in the flags field | These flags are conveyed from the AS to the client in the flags field | |||
| of the access_token section of the grant response in Section 3.2 of | of the access_token section of the grant response in Section 3.2 of | |||
| [GNAP]. | [GNAP]. | |||
| For token introspection, flags are returned in the flags field of the | For token introspection, flags are returned in the flags field of the | |||
| response. | response. | |||
| 2.1.6. Access Rights | 2.1.6. Access Rights | |||
| Access tokens are tied to a limited set of access rights. These | Access tokens are tied to a limited set of access rights. These | |||
| rights specify in some detail what the token can be used for, how, | rights specify in some detail what the token can be used for, how it | |||
| and where. The internal structure of access rights are detailed in | can be used, and where it can be used. The internal structure of | |||
| Section 8 of [GNAP]. | access rights is detailed in Section 8 of [GNAP]. | |||
| The access rights associated with an access token are calculated from | The access rights associated with an access token are calculated from | |||
| the rights available to the client instance making the request, the | the rights available to the client instance making the request, the | |||
| rights available to be approved by the RO, the rights actually | rights available to be approved by the RO, the rights actually | |||
| approved by the RO, and the rights corresponding to the RS in | approved by the RO, and the rights corresponding to the RS in | |||
| question. The rights for a specific access token are a subset of the | question. The rights for a specific access token are a subset of the | |||
| overall rights in a grant request. | overall rights in a grant request. | |||
| These rights are requested by the client instance in the access field | These rights are requested by the client instance in the access field | |||
| of the access_token request in Section 2.1 of [GNAP]. | of the access_token request; see Section 2.1 of [GNAP]. | |||
| The rights associated with an issued access token are conveyed to the | The rights associated with an issued access token are conveyed to the | |||
| client instance in the access field of the access_token response in | client instance in the access field of the access_token response in | |||
| Section 3.2 of [GNAP]. | Section 3.2 of [GNAP]. | |||
| In token introspection responses, this corresponds to the access | In token introspection responses, access rights correspond to the | |||
| claim. | access claim. | |||
| 2.1.7. Time Validity Window | 2.1.7. Time Validity Window | |||
| The access token can be limited to a certain time window outside of | The access token can be limited to a certain time window outside of | |||
| which it is no longer valid for use at an RS. This window can be | which it is no longer valid for use at an RS. This window can be | |||
| explicitly bounded by an expiration time and a not-before time, or it | explicitly bounded by an expiration time and a not-before time, or it | |||
| could be calculated based on the issuance time of the token. For | could be calculated based on the issuance time of the token. For | |||
| example, an RS could decide that it will accept tokens for most calls | example, an RS could decide that it will accept tokens for most calls | |||
| within an hour of a token's issuance, but only within five minutes of | within an hour of a token's issuance, but only within five minutes of | |||
| the token's issuance for certain high-value calls. | the token's issuance for certain high-value calls. | |||
| Since access tokens could be revoked at any time for any reason | Since access tokens could be revoked at any time for any reason | |||
| outside of a client instance's control, the client instance often | outside of a client instance's control, the client instance often | |||
| does not know or concern itself with the validity time window of an | does not know or concern itself with the validity time window of an | |||
| access token. However, this information can be made available to it | access token. However, this information can be made available to it | |||
| using the expires_in field of an access token response in Section 3.2 | by using the expires_in field of an access token response; see | |||
| of [GNAP]. | Section 3.2 of [GNAP]. | |||
| The issuance time of the token is conveyed in the iat claim of a | The issuance time of the token is conveyed in the iat claim in the | |||
| [JWT] formatted token or a token introspection response. | payload of a JSON Web Token [JWT] or a token introspection response. | |||
| The expiration time of a token, after which it is to be rejected, is | The expiration time of a token, after which it is to be rejected, is | |||
| conveyed in the exp claim of a [JWT] formatted token or a token | conveyed in the exp claim in the payload of a JSON Web Token [JWT] or | |||
| introspection response. | a token introspection response. | |||
| The starting time of a token's validity window, before which it is to | The starting time of a token's validity window, before which it is to | |||
| be rejected, is conveyed in the nbf claim of a [JWT] formatted token | be rejected, is conveyed in the nbf claim in the payload of a JSON | |||
| or a token introspection response. | Web Token [JWT] or a token introspection response. | |||
| 2.1.8. Token Identifier | 2.1.8. Token Identifier | |||
| Individual access tokens often need a unique internal identifier to | Individual access tokens often need a unique internal identifier to | |||
| allow the AS to differentiate between multiple separate tokens. This | allow the AS to differentiate between multiple separate tokens. This | |||
| value of the token can often be used as the identifier, but in some | value of the token can often be used as the identifier, but in some | |||
| cases a separate identifier is used. | cases, a separate identifier is used. | |||
| This separate identifier can be conveyed in the jti claim of a [JWT] | This separate identifier can be conveyed in the jti claim in the | |||
| formatted token or a token introspection response. | payload of a JSON Web Token [JWT] or a token introspection response. | |||
| This identifier is not usually exposed to the client instance using | This identifier is not usually exposed to the client instance using | |||
| the token, since the client instance only needs to use the token by | the token, because the client instance only needs to use the token by | |||
| value. | value. | |||
| 2.1.9. Authorizing Resource Owner | 2.1.9. Authorizing Resource Owner | |||
| Access tokens are approved on behalf of a resource owner (RO). The | Access tokens are approved on behalf of a resource owner (RO). The | |||
| identity of this RO can be used by the RS to determine exactly which | identity of this RO can be used by the RS to determine exactly which | |||
| resource to access, or which kinds of access to allow. For example, | resource to access or which kinds of access to allow. For example, | |||
| an access token used to access identity information can hold a user | an access token used to access identity information can hold a user | |||
| identifier to allow the RS to determine which profile information to | identifier to allow the RS to determine which profile information to | |||
| return. The nature of this information is subject to agreement by | return. The nature of this information is subject to agreement by | |||
| the AS and RS. | the AS and RS. | |||
| This corresponds to the sub claim of a [JWT] formatted token or a | This corresponds to the sub claim in the payload of a JSON Web Token | |||
| token introspection response. | [JWT] or a token introspection response. | |||
| Detailed RO information is not returned to the client instance when | Detailed RO information is not returned to the client instance when | |||
| an access token is requested alone, and in many cases returning this | an access token is requested alone, and in many cases, returning this | |||
| information to the client instance would be a privacy violation on | information to the client instance would be a privacy violation on | |||
| the part of the AS. Since the access token represents a specific | the part of the AS. Since the access token represents a specific | |||
| delegated access, the client instance needs only to use the token at | delegated access, the client instance needs only to use the token at | |||
| its target RS. Following the profile example, the client instance | its target RS. Following the profile example, the client instance | |||
| does not need to know the account identifier to get specific | does not need to know the account identifier to get specific | |||
| attributes about the account represented by the token. | attributes about the account represented by the token. | |||
| GNAP does allow for the return of subject information separately from | GNAP does allow for the return of subject information separately from | |||
| the access token, in the form of identifiers and assertions. These | the access token, in the form of identifiers and assertions. These | |||
| values are returned directly to the client separately from any access | values are returned directly to the client separately from any access | |||
| skipping to change at page 10, line 27 ¶ | skipping to change at line 441 ¶ | |||
| user can request a financial payment, but the RO is the holder of the | user can request a financial payment, but the RO is the holder of the | |||
| account that the payment would be withdrawn from. The RO would be | account that the payment would be withdrawn from. The RO would be | |||
| consulted for approval by the AS outside of the flow of the GNAP | consulted for approval by the AS outside of the flow of the GNAP | |||
| request. A token in such circumstances would need to show both the | request. A token in such circumstances would need to show both the | |||
| RO and end user as separate entities. | RO and end user as separate entities. | |||
| 2.1.11. Client Instance | 2.1.11. Client Instance | |||
| Access tokens are issued to a specific client instance by the AS. | Access tokens are issued to a specific client instance by the AS. | |||
| The identity of this instance can be used by the RS to allow specific | The identity of this instance can be used by the RS to allow specific | |||
| kinds of access, or other attributes about the access token. For | kinds of access or other attributes about the access token. For | |||
| example, an AS that binds all access tokens issued to a particular | example, an AS that binds all access tokens issued to a particular | |||
| client instance to that client instance's most recent key rotation | client instance to that client instance's most recent key rotation | |||
| would need to be able to look up the client instance in order to find | would need to be able to look up the client instance in order to find | |||
| the key binding detail. | the key binding detail. | |||
| This corresponds to the client_id claim of a [JWT] formatted token or | This corresponds to the client_id claim in the payload of a JSON Web | |||
| the instance_id field of a token introspection response. | Token [JWT] or the instance_id field of a token introspection | |||
| response. | ||||
| The client is not normally informed of this information separately, | The client is not normally informed of this information separately, | |||
| since a client instance can usually correctly assume that it is the | since a client instance can usually correctly assume that it is the | |||
| client instance to which a token that it receives was issued. | client instance to which a token that it receives was issued. | |||
| 2.1.12. Label | 2.1.12. Label | |||
| When multiple access tokens are requested or a client instance uses | When multiple access tokens are requested or a client instance uses | |||
| token labels, the parties will need to keep track of which labels | token labels, the parties will need to keep track of which labels | |||
| were applied to each individual token. Since labels can be re-used | were applied to each individual token. Since labels can be reused | |||
| across different grant requests, the token label alone is not | across different grant requests, the token label alone is not | |||
| sufficient to uniquely identify a given access token in a system. | sufficient to uniquely identify a given access token in a system. | |||
| However, within the context of a grant request, these labels are | However, within the context of a grant request, these labels are | |||
| required to be unique. | required to be unique. | |||
| A client instance can request a specific label using the label field | A client instance can request a specific label using the label field | |||
| of an access_token request in Section 2.1 of [GNAP]. | of an access_token request; see Section 2.1 of [GNAP]. | |||
| The AS can inform the client instance of a token's label using the | The AS can inform the client instance of a token's label using the | |||
| label field of an access_token response in Section 3.2 of [GNAP]. | label field of an access_token response; see Section 3.2 of [GNAP]. | |||
| This corresponds to the label field of a token introspection | This corresponds to the label field of a token introspection | |||
| response. | response. | |||
| 2.1.13. Parent Grant Request | 2.1.13. Parent Grant Request | |||
| All access tokens are issued in the context of a specific grant | All access tokens are issued in the context of a specific grant | |||
| request from a client instance. The grant request itself represents | request from a client instance. The grant request itself represents | |||
| a unique tuple of: | a unique tuple of: | |||
| * The AS processing the grant request | * The AS processing the grant request | |||
| * The client instance making the grant request | * The client instance making the grant request | |||
| * The RO (or set of RO's) approving the grant request (or needing to | * The RO (or set of ROs) approving the grant request (or needing to | |||
| approve it) | approve it) | |||
| * The access rights granted by the RO | * The access rights granted by the RO | |||
| * The current state of the grant request, as defined in Section 1.5 | * The current state of the grant request, as defined in Section 1.5 | |||
| of [GNAP] | of [GNAP] | |||
| The AS can use this information to tie common information to a | The AS can use this information to tie common information to a | |||
| specific token. For instance, instead of specifying a client | specific token. For instance, instead of specifying a client | |||
| instance for every issued access token for a grant, the AS can store | instance for every issued access token for a grant, the AS can store | |||
| skipping to change at page 12, line 14 ¶ | skipping to change at line 522 ¶ | |||
| Since the grant itself does not need to be identified in any of the | Since the grant itself does not need to be identified in any of the | |||
| protocol messages, GNAP does not define a specific grant identifier | protocol messages, GNAP does not define a specific grant identifier | |||
| to be conveyed between any parties in the protocol. Only the AS | to be conveyed between any parties in the protocol. Only the AS | |||
| needs to keep an explicit connection between an issued access token | needs to keep an explicit connection between an issued access token | |||
| and the parent grant that issued it. | and the parent grant that issued it. | |||
| 2.1.14. AS-Specific Access Tokens | 2.1.14. AS-Specific Access Tokens | |||
| When an access token is used for the grant continuation API defined | When an access token is used for the grant continuation API defined | |||
| in Section 5 of [GNAP] (the continuation access token) the token | in Section 5 of [GNAP] (the continuation access token), the token | |||
| management API defined in Section 6 of [GNAP] (the token management | management API defined in Section 6 of [GNAP] (the token management | |||
| access token), or the RS-facing API defined in Section 3 (the | access token), or the RS-facing API defined in Section 3 (the | |||
| resource server management access token), the AS MUST separate these | resource server management access token), the AS MUST separate these | |||
| access tokens from others usable at RS's. The AS can do this through | access tokens from other access tokens used at one or more RSs. The | |||
| the use of a flag on the access token data structure, by using a | AS can do this through the use of a flag on the access token data | |||
| special internal access right, or any other means at its disposal. | structure, by using a special internal access right, or any other | |||
| Just like other access tokens in GNAP, the contents of these AS- | means at its disposal. Just like other access tokens in GNAP, the | |||
| specific access tokens are opaque to the software presenting the | contents of these AS-specific access tokens are opaque to the | |||
| token. Unlike other access tokens, the contents of these AS-specific | software presenting the token. Unlike other access tokens, the | |||
| access tokens are also opaque to the RS. | contents of these AS-specific access tokens are also opaque to the | |||
| RS. | ||||
| The client instance is given continuation access tokens only as part | The client instance is given continuation access tokens only as part | |||
| of the continue field of the grant response in Section 3.1 of [GNAP]. | of the continue field of the grant response in Section 3.1 of [GNAP]. | |||
| The client instance is given token management access tokens only as | The client instance is given token management access tokens only as | |||
| part of the manage field of the grant response in Section 3.1.2 of | part of the manage field of the grant response in Section 3.2.1 of | |||
| [GNAP]. The means by which the RS is given resource server | [GNAP]. The means by which the RS is given resource server | |||
| management access tokens is out of scope of this specification, but | management access tokens is out of scope of this specification, but | |||
| methods could include pre-configuration of the token value with the | methods could include preconfiguration of the token value with the RS | |||
| RS software or granting the access token through a standard GNAP | software or granting the access token through a standard GNAP | |||
| process. | process. | |||
| For continuation access tokens and token management access tokens, a | For continuation access tokens and token management access tokens, a | |||
| client instance MUST take steps to differentiate these special- | client instance MUST take steps to differentiate these special- | |||
| purpose access tokens from access tokens used at RS's. To facilitate | purpose access tokens from access tokens used at one or more RSs. To | |||
| this, a client instance can store AS-specific access tokens | facilitate this, a client instance can store AS-specific access | |||
| separately from other access tokens in order to keep them from being | tokens separately from other access tokens in order to keep them from | |||
| confused with each other and used at the wrong endpoints. | being confused with each other and used at the wrong endpoints. | |||
| An RS should never see an AS-specific access token presented, so any | An RS should never see an AS-specific access token presented, so any | |||
| attempts to process one MUST fail. When introspection is used, the | attempts to process one MUST fail. When introspection is used, the | |||
| AS MUST NOT return an active value of true for AS-specific access | AS MUST NOT return an active value of true for AS-specific access | |||
| tokens to the RS. If an AS implements its protected endpoints in | tokens to the RS. If an AS implements its protected endpoints in | |||
| such a way as it uses token introspection internally, the AS MUST | such a way that it uses token introspection internally, the AS MUST | |||
| differentiate these AS-specific access tokens from those issued for | differentiate these AS-specific access tokens from those issued for | |||
| use at an external RS. | use at an external RS. | |||
| 2.2. Access Token Formats | 2.2. Access Token Formats | |||
| When the AS issues an access token for use at an RS, the RS needs to | When the AS issues an access token for use at an RS, the RS needs to | |||
| have some means of understanding what the access token is for in | have some means of understanding what the access token is for in | |||
| order to determine how to respond to the request. The core GNAP | order to determine how to respond to the request. The core GNAP | |||
| protocol makes neither assumptions nor demands on the format or | protocol makes neither assumptions nor demands on the format or | |||
| contents of the access token, and in fact, the token format and | contents of the access token, and in fact, the token format and | |||
| skipping to change at page 13, line 27 ¶ | skipping to change at line 582 ¶ | |||
| the AS at runtime as described in Section 3.3. Structured tokens can | the AS at runtime as described in Section 3.3. Structured tokens can | |||
| also be used in combination with introspection, allowing the token | also be used in combination with introspection, allowing the token | |||
| itself to carry one class of information and the introspection | itself to carry one class of information and the introspection | |||
| response to carry another. | response to carry another. | |||
| Some token formats, such as Macaroons [MACAROON] and Biscuits | Some token formats, such as Macaroons [MACAROON] and Biscuits | |||
| [BISCUIT], allow for the RS to derive sub-tokens without having to | [BISCUIT], allow for the RS to derive sub-tokens without having to | |||
| call the AS as described in Section 4. | call the AS as described in Section 4. | |||
| The supported token formats can be communicated dynamically at | The supported token formats can be communicated dynamically at | |||
| runtime between the AS and RS in several places. | runtime between the AS and RS in several places: | |||
| * The AS can declare its supported token formats as part of RS- | * The AS can declare its supported token formats as part of RS- | |||
| facing discovery Section 3.1 | facing discovery (Section 3.1). | |||
| * The RS can require a specific token format be used to access a | * The RS can require a specific token format be used to access a | |||
| registered resource set Section 3.4 | registered resource set (Section 3.4). | |||
| * The AS can return the token's format in an introspection response | * The AS can return the token's format in an introspection response | |||
| Section 3.3 | (Section 3.3). | |||
| In all places where the token format is listed explicitly, it MUST be | In all places where the token format is listed explicitly, it MUST be | |||
| one of the registered values in the GNAP Token Formats Registry | one of the registered values in the "GNAP Token Formats" registry | |||
| Section 5.3. | Section 5.3. | |||
| 3. Resource-Server-Facing API | 3. Resource-Server-Facing API | |||
| To facilitate runtime and dynamic connections with an RS, the AS can | To facilitate runtime and dynamic connections with an RS, the AS can | |||
| offer an RS-Facing API consisting of one or more of the following | offer an RS-facing API consisting of one or more of the following | |||
| optional pieces. | optional pieces: | |||
| * Discovery | * Discovery | |||
| * Introspection | * Introspection | |||
| * Token chaining | * Token chaining | |||
| * Resource reference registration | * Resource reference registration | |||
| 3.1. RS-facing AS Discovery | 3.1. RS-Facing AS Discovery | |||
| A GNAP AS offering RS-facing services can publish its features on a | A GNAP AS offering RS-facing services can publish its features on a | |||
| well-known discovery document at the URL with the same schema and | well-known discovery document at the URL with the same schema and | |||
| authority as the grant request endpoint URL, at the path /.well- | authority as the grant request endpoint URL, at the path /.well- | |||
| known/gnap-as-rs. | known/gnap-as-rs. | |||
| The discovery response is a JSON document [RFC8259] consisting of a | The discovery response is a JSON document [RFC8259] consisting of a | |||
| single JSON object with the following fields: | single JSON object with the following fields: | |||
| grant_request_endpoint (string): The location of the AS's grant | grant_request_endpoint (string): The location of the AS's grant | |||
| request endpoint defined by Section 9 of [GNAP]. This URL MUST be | request endpoint defined by Section 9 of [GNAP]. This URL MUST be | |||
| the same URL used by client instances in support of GNAP requests. | the same URL used by client instances in support of GNAP requests. | |||
| The RS can use this to derive downstream access tokens, if | The RS can use this to derive downstream access tokens, if | |||
| supported by the AS. The location MUST be a URL [RFC3986] with a | supported by the AS. The location MUST be a URL [RFC3986] with a | |||
| scheme component that MUST be https, a host component, and | scheme component that MUST be https, a host component, and | |||
| optionally, port, path and query components and no fragment | (optionally) port, path, and query components and no fragment | |||
| components. REQUIRED. See Section 4. | components. REQUIRED. See Section 4. | |||
| introspection_endpoint (string): The URL of the endpoint offering | introspection_endpoint (string): The URL of the endpoint offering | |||
| introspection. The location MUST be a URL [RFC3986] with a scheme | introspection. The location MUST be a URL [RFC3986] with a scheme | |||
| component that MUST be https, a host component, and optionally, | component that MUST be https, a host component, and (optionally) | |||
| port, path and query components and no fragment components. | port, path, and query components and no fragment components. | |||
| REQUIRED if the AS supports introspection. An absent value | REQUIRED if the AS supports introspection. An absent value | |||
| indicates that the AS does not support introspection. See | indicates that the AS does not support introspection. See | |||
| Section 3.3. | Section 3.3. | |||
| token_formats_supported (array of strings): A list of token formats | token_formats_supported (array of strings): A list of token formats | |||
| supported by this AS. The values in this list MUST be registered | supported by this AS. The values in this list MUST be registered | |||
| in the GNAP Token Format Registry in Section 5.3. OPTIONAL. | in the "GNAP Token Formats" registry per Section 5.3. OPTIONAL. | |||
| resource_registration_endpoint (string): The URL of the endpoint | resource_registration_endpoint (string): The URL of the endpoint | |||
| offering resource registration. The location MUST be a URL | offering resource registration. The location MUST be a URL | |||
| [RFC3986] with a scheme component that MUST be https, a host | [RFC3986] with a scheme component that MUST be https, a host | |||
| component, and optionally, port, path and query components and no | component, and (optionally) port, path, and query components and | |||
| fragment components. REQUIRED if the AS supports dynamic resource | no fragment components. REQUIRED if the AS supports dynamic | |||
| registration. An absent value indicates that the AS does not | resource registration. An absent value indicates that the AS does | |||
| support this feature. See Section 3.4. | not support this feature. See Section 3.4. | |||
| key_proofs_supported (array of strings) A list of the AS's supported | key_proofs_supported (array of strings): A list of the AS's | |||
| key proofing mechanisms. The values of this list correspond to | supported key proofing mechanisms. The values of this list | |||
| possible values of the proof field of the key section of the | correspond to possible values of the proof field of the key | |||
| request. Values MUST be in the GNAP Key Proofing Methods registry | section of the request. Values MUST be registered in the "GNAP | |||
| established by [GNAP]. OPTIONAL. | Key Proofing Methods" registry established by [GNAP]. OPTIONAL. | |||
| Additional fields are defined in the GNAP RS-Facing Discovery | Additional fields are defined in the "GNAP RS-Facing Discovery | |||
| Document Fields registry Section 5.8. | Document Fields" registry; see Section 5.8. | |||
| 3.2. Protecting RS requests to the AS | 3.2. Protecting RS Requests to the AS | |||
| Unless otherwise specified, the RS MUST protect its calls to the AS | Unless otherwise specified, the RS MUST protect its calls to the AS | |||
| using any of the signature methods defined by Section 7 of [GNAP]. | using any of the signature methods defined in Section 7 of [GNAP]. | |||
| The RS MAY present its keys by reference or by value in a similar | The RS MAY present its keys by reference or by value in a similar | |||
| fashion to a client instance calling the AS in the core protocol of | fashion to a client instance calling the AS in the core protocol of | |||
| GNAP, described in Section 7.1 of [GNAP]. In the protocols defined | GNAP, as described in Section 7.1 of [GNAP]. In the protocols | |||
| here, this takes the form of the resource server identifying itself | defined here, this takes the form of the resource server identifying | |||
| using a key field or by passing an instance identifier directly. | itself by using a key field or by passing an instance identifier | |||
| directly. | ||||
| POST /continue HTTP/1.1 | POST /continue HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Authorization: GNAP 80UPRY5NM33OMUKMKSKU | Authorization: GNAP 80UPRY5NM33OMUKMKSKU | |||
| Signature-Input: sig1=... | Signature-Input: sig1=... | |||
| Signature: sig1=... | Signature: sig1=... | |||
| Content-Type: application/json | Content-Type: application/json | |||
| "resource_server": { | "resource_server": { | |||
| "key": { | "key": { | |||
| skipping to change at page 16, line 4 ¶ | skipping to change at line 702 ¶ | |||
| POST /continue HTTP/1.1 | POST /continue HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Signature-Input: sig1=... | Signature-Input: sig1=... | |||
| Signature: sig1=... | Signature: sig1=... | |||
| Content-Type: application/json | Content-Type: application/json | |||
| { | { | |||
| "resource_server": "7C7C4AZ9KHRS6X63AJAO" | "resource_server": "7C7C4AZ9KHRS6X63AJAO" | |||
| } | } | |||
| The means by which an RS's keys are made known to the AS are out of | The means by which an RS's keys are made known to the AS are out of | |||
| scope of this specification. The AS MAY require an RS to pre- | the scope of this specification. The AS MAY require an RS to | |||
| register its keys or could allow calls from arbitrary keys in a | preregister its keys, or it could allow calls from arbitrary keys in | |||
| trust-on-first-use model. | a trust-on-first-use model. | |||
| The AS MAY issue access tokens to the RS for protecting the RS-facing | The AS MAY issue access tokens, called "resource server management | |||
| API endpoints, called a resource server management access token. If | access tokens", to the RS to protect the RS-facing API endpoints. If | |||
| such tokens are issued, the RS MUST present them to the RS-facing API | such tokens are issued, the RS MUST present them to the RS-facing API | |||
| endpoints along with the RS authentication. | endpoints along with the RS authentication. | |||
| POST /continue HTTP/1.1 | POST /continue HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Authorization: GNAP 80UPRY5NM33OMUKMKSKU | Authorization: GNAP 80UPRY5NM33OMUKMKSKU | |||
| Signature-Input: sig1=... | Signature-Input: sig1=... | |||
| Signature: sig1=... | Signature: sig1=... | |||
| Content-Type: application/json | Content-Type: application/json | |||
| skipping to change at page 17, line 4 ¶ | skipping to change at line 750 ¶ | |||
| endpoint at the AS to get token information. | endpoint at the AS to get token information. | |||
| +--------+ +------+ +------+ | +--------+ +------+ +------+ | |||
| | Client +--(1)->| RS | | AS | | | Client +--(1)->| RS | | AS | | |||
| |Instance| | +--(2)->| | | |Instance| | +--(2)->| | | |||
| | | | | | | | | | | | | | | |||
| | | | |<-(3)--+ | | | | | |<-(3)--+ | | |||
| | | | | +------+ | | | | | +------+ | |||
| | |<-(4)--+ | | | |<-(4)--+ | | |||
| +--------+ +------+ | +--------+ +------+ | |||
| 1. The client instance calls the RS with its access token. | 1. The client instance calls the RS with its access token. | |||
| 2. The RS introspects the access token value at the AS. The RS | 2. The RS introspects the access token value at the AS. The RS | |||
| signs the request with its own key (not the client instance's key | signs the request with its own key (not the client instance's key | |||
| or the token's key). | or the token's key). | |||
| 3. The AS validates the access token value and the Resource Server's | 3. The AS validates the access token value and the RS's request and | |||
| request and returns the introspection response for the token. | returns the introspection response for the token. | |||
| 4. The RS fulfills the request from the client instance. | 4. The RS fulfills the request from the client instance. | |||
| The RS signs the request with its own key and sends the value of the | The RS signs the request with its own key and sends the value of the | |||
| access token as the body of the request as a JSON object with the | access token in the body of the request as a JSON object with the | |||
| following members: | following members: | |||
| access_token (string): REQUIRED. The access token value presented | access_token (string): The access token value presented to the RS by | |||
| to the RS by the client instance. | the client instance. REQUIRED. | |||
| proof (string): RECOMMENDED. The proofing method used by the client | proof (string): The proofing method used by the client instance to | |||
| instance to bind the token to the RS request. The value MUST be | bind the token to the RS request. The value MUST be registered in | |||
| in the GNAP Key Proofing Methods registry. | the "GNAP Key Proofing Methods" registry. RECOMMENDED. | |||
| resource_server (string or object): REQUIRED. The identification | resource_server (object/string): The identification used to | |||
| used to authenticate the resource server making this call, either | authenticate the resource server making this call, either by value | |||
| by value or by reference as described in Section 3.2. | or by reference as described in Section 3.2. REQUIRED. | |||
| access (array of strings/objects): OPTIONAL. The minimum access | access (array of strings/objects): The minimum access rights | |||
| rights required to fulfill the request. This MUST be in the | required to fulfill the request. This MUST be in the format | |||
| format described in Section 8 of [GNAP]. | described in Section 8 of [GNAP]. OPTIONAL. | |||
| Additional fields are defined in the GNAP Token Introspection Request | Additional fields are defined in the "GNAP Token Introspection | |||
| registry Section 5.4. | Request" registry (Section 5.4). | |||
| POST /introspect HTTP/1.1 | POST /introspect HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Signature-Input: sig1=... | Signature-Input: sig1=... | |||
| Signature: sig1=... | Signature: sig1=... | |||
| Digest: sha256=... | Digest: sha256=... | |||
| { | { | |||
| "access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", | "access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", | |||
| skipping to change at page 18, line 32 ¶ | skipping to change at line 825 ¶ | |||
| * is appropriate for presentation at the identified RS, and | * is appropriate for presentation at the identified RS, and | |||
| * is appropriate for the access indicated (if present). | * is appropriate for the access indicated (if present). | |||
| The AS responds with a data structure describing the token's current | The AS responds with a data structure describing the token's current | |||
| state and any information the RS would need to validate the token's | state and any information the RS would need to validate the token's | |||
| presentation, such as its intended proofing mechanism and key | presentation, such as its intended proofing mechanism and key | |||
| material. | material. | |||
| active (boolean): REQUIRED. If true, the access token presented is | active (boolean): If true, the access token presented is active, as | |||
| active, as defined above. If any of the criteria for an active | defined above. If any of the criteria for an active token are not | |||
| token are not true, or if the AS is unable to make a determination | true, or if the AS is unable to make a determination (such as the | |||
| (such as the token is not found), the value is set to false and | token is not found), the value is set to false and other fields | |||
| other fields are omitted. | are omitted. REQUIRED. | |||
| If the access token is active, additional fields from the single | If the access token is active, additional fields from the single | |||
| access token response structure defined in Section 3.2.1 of [GNAP] | access token response structure defined in Section 3.2.1 of [GNAP] | |||
| are included. In particular, these include the following: | are included. In particular, these include the following: | |||
| access (array of strings/objects): REQUIRED. The access rights | access (array of strings/objects): The access rights associated with | |||
| associated with this access token. This MUST be in the format | this access token. This MUST be in the format described in | |||
| described in the Section 8 of [GNAP]. This array MAY be filtered | Section 8 of [GNAP]. This array MAY be filtered or otherwise | |||
| or otherwise limited for consumption by the identified RS, | limited for consumption by the identified RS, including being an | |||
| including being an empty array, indicating that the token has no | empty array, which indicates that the token has no explicit access | |||
| explicit access rights that can be disclosed to the RS. | rights that can be disclosed to the RS. REQUIRED. | |||
| key (object/string): REQUIRED if the token is bound. The key bound | key (object/string): if the token is bound. The key bound to the | |||
| to the access token, to allow the RS to validate the signature of | access token, to allow the RS to validate the signature of the | |||
| the request from the client instance. If the access token is a | request from the client instance. If the access token is a bearer | |||
| bearer token, this MUST NOT be included. | token, this MUST NOT be included. REQUIRED | |||
| flags (array of strings): OPTIONAL. The set of flags associated | flags (array of strings): The set of flags associated with the | |||
| with the access token. | access token. OPTIONAL. | |||
| exp (integer): OPTIONAL. The timestamp after which this token is no | exp (integer): The timestamp after which this token is no longer | |||
| longer valid. Expressed as integer seconds from UNIX Epoch. | valid. Expressed as integer seconds from UNIX Epoch. OPTIONAL. | |||
| iat (integer): OPTIONAL. The timestamp at which this token was | iat (integer): The timestamp at which this token was issued by the | |||
| issued by the AS. Expressed as integer seconds from UNIX Epoch. | AS. Expressed as integer seconds from UNIX Epoch. OPTIONAL. | |||
| nbf (integer): OPTIONAL. The timestamp before which this token is | nbf (integer): The timestamp before which this token is not valid. | |||
| not valid. Expressed as integer seconds from UNIX Epoch. | Expressed as integer seconds from UNIX Epoch. OPTIONAL. | |||
| aud (string or array of strings): OPTIONAL. Identifiers for the | aud (string or array of strings): Identifiers for the resource | |||
| resource servers this token can be accepted at. | servers this token can be accepted at. OPTIONAL. | |||
| sub (string): OPTIONAL. Identifier of the resource owner who | sub (string): Identifier of the resource owner who authorized this | |||
| authorized this token. | token. OPTIONAL. | |||
| iss (string): REQUIRED. Grant endpoint URL of the AS that issued | iss (string): Grant endpoint URL of the AS that issued this token. | |||
| this token. | REQUIRED. | |||
| instance_id (string): OPTIONAL. The instance identifier of the | instance_id (string): The instance identifier of the client instance | |||
| client instance that the token was issued to. | that the token was issued to. OPTIONAL. | |||
| Additional fields are defined in the GNAP Token Introspection | Additional fields are defined in the "GNAP Token Introspection | |||
| Response registry Section 5.5. | Response" registry (Section 5.5). | |||
| The response MAY include any additional fields defined in an access | The response MAY include any additional fields defined in an access | |||
| token response and MUST NOT include the access token value itself. | token response and MUST NOT include the access token value itself. | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "active": true, | "active": true, | |||
| skipping to change at page 20, line 36 ¶ | skipping to change at line 908 ¶ | |||
| When processing the results of the introspection response, the RS | When processing the results of the introspection response, the RS | |||
| MUST determine the appropriate course of action. For instance, if | MUST determine the appropriate course of action. For instance, if | |||
| the RS determines that the access token's access rights are not | the RS determines that the access token's access rights are not | |||
| sufficient for the request to which the token was attached, the RS | sufficient for the request to which the token was attached, the RS | |||
| can return an error or a public resource, as appropriate for the RS. | can return an error or a public resource, as appropriate for the RS. | |||
| In all cases, the final determination of the response is at the | In all cases, the final determination of the response is at the | |||
| discretion of the RS. | discretion of the RS. | |||
| 3.4. Registering a Resource Set | 3.4. Registering a Resource Set | |||
| If the RS needs to, it can post a set of resources as described in | If the RS needs to, it can post a set of resources, as described in | |||
| the Resource Access Rights section of [GNAP] to the AS's resource | Section 8 ("Resource Access Rights") of [GNAP], to the AS's resource | |||
| registration endpoint along with information about what the RS will | registration endpoint along with information about what the RS will | |||
| need to validate the request. | need to validate the request. | |||
| access (array of objects/strings): REQUIRED. The list of access | access (array of objects/strings): The list of access rights | |||
| rights associated with the request in the format described in the | associated with the request in the format described in Section 8 | |||
| "Resource Access Rights" section of [GNAP]. | ("Resource Access Rights") of [GNAP]. REQUIRED. | |||
| resource_server (string or object): REQUIRED. The identification | resource_server (object/string): The identification used to | |||
| used to authenticate the resource server making this call, either | authenticate the resource server making this call, either by value | |||
| by value or by reference as described in Section 3.2. | or by reference as described in Section 3.2. REQUIRED. | |||
| token_formats_supported (array of strings): OPTIONAL. The token | token_formats_supported (array of strings): The list of token | |||
| formats the RS is able to process for accessing the resource. The | formats that the RS is able to process. The values in this array | |||
| values in this array MUST be registered in the GNAP Token Formats | MUST be registered in the "GNAP Token Formats" registry per | |||
| Registry in Section 5.3. If the field is omitted, the token | Section 5.3. If the field is omitted, the token format is at the | |||
| format is at the discretion of the AS. If the AS does not support | discretion of the AS. If the AS does not support any of the | |||
| any of the requested token formats, the AS MUST return an error to | requested token formats, the AS MUST return an error to the RS. | |||
| the RS. | OPTIONAL. | |||
| token_introspection_required (boolean): OPTIONAL. If present and | token_introspection_required (boolean): If present and set to true, | |||
| set to true, the RS expects to make a token introspection request | the RS expects to make a token introspection request as described | |||
| as described in Section 3.3. If absent or set to false, the RS | in Section 3.3. If absent or set to false, the RS does not | |||
| does not anticipate needing to make an introspection request for | anticipate needing to make an introspection request for tokens | |||
| tokens relating to this resource set. If the AS does not support | relating to this resource set. If the AS does not support token | |||
| token introspection for this RS, the AS MUST return an error to | introspection for this RS, the AS MUST return an error to the RS. | |||
| the RS. | OPTIONAL. | |||
| Additional fields are defined in the GNAP Resource Set Registration | Additional fields are defined in the "GNAP Resource Set Registration | |||
| Request registry Section 5.6. | Request Parameters" registry (Section 5.6). | |||
| The RS MUST identify itself with its own key and sign the request. | The RS MUST identify itself with its own key and sign the request. | |||
| POST /resource HTTP/1.1 | POST /resource HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Signature-Input: sig1=... | Signature-Input: sig1=... | |||
| Signature: sig1=... | Signature: sig1=... | |||
| Digest: ... | Digest: ... | |||
| skipping to change at page 22, line 4 ¶ | skipping to change at line 971 ¶ | |||
| "datatypes": [ | "datatypes": [ | |||
| "metadata", | "metadata", | |||
| "images" | "images" | |||
| ] | ] | |||
| }, | }, | |||
| "dolphin-metadata" | "dolphin-metadata" | |||
| ], | ], | |||
| "resource_server": "7C7C4AZ9KHRS6X63AJAO" | "resource_server": "7C7C4AZ9KHRS6X63AJAO" | |||
| } | } | |||
| The AS responds with a reference appropriate to represent the | The AS responds with a reference appropriate to represent the | |||
| resources list that the RS presented in its request as well as any | resources list that the RS presented in its request as well as any | |||
| additional information the RS might need in future requests. | additional information the RS might need in future requests. | |||
| resource_reference (string): REQUIRED. A single string representing | resource_reference (string): A single string representing the list | |||
| the list of resources registered in the request. The RS MAY make | of resources registered in the request. The RS MAY make this | |||
| this handle available to a client instance as part of a discovery | handle available to a client instance as part of a discovery | |||
| response as described in Section 9.1 of [GNAP] or as documentation | response as described in Section 9.1 of [GNAP] or as documentation | |||
| to client software developers. | to client software developers. REQUIRED. | |||
| instance_id (string): OPTIONAL. An instance identifier that the RS | instance_id (string): An instance identifier that the RS can use to | |||
| can use to refer to itself in future calls to the AS, in lieu of | refer to itself in future calls to the AS, in lieu of sending its | |||
| sending its key by value. See Section 3.2. | key by value. See Section 3.2. OPTIONAL. | |||
| introspection_endpoint (string): OPTIONAL. The introspection | introspection_endpoint (string): The introspection endpoint of this | |||
| endpoint of this AS, used to allow the RS to perform token | AS that is used to allow the RS to perform token introspection. | |||
| introspection. See Section 3.3. | See Section 3.3. OPTIONAL. | |||
| Additional fields are defined in the GNAP Resource Set Registration | Additional fields are defined in the "GNAP Resource Set Registration | |||
| Response Registry Section 5.7. | Response Parameters" registry (Section 5.7). | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "resource_reference": "FWWIKYBQ6U56NL1" | "resource_reference": "FWWIKYBQ6U56NL1" | |||
| } | } | |||
| If a resource was previously registered, the AS MAY return the same | If a resource was previously registered, the AS MAY return the same | |||
| resource reference value as in previous responses. | resource reference value as in previous responses. | |||
| If the registration fails, the AS returns an HTTP 400 Bad Request | If the registration fails, the AS returns HTTP status code 400 (Bad | |||
| error to the RS indicating that the registration was not successful. | Request) to the RS, indicating that the registration was not | |||
| successful. | ||||
| The client instance can then use the resource_reference value as a | The client instance can then use the resource_reference value as a | |||
| string-type access reference as defined in Section 8.1 of [GNAP]. | string-type access reference as defined in Section 8.1 of [GNAP]. | |||
| This value MAY be combined with any other additional access rights | This value MAY be combined with any other additional access rights | |||
| requested by the client instance. | requested by the client instance. | |||
| { | { | |||
| "access_token": { | "access_token": { | |||
| "access": [ | "access": [ | |||
| "FWWIKYBQ6U56NL1", | "FWWIKYBQ6U56NL1", | |||
| skipping to change at page 23, line 34 ¶ | skipping to change at line 1042 ¶ | |||
| }, | }, | |||
| "dolphin-metadata" | "dolphin-metadata" | |||
| ] | ] | |||
| }, | }, | |||
| "client": "client-12351.bdxqf" | "client": "client-12351.bdxqf" | |||
| } | } | |||
| 3.5. Error Responses | 3.5. Error Responses | |||
| In the case of an error from the RS-facing API, the AS responds to | In the case of an error from the RS-facing API, the AS responds to | |||
| the RS with an HTTP 400 (Bad Request) status code and a JSON object | the RS with HTTP status code 400 (Bad Request) and a JSON object | |||
| consisting of a single error field, which is either an object or a | consisting of a single error field, which is either an object or a | |||
| string. | string. | |||
| When returned as a string, the error value is the error code: | When returned as a string, the error value is the error code: | |||
| { | { | |||
| error: "invalid_access" | error: "invalid_access" | |||
| } | } | |||
| When returned as an object, the error object contains the following | When returned as an object, the error object contains the following | |||
| skipping to change at page 24, line 15 ¶ | skipping to change at line 1071 ¶ | |||
| { | { | |||
| "error": { | "error": { | |||
| "code": "invalid_access", | "code": "invalid_access", | |||
| "description": "Access to 'foo' is not permitted for this RS." | "description": "Access to 'foo' is not permitted for this RS." | |||
| } | } | |||
| } | } | |||
| This specification defines the following error code values: | This specification defines the following error code values: | |||
| "invalid_request": The request is missing a required parameter, | "invalid_request": The request is missing a required parameter, | |||
| includes an invalid parameter value or is otherwise malformed. | includes an invalid parameter value, or is otherwise malformed. | |||
| "invalid_resource_server": The request was made from an RS that was | "invalid_resource_server": The request was made from an RS that was | |||
| not recognized or allowed by the AS, or the RS's signature | not recognized or allowed by the AS, or the RS's signature | |||
| validation failed. | validation failed. | |||
| "invalid_access" The RS is not permitted to register or introspect | "invalid_access" The RS is not permitted to register or introspect | |||
| for the requested "access" value. | for the requested "access" value. | |||
| Additional error codes can be defined in the GNAP RS-Facing Error | Additional error codes can be defined in the "GNAP RS-Facing Error | |||
| Codes Registry (Section 5.9). | Codes" registry (Section 5.9). | |||
| 4. Deriving a downstream token | 4. Deriving a Downstream Token | |||
| Some architectures require an RS to act as a client instance and use | Some architectures require an RS to act as a client instance and use | |||
| a derived access token for a secondary RS. Since the RS is not the | a derived access token for a secondary RS. Since the RS is not the | |||
| same entity that made the initial grant request, the RS is not | same entity that made the initial grant request, the RS is not | |||
| capable of referencing or modifying the existing grant. As such, the | capable of referencing or modifying the existing grant. As such, the | |||
| RS needs to request or generate a new token access token for its use | RS needs to request or generate a new access token for its use at the | |||
| at the secondary RS. This internal secondary token is issued in the | secondary RS. This internal secondary token is issued in the context | |||
| context of the incoming access token. | of the incoming access token. | |||
| While it is possible to use a token format (Section 2) that allows | While it is possible to use a token format (Section 2) that allows | |||
| for the RS to generate its own secondary token, the AS can allow the | for the RS to generate its own secondary token, the AS can allow the | |||
| RS to request this secondary access token using the same process used | RS to request this secondary access token using the same process used | |||
| by the original client instance to request the primary access token. | by the original client instance to request the primary access token. | |||
| Since the RS is acting as its own client instance from the | Since the RS is acting as its own client instance from the | |||
| perspective of GNAP, this process uses the same grant endpoint, | perspective of GNAP, this process uses the same grant endpoint, | |||
| request structure, and response structure as a client instance's | request structure, and response structure as a client instance's | |||
| request. | request. | |||
| skipping to change at page 26, line 5 ¶ | skipping to change at line 1139 ¶ | |||
| request one from the AS by making a token request as described in | request one from the AS by making a token request as described in | |||
| [GNAP] and presenting the existing access token's value in the | [GNAP] and presenting the existing access token's value in the | |||
| "existing_access_token" field. | "existing_access_token" field. | |||
| Since the RS is acting as a client instance, the RS MUST identify | Since the RS is acting as a client instance, the RS MUST identify | |||
| itself with its own key in the client field and sign the request just | itself with its own key in the client field and sign the request just | |||
| as any client instance would, as described in Section 3.2. The AS | as any client instance would, as described in Section 3.2. The AS | |||
| MUST determine that the token being presented is appropriate for use | MUST determine that the token being presented is appropriate for use | |||
| at the RS making the token chaining request. | at the RS making the token chaining request. | |||
| POST /tx HTTP/1.1 | POST /tx HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Detached-JWS: ejy0... | Detached-JWS: ejy0... | |||
| { | { | |||
| "access_token": { | "access_token": { | |||
| "access": [ | "access": [ | |||
| { | { | |||
| "actions": [ | "actions": [ | |||
| "read", | "read", | |||
| "write", | "write", | |||
| "dolphin" | "dolphin" | |||
| ], | ], | |||
| "locations": [ | "locations": [ | |||
| "https://server.example.net/", | "https://server.example.net/", | |||
| skipping to change at page 26, line 33 ¶ | skipping to change at line 1167 ¶ | |||
| "datatypes": [ | "datatypes": [ | |||
| "metadata", | "metadata", | |||
| "images" | "images" | |||
| ] | ] | |||
| }, | }, | |||
| "dolphin-metadata" | "dolphin-metadata" | |||
| ] | ] | |||
| }, | }, | |||
| "client": "7C7C4AZ9KHRS6X63AJAO", | "client": "7C7C4AZ9KHRS6X63AJAO", | |||
| "existing_access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0" | "existing_access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0" | |||
| } | } | |||
| The AS responds with a token for the downstream RS2 as described in | The AS responds with a token for the downstream RS2 as described in | |||
| [GNAP]. The downstream RS2 could repeat this process as necessary | [GNAP]. The downstream RS2 could repeat this process as necessary | |||
| for calling further RS's. | for calling further RSs. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| IANA is requested to add values to existing registries and to create | IANA has added values to existing registries and created five | |||
| 5 registries in the Grant Negotiation and Authorization Protocol | registries under the "Grant Negotiation and Authorization Protocol | |||
| registry. | (GNAP)" registry group. | |||
| 5.1. Well-Known URI | 5.1. Well-Known URIs | |||
| The "gnap-as-rs" URI suffix is registered into the Well-Known URIs | The "gnap-as-rs" URI suffix is registered in the "Well-Known URIs" | |||
| Registry to support RS-facing discovery of the AS. | registry to support RS-facing discovery of the AS. | |||
| URI Suffix: gnap-as-rs | URI Suffix: gnap-as-rs | |||
| Change Controller: IETF | Change Controller: IETF | |||
| Specification Document: Section 3.1 of RFC xxxx | Specification Document: Section 3.1 of RFC 9767 | |||
| Status: Permanent | Status: Permanent | |||
| 5.2. GNAP Grant Request Parameters | 5.2. GNAP Grant Request Parameters | |||
| The following parameter is registered into the GNAP Grant Request | The following parameter is registered in the "GNAP Grant Request | |||
| Parameters registry: | Parameters" registry: | |||
| Name: existing_access_token | Name: existing_access_token | |||
| Type: string | Type: string | |||
| Reference: Section 4 of RFC 9767 | ||||
| Reference: Section 4 of RFC xxxx | ||||
| 5.3. GNAP Token Formats | 5.3. GNAP Token Formats | |||
| This document defines a GNAP token format, for which IANA is asked to | This document defines a GNAP token format, for which IANA has created | |||
| create and maintain a new registry titled "GNAP Token Formats". | and maintains a new registry titled "GNAP Token Formats". Initial | |||
| Initial values for this registry are given in Section 5.3.2. Future | values for this registry are given in Section 5.3.2. Future | |||
| assignments and modifications to existing assignment are to be made | assignments and modifications to existing assignment are to be made | |||
| through the Specification Required registration policy [RFC8126]. | through the Specification Required registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The designated expert (DE) is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.3.1. | * all registrations follow the template presented in Section 5.3.1. | |||
| * the format's definition is sufficiently unique from other formats | * the format's definition is sufficiently unique from other formats | |||
| provided by existing parameters. | provided by existing parameters. | |||
| * the format's definition specifies the format of the access token | * the format's definition specifies the format of the access token | |||
| in sufficient detail to allow for the AS and RS to be able to | in sufficient detail to allow for the AS and RS to be able to | |||
| communicate the token information. | communicate the token information. | |||
| 5.3.1. Registry Template | 5.3.1. Registry Template | |||
| Name The name of the format. | Name: The name of the format. | |||
| Status: Whether or not the format is in active use. Possible values | ||||
| Status Whether or not the format is in active use. Possible values | ||||
| are Active and Deprecated. | are Active and Deprecated. | |||
| Description: The human-readable description of the access token | ||||
| Description Human-readable description of the access token format. | format. | |||
| Reference: The specification that defines the token format. | ||||
| Reference The specification that defines the token format. | ||||
| 5.3.2. Initial Registry Contents | 5.3.2. Initial Registry Contents | |||
| +===============+========+====================+============+ | +===============+========+====================+============+ | |||
| | Name | Status | Description | Reference | | | Name | Status | Description | Reference | | |||
| +===============+========+====================+============+ | +===============+========+====================+============+ | |||
| | jwt-signed | Active | JSON Web Token, | [JWT] | | | jwt-signed | Active | JSON Web Token, | [JWT] | | |||
| | | | signed with JWS | | | | | | signed with JWS | | | |||
| +---------------+--------+--------------------+------------+ | +---------------+--------+--------------------+------------+ | |||
| | jwt-encrypted | Active | JSON Web Token, | [JWT] | | | jwt-encrypted | Active | JSON Web Token, | [JWT] | | |||
| | | | encrypted with JWE | | | | | | encrypted with JWE | | | |||
| +---------------+--------+--------------------+------------+ | +---------------+--------+--------------------+------------+ | |||
| | macaroon | Active | Macaroon | [MACAROON] | | | macaroon | Active | Macaroon | [MACAROON] | | |||
| +---------------+--------+--------------------+------------+ | +---------------+--------+--------------------+------------+ | |||
| | biscuit | Active | Biscuit | [BISCUIT] | | | biscuit | Active | Biscuit | [BISCUIT] | | |||
| +---------------+--------+--------------------+------------+ | +---------------+--------+--------------------+------------+ | |||
| | zcap | Active | ZCAP | [ZCAPLD] | | | zcap | Active | ZCAP | [ZCAPLD] | | |||
| +---------------+--------+--------------------+------------+ | +---------------+--------+--------------------+------------+ | |||
| Table 1: Initial contents of the GNAP Token Formats | Table 1: Initial Contents of the GNAP Token Formats Registry | |||
| Registry. | ||||
| 5.4. GNAP Token Introspection Request | 5.4. GNAP Token Introspection Request | |||
| This document defines GNAP token introspection, for which IANA is | This document defines GNAP token introspection, for which IANA has | |||
| asked to create and maintain a new registry titled "GNAP Token | created and maintains a new registry titled "GNAP Token Introspection | |||
| Introspection Request". Initial values for this registry are given | Request". Initial values for this registry are given in | |||
| in Section 5.4.2. Future assignments and modifications to existing | Section 5.4.2. Future assignments and modifications to existing | |||
| assignment are to be made through the Specification Required | assignment are to be made through the Specification Required | |||
| registration policy [RFC8126]. | registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.4.1. | * all registrations follow the template presented in Section 5.4.1. | |||
| * the claim's definition is sufficiently orthogonal to other claims | * the claim's definition is sufficiently orthogonal to other claims | |||
| defined in the registry so as avoid overlapping functionality. | defined in the registry so as avoid overlapping functionality. | |||
| * the claim's definition specifies the syntax and semantics of the | * the claim's definition specifies the syntax and semantics of the | |||
| claim in sufficient detail to allow for the AS and RS to be able | claim in sufficient detail to allow for the AS and RS to be able | |||
| to communicate the token values. | to communicate the token values. | |||
| 5.4.1. Registry Template | 5.4.1. Registry Template | |||
| Name The name of the claim. | Name: The name of the claim. | |||
| Type: The JSON data type of the claim value. | ||||
| Type The JSON data type of the claim value. | Reference: The specification that defines the claim. | |||
| Reference The specification that defines the claim. | ||||
| 5.4.2. Initial Registry Contents | 5.4.2. Initial Registry Contents | |||
| The table below contains the initial contents of the GNAP Token | The table below contains the initial contents of the "GNAP Token | |||
| Introspection Registry. | Introspection Request" registry. | |||
| +=================+=================+=========================+ | +=================+=================+=========================+ | |||
| | Name | Type | Reference | | | Name | Type | Reference | | |||
| +=================+=================+=========================+ | +=================+=================+=========================+ | |||
| | access_token | string | Section 3.3 of RFC xxxx | | | access_token | string | Section 3.3 of RFC 9767 | | |||
| +-----------------+-----------------+-------------------------+ | +-----------------+-----------------+-------------------------+ | |||
| | proof | string | Section 3.3 of RFC xxxx | | | proof | string | Section 3.3 of RFC 9767 | | |||
| +-----------------+-----------------+-------------------------+ | +-----------------+-----------------+-------------------------+ | |||
| | resource_server | object/string | Section 3.3 of RFC xxxx | | | resource_server | object/string | Section 3.3 of RFC 9767 | | |||
| +-----------------+-----------------+-------------------------+ | +-----------------+-----------------+-------------------------+ | |||
| | access | array of | Section 3.3 of RFC xxxx | | | access | array of | Section 3.3 of RFC 9767 | | |||
| | | strings/objects | | | | | strings/objects | | | |||
| +-----------------+-----------------+-------------------------+ | +-----------------+-----------------+-------------------------+ | |||
| Table 2: Initial contents of the GNAP Token Introspection | Table 2: Initial Contents of the GNAP Token Introspection | |||
| Request Registry. | Request Registry | |||
| 5.5. GNAP Token Introspection Response | 5.5. GNAP Token Introspection Response | |||
| This document defines GNAP token introspection, for which IANA is | This document defines GNAP token introspection, for which IANA has | |||
| asked to create and maintain a new registry titled "GNAP Token | created and maintains a new registry titled "GNAP Token Introspection | |||
| Introspection Response". Initial values for this registry are given | Response". Initial values for this registry are given in | |||
| in Section 5.5.2. Future assignments and modifications to existing | Section 5.5.2. Future assignments and modifications to existing | |||
| assignment are to be made through the Specification Required | assignment are to be made through the Specification Required | |||
| registration policy [RFC8126]. | registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.5.1. | * all registrations follow the template presented in Section 5.5.1. | |||
| * the claim's definition is sufficiently orthogonal to other claims | * the claim's definition is sufficiently orthogonal to other claims | |||
| defined in the registry so as avoid overlapping functionality. | defined in the registry so as avoid overlapping functionality. | |||
| * the claim's definition specifies the syntax and semantics of the | * the claim's definition specifies the syntax and semantics of the | |||
| claim in sufficient detail to allow for the AS and RS to be able | claim in sufficient detail to allow for the AS and RS to be able | |||
| to communicate the token values. | to communicate the token values. | |||
| 5.5.1. Registry Template | 5.5.1. Registry Template | |||
| Name The name of the claim. | Name: The name of the claim. | |||
| Type: The JSON data type of the claim value. | ||||
| Type The JSON data type of the claim value. | Reference: The specification that defines the claim. | |||
| Reference The specification that defines the claim. | ||||
| 5.5.2. Initial Registry Contents | 5.5.2. Initial Registry Contents | |||
| The table below contains the initial contents of the GNAP Token | The table below contains the initial contents of the "GNAP Token | |||
| Introspection Registry. | Introspection Response" registry. | |||
| +=============+==========================+=========================+ | +=============+==========================+=========================+ | |||
| | Name | Type | Reference | | | Name | Type | Reference | | |||
| +=============+==========================+=========================+ | +=============+==========================+=========================+ | |||
| | active | boolean | Section 3.3 of RFC xxxx | | | active | boolean | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | access | array of strings/objects | Section 3.3 of RFC xxxx | | | access | array of strings/objects | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | key | object/string | Section 3.3 of RFC xxxx | | | key | object/string | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | flags | array of strings | Section 3.3 of RFC xxxx | | | flags | array of strings | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | exp | integer | Section 3.3 of RFC xxxx | | | exp | integer | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | iat | integer | Section 3.3 of RFC xxxx | | | iat | integer | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | nbf | integer | Section 3.3 of RFC xxxx | | | nbf | integer | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | aud | string or array of | Section 3.3 of RFC xxxx | | | aud | string or array of | Section 3.3 of RFC 9767 | | |||
| | | strings | | | | | strings | | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | sub | string | Section 3.3 of RFC xxxx | | | sub | string | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | iss | string | Section 3.3 of RFC xxxx | | | iss | string | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| | instance_id | string | Section 3.3 of RFC xxxx | | | instance_id | string | Section 3.3 of RFC 9767 | | |||
| +-------------+--------------------------+-------------------------+ | +-------------+--------------------------+-------------------------+ | |||
| Table 3: Initial contents of the GNAP Token Introspection | Table 3: Initial Contents of the GNAP Token Introspection | |||
| Response Registry. | Response Registry | |||
| 5.6. GNAP Resource Set Registration Request Parameters | 5.6. GNAP Resource Set Registration Request Parameters | |||
| This document defines a means to register a resource set for a GNAP | This document defines a means to register a resource set for a GNAP | |||
| AS, for which IANA is asked to create and maintain a new registry | AS, for which IANA has created and maintains a new registry titled | |||
| titled "GNAP Resource Set Registration Request Parameters". Initial | "GNAP Resource Set Registration Request Parameters". Initial values | |||
| values for this registry are given in Section 5.6.2. Future | for this registry are given in Section 5.6.2. Future assignments and | |||
| assignments and modifications to existing assignment are to be made | modifications to existing assignment are to be made through the | |||
| through the Expert Review registration policy [RFC8126]. | Expert Review registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.6.1. | * all registrations follow the template presented in Section 5.6.1. | |||
| * the parameter's definition is sufficiently orthogonal to other | * the parameter's definition is sufficiently orthogonal to other | |||
| parameters defined in the registry so as avoid overlapping | parameters defined in the registry so as avoid overlapping | |||
| functionality. | functionality. | |||
| * the parameter's definition specifies the syntax and semantics of | * the parameter's definition specifies the syntax and semantics of | |||
| the parameter in sufficient detail to allow for the AS and RS to | the parameter in sufficient detail to allow for the AS and RS to | |||
| be able to communicate the resource set. | be able to communicate the resource set. | |||
| 5.6.1. Registry Template | 5.6.1. Registry Template | |||
| Name The name of the parameter. | Name: The name of the parameter. | |||
| Type: The JSON data type of the parameter value. | ||||
| Type The JSON data type of the parameter value. | Reference: The specification that defines the token. | |||
| Reference The specification that defines the token. | ||||
| 5.6.2. Initial Registry Contents | 5.6.2. Initial Registry Contents | |||
| The table below contains the initial contents of the GNAP Resource | The table below contains the initial contents of the "GNAP Resource | |||
| Set Registration Request Parameters Registry. | Set Registration Request Parameters" registry. | |||
| +==============================+=================+=============+ | +==============================+=================+=============+ | |||
| | Name | Type | Reference | | | Name | Type | Reference | | |||
| +==============================+=================+=============+ | +==============================+=================+=============+ | |||
| | access | array of | Section 3.4 | | | access | array of | Section 3.4 | | |||
| | | strings/objects | of RFC xxxx | | | | strings/objects | of RFC 9767 | | |||
| +------------------------------+-----------------+-------------+ | +------------------------------+-----------------+-------------+ | |||
| | resource_server | string or | Section 3.4 | | | resource_server | object/string | Section 3.4 | | |||
| | | object | of RFC xxxx | | | | | of RFC 9767 | | |||
| +------------------------------+-----------------+-------------+ | +------------------------------+-----------------+-------------+ | |||
| | token_formats_supported | string | Section 3.4 | | | token_formats_supported | array of | Section 3.4 | | |||
| | | | of RFC xxxx | | | | strings | of RFC 9767 | | |||
| +------------------------------+-----------------+-------------+ | +------------------------------+-----------------+-------------+ | |||
| | token_introspection_required | boolean | Section 3.4 | | | token_introspection_required | boolean | Section 3.4 | | |||
| | | | of RFC xxxx | | | | | of RFC 9767 | | |||
| +------------------------------+-----------------+-------------+ | +------------------------------+-----------------+-------------+ | |||
| Table 4: Initial contents of the GNAP Resource Set | Table 4: Initial Contents of the GNAP Resource Set | |||
| Registration Request Parameters Registry. | Registration Request Parameters Registry | |||
| 5.7. GNAP Resource Set Registration Response Parameters | 5.7. GNAP Resource Set Registration Response Parameters | |||
| This document defines a means to register a resource set for a GNAP | This document defines a means to register a resource set for a GNAP | |||
| AS, for which IANA is asked to create and maintain a new registry | AS, for which IANA has created and maintains a new registry titled | |||
| titled "GNAP Resource Set Registration Response Parameters". Initial | "GNAP Resource Set Registration Response Parameters". Initial values | |||
| values for this registry are given in Section 5.7.2. Future | for this registry are given in Section 5.7.2. Future assignments and | |||
| assignments and modifications to existing assignment are to be made | modifications to existing assignment are to be made through the | |||
| through the Expert Review registration policy [RFC8126]. | Expert Review registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.7.1. | * all registrations follow the template presented in Section 5.7.1. | |||
| * the parameter's definition is sufficiently orthogonal to other | * the parameter's definition is sufficiently orthogonal to other | |||
| claims defined in the registry so as avoid overlapping | claims defined in the registry so as avoid overlapping | |||
| functionality. | functionality. | |||
| * the parameter's definition specifies the syntax and semantics of | * the parameter's definition specifies the syntax and semantics of | |||
| the claim in sufficient detail to allow for the AS and RS to be | the claim in sufficient detail to allow for the AS and RS to be | |||
| able to communicate the resource set. | able to communicate the resource set. | |||
| 5.7.1. Registry Template | 5.7.1. Registry Template | |||
| Name The name of the parameter. | Name: The name of the parameter. | |||
| Type: The JSON data type of the parameter value. | ||||
| Type The JSON data type of the parameter value. | Reference: The specification that defines the parameter. | |||
| Reference The specification that defines the parameter. | ||||
| 5.7.2. Initial Registry Contents | 5.7.2. Initial Registry Contents | |||
| The table below contains the initial contents of the GNAP Resource | The table below contains the initial contents of the "GNAP Resource | |||
| Set Registration Response Parameters Registry. | Set Registration Response Parameters" registry. | |||
| +========================+========+=========================+ | +========================+========+=========================+ | |||
| | Name | Type | Reference | | | Name | Type | Reference | | |||
| +========================+========+=========================+ | +========================+========+=========================+ | |||
| | resource_reference | string | Section 3.4 of RFC xxxx | | | resource_reference | string | Section 3.4 of RFC 9767 | | |||
| +------------------------+--------+-------------------------+ | +------------------------+--------+-------------------------+ | |||
| | instance_id | string | Section 3.4 of RFC xxxx | | | instance_id | string | Section 3.4 of RFC 9767 | | |||
| +------------------------+--------+-------------------------+ | +------------------------+--------+-------------------------+ | |||
| | introspection_endpoint | string | Section 3.4 of RFC xxxx | | | introspection_endpoint | string | Section 3.4 of RFC 9767 | | |||
| +------------------------+--------+-------------------------+ | +------------------------+--------+-------------------------+ | |||
| Table 5: Initial contents of the GNAP Resource Set | Table 5: Initial Contents of the GNAP Resource Set | |||
| Registration Response Parameters Registry. | Registration Response Parameters Registry | |||
| 5.8. GNAP RS-Facing Discovery Document Fields | 5.8. GNAP RS-Facing Discovery Document Fields | |||
| This document defines a means to for a GNAP AS to be discovered by a | This document defines a means to for a GNAP AS to be discovered by a | |||
| GNAP RS, for which IANA is asked to create and maintain a new | GNAP RS, for which IANA has created and maintains a new registry | |||
| registry titled "GNAP RS-Facing Discovery Document Fields". Initial | titled "GNAP RS-Facing Discovery Document Fields". Initial values | |||
| values for this registry are given in Section 5.8.2. Future | for this registry are given in Section 5.8.2. Future assignments and | |||
| assignments and modifications to existing assignment are to be made | modifications to existing assignment are to be made through the | |||
| through the Expert Review registration policy [RFC8126]. | Expert Review registration policy [RFC8126]. | |||
| The Designated Expert (DE) is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.8.1. | * all registrations follow the template presented in Section 5.8.1. | |||
| * the field's definition is sufficiently orthogonal to other fields | * the field's definition is sufficiently orthogonal to other fields | |||
| defined in the registry so as avoid overlapping functionality. | defined in the registry so as avoid overlapping functionality. | |||
| * the field's definition specifies the syntax and semantics of the | * the field's definition specifies the syntax and semantics of the | |||
| fields in sufficient detail to allow for RS to be able to | fields in sufficient detail to allow for the RS to be able to | |||
| communicate with the AS. | communicate with the AS. | |||
| 5.8.1. Registry Template | 5.8.1. Registry Template | |||
| Name The name of the field. | Name: The name of the field. | |||
| Type: The JSON data type of the field value. | ||||
| Type The JSON data type of the field value. | Reference: The specification that defines the field. | |||
| Reference The specification that defines the field. | ||||
| 5.8.2. Initial Registry Contents | 5.8.2. Initial Registry Contents | |||
| The table below contains the initial contents of the GNAP RS-Facing | The table below contains the initial contents of the "GNAP RS-Facing | |||
| Discovery Registry. | Discovery Document Fields" registry. | |||
| +================================+==========+=============+ | +================================+==========+=============+ | |||
| | Name | Type | Reference | | | Name | Type | Reference | | |||
| +================================+==========+=============+ | +================================+==========+=============+ | |||
| | introspection_endpoint | string | Section 3.1 | | | introspection_endpoint | string | Section 3.1 | | |||
| | | | of RFC xxxx | | | | | of RFC 9767 | | |||
| +--------------------------------+----------+-------------+ | +--------------------------------+----------+-------------+ | |||
| | token_formats_supported | array of | Section 3.1 | | | token_formats_supported | array of | Section 3.1 | | |||
| | | strings | of RFC xxxx | | | | strings | of RFC 9767 | | |||
| +--------------------------------+----------+-------------+ | +--------------------------------+----------+-------------+ | |||
| | resource_registration_endpoint | string | Section 3.1 | | | resource_registration_endpoint | string | Section 3.1 | | |||
| | | | of RFC xxxx | | | | | of RFC 9767 | | |||
| +--------------------------------+----------+-------------+ | +--------------------------------+----------+-------------+ | |||
| | grant_request_endpoint | string | Section 3.1 | | | grant_request_endpoint | string | Section 3.1 | | |||
| | | | of RFC xxxx | | | | | of RFC 9767 | | |||
| +--------------------------------+----------+-------------+ | +--------------------------------+----------+-------------+ | |||
| | key_proofs_supported | array of | Section 3.1 | | | key_proofs_supported | array of | Section 3.1 | | |||
| | | strings | of RFC xxxx | | | | strings | of RFC 9767 | | |||
| +--------------------------------+----------+-------------+ | +--------------------------------+----------+-------------+ | |||
| Table 6: Initial contents of the GNAP RS-Facing | Table 6: Initial Contents of the GNAP RS-Facing | |||
| Discovery Document Fields Registry. | Discovery Document Fields Registry | |||
| 5.9. GNAP RS-Facing Error Codes | 5.9. GNAP RS-Facing Error Codes | |||
| This document defines a set of errors that the AS can return to the | This document defines a set of errors that the AS can return to the | |||
| RS, for which IANA is asked to create and maintain a new registry | RS, for which IANA has created and maintains a new registry titled | |||
| titled "GNAP RS-Facing Error Codes". Initial values for this | "GNAP RS-Facing Error Codes". Initial values for this registry are | |||
| registry are given in Section 5.9.2. Future assignments and | given in Section 5.9.2. Future assignments and modifications to | |||
| modifications to existing assignment are to be made through the | existing assignments are to be made through the Specification | |||
| Specification Required registration policy [RFC8126]. | Required registration policy [RFC8126]. | |||
| The DE is expected to ensure that: | The DE is expected to ensure that: | |||
| * all registrations follow the template presented in Section 5.9.1. | * all registrations follow the template presented in Section 5.9.1. | |||
| * the error response is sufficiently unique from other errors to | * the error response is sufficiently unique from other errors to | |||
| provide actionable information to the client instance. | provide actionable information to the client instance. | |||
| * the definition of the error response specifies all conditions in | * the definition of the error response specifies all conditions in | |||
| which the error response is returned, and what the client | which the error response is returned and what the client | |||
| instance's expected action is. | instance's expected action is. | |||
| 5.9.1. Registration Template | 5.9.1. Registration Template | |||
| Error: | Error: A unique string code for the error. | |||
| A unique string code for the error. | Reference: Reference to the document(s) that specifies the value, | |||
| preferably including a URI that can be used to retrieve a copy of | ||||
| Specification document(s): | the document(s). An indication of the relevant sections may also | |||
| Reference to the document(s) that specify the value, preferably | be included but is not required. | |||
| including a URI that can be used to retrieve a copy of the | ||||
| document(s). An indication of the relevant sections may also be | ||||
| included but is not required. | ||||
| 5.9.2. Initial Contents | 5.9.2. Initial Contents | |||
| +=========================+===========================+ | +=========================+=========================+ | |||
| | Error | Specification document(s) | | | Error | Reference | | |||
| +=========================+===========================+ | +=========================+=========================+ | |||
| | invalid_request | Section 3.5 of RFC xxxx | | | invalid_request | Section 3.5 of RFC 9767 | | |||
| +-------------------------+---------------------------+ | +-------------------------+-------------------------+ | |||
| | invalid_resource_server | Section 3.5 of RFC xxxx | | | invalid_resource_server | Section 3.5 of RFC 9767 | | |||
| +-------------------------+---------------------------+ | +-------------------------+-------------------------+ | |||
| | invalid_access | Section 3.5 of RFC xxxx | | | invalid_access | Section 3.5 of RFC 9767 | | |||
| +-------------------------+---------------------------+ | +-------------------------+-------------------------+ | |||
| Table 7: Initial contents of the GNAP RS-Facing | Table 7: Initial Contents of the GNAP RS-Facing | |||
| Error Codes Registry. | Error Codes Registry | |||
| 6. Security Considerations | 6. Security Considerations | |||
| In addition to the normative requirements in this document and in | In addition to the normative requirements in this document and in | |||
| [GNAP], implementers are strongly encouraged to consider these | [GNAP], implementers are strongly encouraged to consider the | |||
| additional security considerations in implementations and deployments | following additional security considerations in implementations and | |||
| of GNAP. | deployments of GNAP. | |||
| 6.1. TLS Protection in Transit | 6.1. TLS Protection in Transit | |||
| All requests in GNAP made over untrusted network connections have to | All requests in GNAP made over untrusted network connections have to | |||
| be made over TLS as outlined in [BCP195] to protect the contents of | be made over TLS as outlined in [BCP195] to protect the contents of | |||
| the request and response from manipulation and interception by an | the request and response from manipulation and interception by an | |||
| attacker. This includes all requests from a client instance to the | attacker. This includes all requests from a client instance to the | |||
| RS and all requests from the RS to an AS. | RS and all requests from the RS to an AS. | |||
| 6.2. Token Validation | 6.2. Token Validation | |||
| skipping to change at page 35, line 34 ¶ | skipping to change at line 1575 ¶ | |||
| stateless tokens such as those described in Section 2.2, this | stateless tokens such as those described in Section 2.2, this | |||
| consists of actions such as validating the token's signature and | consists of actions such as validating the token's signature and | |||
| ensuring the relevant fields and results are appropriate for the | ensuring the relevant fields and results are appropriate for the | |||
| request being made. For reference-style tokens or tokens that are | request being made. For reference-style tokens or tokens that are | |||
| otherwise opaque to the RS, the token introspection RS-facing API can | otherwise opaque to the RS, the token introspection RS-facing API can | |||
| be used to provide updated information about the state of the token, | be used to provide updated information about the state of the token, | |||
| as described in Section 3.3. | as described in Section 3.3. | |||
| The RS needs to validate that a token: | The RS needs to validate that a token: | |||
| * Is intended for this RS (audience restriction) | * is intended for this RS (audience restriction) | |||
| * Is presented using the appropriate key for the token (see also | * is presented using the appropriate key for the token (see also | |||
| Section 6.4) | Section 6.4) | |||
| * Identifies an appropriate subject to access the resource (usually | * identifies an appropriate subject to access the resource (usually | |||
| this is the resource owner who authorized the token's issuance) | this is the resource owner who authorized the token's issuance) | |||
| * Is issued by a trusted AS for this resource | * is issued by a trusted AS for this resource | |||
| Even though key proofing mechanisms have to cover the value of the | Even though key proofing mechanisms have to cover the value of the | |||
| token, validating the key proofing alone is not sufficient to protect | token, validating the key proofing alone is not sufficient to protect | |||
| a request to an RS. If an RS validates only the presentation method | a request to an RS. If an RS validates only the presentation method | |||
| as described in Section 6.4 without validating the token itself, an | as described in Section 6.4 without validating the token itself, an | |||
| attacker could use a compromised key or a confused deputy to make | attacker could use a compromised key or a confused deputy to make | |||
| arbitrary calls to the RS beyond what has been authorized by the RO. | arbitrary calls to the RS beyond what has been authorized by the RO. | |||
| 6.3. Caching Token Validation Result | 6.3. Caching Token Validation Result | |||
| Since token validation can be an expensive process, requiring either | Since token validation can be an expensive process, requiring either | |||
| cryptographic operations or network calls to an introspection service | cryptographic operations or network calls to an introspection service | |||
| as described in Section 3.3, an RS could cache the results of token | as described in Section 3.3, an RS could cache the results of token | |||
| validation for a particular token. The trade offs of using a cached | validation for a particular token. The trade-off for using a cached | |||
| validation for a token present an important decision space for | validation for a token presents an important decision space for | |||
| implementers: relying on a cached validation result increases | implementers: relying on a cached validation result increases | |||
| performance and lowers processing overhead, but it comes at the | performance and lowers processing overhead, but it comes at the | |||
| expense of the liveness and accuracy of the information in the cache. | expense of the liveness and accuracy of the information in the cache. | |||
| While a cached value is in use at the RS, an attacker could present a | While a cached value is in use at the RS, an attacker could present a | |||
| revoked token and have it accepted by the RS. | revoked token and have it accepted by the RS. | |||
| As with any cache, the consistency of this cache can be managed in a | As with any cache, the consistency of this cache can be managed in a | |||
| variety of ways. One of the most simple methods is managing the | variety of ways. One of the most simple methods is managing the | |||
| lifetime of the cache in order to balance the performance and | lifetime of the cache in order to balance the performance and | |||
| security properties. Too long of a cache, and an attacker has a | security properties. If the cache is too long, an attacker has a | |||
| larger window in which to use a revoked token. Too short of a window | larger window in which to use a revoked token. If the window is too | |||
| and the benefits of using the cache are diminished. It is also | short, the benefits of using the cache are diminished. It is also | |||
| possible that an AS could send a proactive signal to the RS to | possible that an AS could send a proactive signal to the RS to | |||
| invalidate revoked access tokens, though such a mechanism is outside | invalidate revoked access tokens, though such a mechanism is outside | |||
| the scope of this specification. | the scope of this specification. | |||
| 6.4. Key Proof Validation | 6.4. Key Proof Validation | |||
| For key-bound access tokens, the proofing method needs to be | For key-bound access tokens, the proofing method needs to be | |||
| validated alongside the value of the token itself as described in | validated alongside the value of the token itself, as described in | |||
| Section 6.2. The process of validation is defined by the key | Section 6.2. The process of validation is defined by the key | |||
| proofing method, as described in Section 7.3 of [GNAP]. | proofing method, as described in Section 7.3 of [GNAP]. | |||
| If the proofing method is not validated, an attacker could use a | If the proofing method is not validated, an attacker could use a | |||
| compromised token without access to the token's bound key. | compromised token without access to the token's bound key. | |||
| The RS also needs to ensure that the proofing method is appropriate | The RS also needs to ensure that the proofing method is appropriate | |||
| for the key associated with the token, including any choice of | for the key associated with the token, including any choice of | |||
| algorithm or identifiers. | algorithm or identifiers. | |||
| skipping to change at page 37, line 9 ¶ | skipping to change at line 1645 ¶ | |||
| Since the RS sees the token value, it is possible for a compromised | Since the RS sees the token value, it is possible for a compromised | |||
| RS to leak that value to an attacker. As such, the RS needs to | RS to leak that value to an attacker. As such, the RS needs to | |||
| protect token values as sensitive information and protect them from | protect token values as sensitive information and protect them from | |||
| exfiltration. | exfiltration. | |||
| This is especially problematic with bearer tokens and tokens bound to | This is especially problematic with bearer tokens and tokens bound to | |||
| a shared key, since an RS has access to all information necessary to | a shared key, since an RS has access to all information necessary to | |||
| create a new, valid request using the token in question. | create a new, valid request using the token in question. | |||
| 6.6. Token Re-Use by an RS | 6.6. Token Reuse by an RS | |||
| If the access token is a bearer token, or the RS has access to the | If the access token is a bearer token, or the RS has access to the | |||
| key material needed to present the token, the RS could be tricked | key material needed to present the token, the RS could be tricked | |||
| into re-using an access token presented to it by a client. While it | into reusing an access token presented to it by a client. While it | |||
| is possible to build a system that makes use of this artifact as a | is possible to build a system that makes use of this artifact as a | |||
| feature, it is safer to exchange the incoming access token for | feature, it is safer to exchange the incoming access token for | |||
| another contextual token for use by the RS, as described in | another contextual token for use by the RS, as described in | |||
| Section 4. This access token can be bound to the RS's own keys and | Section 4. This access token can be bound to the RS's own keys and | |||
| limited to access needed by the RS, instead of the full set of rights | limited to access needed by the RS, instead of the full set of rights | |||
| associated with the token issued to the client instance. | associated with the token issued to the client instance. | |||
| 6.7. Token Format Considerations | 6.7. Token Format Considerations | |||
| With formatted tokens, the format of the token is likely to have its | With formatted tokens, the format of the token is likely to have its | |||
| own considerations, and the RS needs to follow any such | own considerations, and the RS needs to follow any such | |||
| considerations during the token validation process. The application | considerations during the token validation process. The application | |||
| and scope of these considerations is specific to the format and | and scope of these considerations is specific to the format and | |||
| outside the scope of this specification. | outside the scope of this specification. | |||
| 6.8. Over-sharing Token Contents | 6.8. Oversharing Token Contents | |||
| The contents of the access token model divulge to the RS information | The contents of the access token model divulge information about the | |||
| about the access token's context and rights. This is true whether | access token's context and rights to the RS. This is true whether | |||
| the contents are parsed from the token itself or sent in an | the contents are parsed from the token itself or sent in an | |||
| introspection response. | introspection response. | |||
| It's likely that every RS does not need to know all details of the | It's likely that every RS does not need to know all details of the | |||
| token model, especially in systems where a single access token is | token model, especially in systems where a single access token is | |||
| usable across multiple RS's. An attacker could use this to gain | usable across multiple RSs. An attacker could use this to gain | |||
| information about the larger system by compromising only one RS. By | information about the larger system by compromising only one RS. By | |||
| limiting the information available to only that which is relevant to | limiting the information available to only that which is relevant to | |||
| a specific RS, such as using a limited introspection reply as defined | a specific RS, such as using a limited introspection reply as defined | |||
| in Section 3.3, a system can follow the principle of least disclosure | in Section 3.3, a system can follow the principle of least disclosure | |||
| to each RS. | to each RS. | |||
| 6.9. Resource References | 6.9. Resource References | |||
| Resource references, as returned by the protocol in Section 3.4, are | Resource references, as returned by the protocol in Section 3.4, are | |||
| intended to be opaque to both the RS and the client. However, since | intended to be opaque to both the RS and the client. However, since | |||
| they are under the control of the AS, the AS can put whatever content | they are under the control of the AS, the AS can put whatever content | |||
| it wants into the reference value. This value could unintentionally | it wants into the reference value. This value could unintentionally | |||
| disclose system structure or other internal details if it processed | disclose system structure or other internal details if it was | |||
| by an unintended party. Furthermore, such patterns could lead to the | processed by an unintended party. Furthermore, such patterns could | |||
| client software and RS depending on certain structures being present | lead to the client software and RS depending on certain structures | |||
| in the reference value, which diminishes the separation of concerns | being present in the reference value, which diminishes the separation | |||
| of the different roles in a GNAP system. | of concerns of the different roles in a GNAP system. | |||
| To mitigate this, the AS should only use fully random or encrypted | To mitigate this, the AS should only use fully random or encrypted | |||
| values for resource references. | values for resource references. | |||
| 6.10. Token Re-Issuance From an Untrusted AS | 6.10. Token Reissuance from an Untrusted AS | |||
| It is possible for an attacker's client instance to issue its own | It is possible for an attacker's client instance to issue its own | |||
| tokens to another client instance, acting as an AS that the second | tokens to another client instance, acting as an AS that the second | |||
| client instance has chosen to trust. If the token is a bearer token | client instance has chosen to trust. If the token is a bearer token | |||
| or the re-issuance is bound using an AS-provided key, the target | or the reissuance is bound using an AS-provided key, the target | |||
| client instance will not be able to tell that the token was | client instance will not be able to tell that the token was | |||
| originally issued by the valid AS. This process allows an attacker | originally issued by the valid AS. This process allows an attacker | |||
| to insert their own session and rights into an unsuspecting client | to insert their own session and rights into an unsuspecting client | |||
| instance, in the guise of a token valid for the attacker that appears | instance in the guise of a valid token for the attacker that appears | |||
| to have been issued to the target client instance on behalf of its | to have been issued to the target client instance on behalf of its | |||
| own RO. | own RO. | |||
| This attack is predicated on a misconfiguration with the targeted | This attack is predicated on a misconfiguration with the targeted | |||
| client, as it has been configured to get tokens from the attacker's | client, as it has been configured to get tokens from the attacker's | |||
| AS and use those tokens with the target RS, which has no association | AS and use those tokens with the target RS, which has no association | |||
| with the attacker's AS. However, since the token is ultimately | with the attacker's AS. However, since the token is ultimately | |||
| coming from the trusted AS, and is being presented with a valid key, | coming from the trusted AS and is being presented with a valid key, | |||
| the RS has no way of telling that the token was passed through an | the RS has no way of telling that the token was passed through an | |||
| intermediary. | intermediary. | |||
| To mitigate this, the RS can publish its association with the trusted | To mitigate this, the RS can publish its association with the trusted | |||
| AS through either discovery or documentation. Therefore, a client | AS through either discovery or documentation. Therefore, a client | |||
| properly following this association would only go directly to the | properly following this association would only go directly to the | |||
| trusted RS directly for access tokens for the RS. | trusted RS for access tokens for the RS. | |||
| Furthermore, limiting the use of bearer tokens and AS-provided keys | Furthermore, limiting the use of bearer tokens and AS-provided keys | |||
| to only highly trusted AS's and limited circumstances prevents the | to only highly trusted ASs in certain circumstances prevents the | |||
| attacker from being able to willingly exfiltrate their token to an | attacker from being able to willingly exfiltrate their token to an | |||
| unsuspecting client instance. | unsuspecting client instance. | |||
| 6.11. Introspection of Token Keys | 6.11. Introspection of Token Keys | |||
| The introspection response defined in Section 3.3 provides a means | The introspection response defined in Section 3.3 provides a means | |||
| for the AS to tell the RS the key material needed to validate the key | for the AS to tell the RS what key material is needed to validate the | |||
| proof of the request. Capture of the introspection response can | key proof of the request. Capture of the introspection response can | |||
| expose these security keys to an attacker. In the case of asymmetric | expose these security keys to an attacker. In the case of asymmetric | |||
| cryptography, only the public key is exposed, and the token cannot be | cryptography, only the public key is exposed, and the token cannot be | |||
| re-used by the attacker based on this result alone. This could | reused by the attacker based on this result alone. This could | |||
| potentially divulge information about the client instance that was | potentially divulge information about the client instance that was | |||
| unknown otherwise. | unknown otherwise. | |||
| If an access token is bound to a symmetric key, the RS will need | If an access token is bound to a symmetric key, the RS will need | |||
| access to the full key value in order to validate the key proof of | access to the full key value in order to validate the key proof of | |||
| the request, as described in Section 6.4. However, divulging the key | the request, as described in Section 6.4. However, divulging the key | |||
| material to the RS also gives the RS the ability to create a new | material to the RS also gives the RS the ability to create a new | |||
| request with the token. In this circumstance, the RS is under | request with the token. In this circumstance, the RS is under | |||
| similar risk of token exfiltration and re-use as a bearer token, as | similar risk of token exfiltration and reuse as a bearer token, as | |||
| described in Section 6.6. Consequently, symmetric keys should only | described in Section 6.6. Consequently, symmetric keys should only | |||
| be used in systems where the RS can be fully trusted to not create a | be used in systems where the RS can be fully trusted to not create a | |||
| new request with tokens presented to it. | new request with tokens presented to it. | |||
| 6.12. RS Registration and Management | 6.12. RS Registration and Management | |||
| Most functions of the RS-facing API in Section 3 are protected by | Most functions of the RS-facing API in Section 3 are protected by | |||
| requiring the RS to present proof of a signing key along with the | requiring the RS to present proof of a signing key along with the | |||
| request, in order to identify the RS making the call, potentially | request, in order to identify the RS making the call, potentially | |||
| coupled with an AS-specific access token. This practice allows the | coupled with an AS-specific access token. This practice allows the | |||
| AS to differentially respond to API calls to different RS's, such as | AS to differentially respond to API calls to different RSs, such as | |||
| answering introspection calls with only the access rights relevant to | answering introspection calls with only the access rights relevant to | |||
| a given RS instead of all access rights an access token could be good | a given RS instead of all access rights an access token could be good | |||
| for. | for. | |||
| While the means by which an RS and its keys become known to the AS is | While the means by which an RS and its keys become known to the AS is | |||
| out of scope for this specification, it is anticipated that common | out of scope for this specification, it is anticipated that common | |||
| practice will be to statically register an RS, allowing it to protect | practice will be to statically register an RS, allowing it to protect | |||
| specific resources or certain classes of resources. Fundamentally, | specific resources or certain classes of resources. Fundamentally, | |||
| the RS can only offer the resources that it serves. However, a rogue | the RS can only offer the resources that it serves. However, a rogue | |||
| AS could attempt to register a set of resources that mimics a | AS could attempt to register a set of resources that mimics a | |||
| different RS in order to solicit an access token usable at the target | different RS in order to solicit an access token that is usable at | |||
| RS. If the access token is a bearer token or is bound to a symmetric | the target RS. If the access token is a bearer token or is bound to | |||
| key that is known to the RS, then the attacker's RS gains the ability | a symmetric key that is known to the RS, then the attacker's RS gains | |||
| and knowledge needed to use that token elsewhere. | the ability and knowledge needed to use that token elsewhere. | |||
| In some ecosystems, dynamic registration of an RS and its associated | In some ecosystems, dynamic registration of an RS and its associated | |||
| resources is feasible. In such systems, the identity of the RS could | resources is feasible. In such systems, the identity of the RS could | |||
| be conveyed by a URI passed in the location field of an access rights | be conveyed by a URI passed in the location field of an access rights | |||
| request, thereby allowing the AS to limit the view the RS has into | request, thereby allowing the AS to limit the view the RS has into | |||
| the larger system. | the larger system. | |||
| 7. Privacy Considerations | 7. Privacy Considerations | |||
| 7.1. Token Contents | 7.1. Token Contents | |||
| The contents of the access token could potentially contain personal | The contents of the access token could potentially contain personal | |||
| information about the end-user, RO, or other parties. This is true | information about the end user, RO, or other parties. This is true | |||
| whether the contents are parsed from the token itself or sent in an | whether the contents are parsed from the token itself or sent in an | |||
| introspection response. | introspection response. | |||
| While an RS will sometimes need this information for processing, it's | While an RS will sometimes need this information for processing, it's | |||
| often the case that an RS is exposed to these details only in | often the case that an RS is exposed to these details only in | |||
| passing, and not intentionally. For example, consider a client that | passing, and not intentionally. For example, consider a client that | |||
| is issued an access token that is usable for both medical and non- | has been issued an access token that is usable for both medical and | |||
| medical APIs. If this access token contains a medical record number | non-medical APIs. If this access token contains a medical record | |||
| to facilitate the RS serving the medical API, then any RS for a non- | number to facilitate the RS serving the medical API, then any RS for | |||
| medical API would also learn the user's medical record number in the | a non-medical API would also learn the user's medical record number | |||
| process, even though that API has no need to make such a correlation. | in the process, even though that API has no need to make such a | |||
| correlation. | ||||
| To mitigate this, a formatted token could contain separate sections | To mitigate this, a formatted token could contain separate sections | |||
| targeted to different RS's to segregate data. Alternatively, token | targeted to different RSs to segregate data. Alternatively, token | |||
| introspection can be used to limit the data returned to each RS, as | introspection can be used to limit the data returned to each RS, as | |||
| defined in Section 3.3. | defined in Section 3.3. | |||
| 7.2. Token Use Disclosure through Introspection | 7.2. Token Use Disclosure through Introspection | |||
| When introspection is used by an RS, the AS is made aware of a | When introspection is used by an RS, the AS is made aware of a | |||
| particular token being used at a particular RS. When the RS is a | particular token being used at a particular RS. When the RS is a | |||
| separate system, the AS would not otherwise have insight into this | separate system, the AS would not otherwise have insight into this | |||
| action. This can potentially lead to the AS learning about patterns | action. This can potentially lead to the AS learning about patterns | |||
| and actions of particular end users by watching which RS's are | and actions of particular end users by watching which RSs are | |||
| accessed and when. | accessed and when. | |||
| 7.3. Mapping a User to an AS | 7.3. Mapping a User to an AS | |||
| When the client instance receives information about the protecting AS | When the client instance receives information about the protecting AS | |||
| from an RS, this can be used to derive information about the | from an RS, it can be used to derive information about the resources | |||
| resources being protected without releasing the resources themselves. | being protected without releasing the resources themselves. For | |||
| For example, if a medical record is protected by a personal AS, an | example, if a medical record is protected by a personal AS, an | |||
| untrusted client could call an RS to discover the location of the AS | untrusted client could call an RS to discover the location of the AS | |||
| protecting the record. Since the AS is tied strongly to a single RO, | protecting the record. Since the AS is tied strongly to a single RO, | |||
| the untrusted and unauthorized client software can gain information | the untrusted and unauthorized client software can gain information | |||
| about the resource being protected without accessing the record | about the resource being protected without accessing the record | |||
| itself. | itself. | |||
| 8. Acknowledgements | 8. References | |||
| The editors would like to thank the feedback of the following | ||||
| individuals for their reviews, implementations, and contributions: | ||||
| Aaron Parecki, Adrian Gropper, Andrii Deinega, Annabelle Backman, | ||||
| Dmitry Barinov, Fabien Imbault, Florian Helmschmidt, George Fletcher, | ||||
| Justin Richer, Kathleen Moriarty, Leif Johansson, Mike Varley, Nat | ||||
| Sakimura, Takahiko Kawasaki, Yaron Sheffer. | ||||
| Finally, the editors want to acknowledge the immense contributions of | 8.1. Normative References | |||
| Aaron Parecki to the content of this document. We thank him for his | ||||
| insight, input, and hard work, without which GNAP would not have | ||||
| grown to what it is. | ||||
| 9. References | [BCP195] Best Current Practice 195, | |||
| <https://www.rfc-editor.org/info/bcp195>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| 9.1. Normative References | Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS | |||
| 1.1", BCP 195, RFC 8996, DOI 10.17487/RFC8996, March 2021, | ||||
| <https://www.rfc-editor.org/info/rfc8996>. | ||||
| [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | Sheffer, Y., Saint-Andre, P., and T. Fossati, | |||
| "Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
| Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
| (DTLS)", May 2015, | (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November | |||
| <https://www.rfc-editor.org/info/bcp195>. | 2022, <https://www.rfc-editor.org/info/rfc9325>. | |||
| [GNAP] Richer, J. and F. Imbault, "Grant Negotiation and | [GNAP] Richer, J., Ed. and F. Imbault, "Grant Negotiation and | |||
| Authorization Protocol", Work in Progress, Internet-Draft, | Authorization Protocol (GNAP)", RFC 9635, | |||
| draft-ietf-gnap-core-protocol-20, 19 March 2024, | DOI 10.17487/RFC9635, October 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-gnap- | <https://www.rfc-editor.org/info/rfc9635>. | |||
| core-protocol-20>. | ||||
| [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-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/rfc/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
| DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
| [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
| "Handling Long Lines in Content of Internet-Drafts and | "Handling Long Lines in Content of Internet-Drafts and | |||
| RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8792>. | <https://www.rfc-editor.org/info/rfc8792>. | |||
| 9.2. Informative References | 8.2. Informative References | |||
| [BISCUIT] "Biscuit Authorization", n.d., | [BISCUIT] Biscuit, "Biscuit Authorization", | |||
| <https://www.biscuitsec.org/>. | <https://www.biscuitsec.org/>. | |||
| [MACAROON] "Macaroons: Cookies with Contextual Caveats for | [MACAROON] Birgisson, A., Politz, J. G., Erlingsson, U., Taly, A., | |||
| Decentralized Authorization in the Cloud", 2014, | Vrable, M., and M. Lentczner, "Macaroons: Cookies with | |||
| <https://research.google/pubs/pub41892/>. | Contextual Caveats for Decentralized Authorization in the | |||
| Cloud", NDSS Symposium 2014, DOI 10.14722/ndss.2014.23212, | ||||
| February 2014, <https://www.ndss-symposium.org/ndss2014/ | ||||
| ndss-2014-programme/macaroons-cookies-contextual-caveats- | ||||
| decentralized-authorization-cloud/>. | ||||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [ZCAPLD] "Authorization Capabilities for Linked Data", 2023, | [ZCAPLD] Lemmer-Webber, C., Ed. and M. Sporny, Ed., "Authorization | |||
| Capabilities for Linked Data v0.3", W3C Draft Community | ||||
| Group Report, January 2023, | ||||
| <https://w3c-ccg.github.io/zcap-spec/>. | <https://w3c-ccg.github.io/zcap-spec/>. | |||
| Appendix A. Document History | Acknowledgements | |||
| * -09 | ||||
| - Updated description of well-known discovery endpoint. | ||||
| * -08 | ||||
| - Editorial and IANA updates based on review feedback. | ||||
| * -07 | ||||
| - Editorial updates based on review feedback. | ||||
| * -06 | ||||
| - Editorial updates based on review feedback. | ||||
| * -05 | ||||
| - Added discussion of access tokens used to call the RS-facing AS | ||||
| APIs. | ||||
| - Updated IANA sections to align with core (and each other). | ||||
| - Added IANA section on introspection requests. | ||||
| - Added error responses. | ||||
| - Added extended discussion on resource server registration | ||||
| practices. | ||||
| * -04 | ||||
| - Editorial cleanup. | ||||
| - Updated IANA requirements, including "specification required" | ||||
| registration. | ||||
| - Added privacy and security considerations. | ||||
| - Clarified and expanded token introspection request and | ||||
| response. | ||||
| - Clarified and expanded resource set registration request and | ||||
| response, include example of use of resource reference. | ||||
| - Updated discovery. | ||||
| - Allow optional tokens on RS-facing API requests. | ||||
| - Tighter controls over derived tokens. | ||||
| * -03 | ||||
| - Added token model. | ||||
| - Added IANA sections. | ||||
| * -02 | ||||
| - Editorial and formatting fixes. | ||||
| * -01 | ||||
| - Better described RS authentication. | ||||
| - Added access token format registry. | ||||
| - Filled out introspection protocol. | ||||
| - Filled out resource registration protocol. | ||||
| - Expanded RS-facing discovery mechanisms. | ||||
| - Moved client-facing RS response back to GNAP core document. | ||||
| * -00 | The editors would like to thank the following individuals for their | |||
| reviews, feedback, implementations, and contributions: Aaron Parecki, | ||||
| Adrian Gropper, Andrii Deinega, Annabelle Backman, Dmitry Barinov, | ||||
| Fabien Imbault, Florian Helmschmidt, George Fletcher, Justin Richer, | ||||
| Kathleen Moriarty, Leif Johansson, Mike Varley, Nat Sakimura, | ||||
| Takahiko Kawasaki, and Yaron Sheffer. | ||||
| - Extracted resource server section. | Additionally, the editors want to acknowledge the immense | |||
| contributions of Aaron Parecki to the content of this document. We | ||||
| thank him for his insight, input, and hard work, without which GNAP | ||||
| would not have grown to what it is. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Justin Richer (editor) | Justin Richer (editor) | |||
| Bespoke Engineering | Bespoke Engineering | |||
| Email: ietf@justin.richer.org | Email: ietf@justin.richer.org | |||
| URI: https://bspk.io/ | URI: https://bspk.io/ | |||
| Fabien Imbault | Fabien Imbault | |||
| acert.io | acert.io | |||
| Email: fabien.imbault@acert.io | Email: fabien.imbault@acert.io | |||
| URI: https://acert.io/ | URI: https://acert.io/ | |||
| End of changes. 248 change blocks. | ||||
| 665 lines changed or deleted | 584 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||