<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.21 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-gnap-core-protocol-09" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Grant Negotiation and Authorization Protocol</title>

    <author initials="J." surname="Richer" fullname="Justin Richer" role="editor">
      <organization>Bespoke Engineering</organization>
      <address>
        <email>ietf@justin.richer.org</email>
        <uri>https://bspk.io/</uri>
      </address>
    </author>
    <author initials="A." surname="Parecki" fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
        <uri>https://aaronparecki.com</uri>
      </address>
    </author>
    <author initials="F." surname="Imbault" fullname="Fabien Imbault">
      <organization>acert.io</organization>
      <address>
        <email>fabien.imbault@acert.io</email>
        <uri>https://acert.io/</uri>
      </address>
    </author>

    <date year="2022" month="March" day="06"/>

    <area>Security</area>
    <workgroup>GNAP</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>GNAP defines a mechanism for delegating authorization to a
piece of software, and conveying that delegation to the software. This
delegation can include access to a set of APIs as well as information
passed directly to the software.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>This protocol allows a piece of software, the client instance, to request delegated
authorization to resource servers and to request direct information. This delegation is
facilitated by an authorization server usually on
behalf of a resource owner. The end user operating the software may interact
with the authorization server to authenticate, provide consent, and
authorize the request.</t>

<t>The process by which the delegation happens is known as a grant, and
GNAP allows for the negotiation of the grant process
over time by multiple parties acting in distinct roles.</t>

<t>This specification focuses on the portions of the delegation process facing the client instance.
In particular, this specification defines interoperable methods for a client instance to request, negotiate,
and receive access to information facilitated by the authorization server.
This specification also discusses discovery mechanisms for the client instance to
configure itself dynamically.
The means for an authorization server and resource server to interoperate are
discussed in the companion document, <xref target="I-D.ietf-gnap-resource-servers"/>.</t>

<t>The focus of this protocol is to provide interoperability between the different
parties acting in each role, and is not to specify implementation details of each.
Where appropriate, GNAP may make recommendations about internal implementation
details, but these recommendations are to ensure the security of the overall
deployment rather than to be prescriptive in the implementation.</t>

<t>This protocol solves many of the same use cases as OAuth 2.0 <xref target="RFC6749"/>,
OpenID Connect <xref target="OIDC"/>, and the family of protocols that have grown up
around that ecosystem. However, GNAP is not an extension of OAuth 2.0
and is not intended to be directly compatible with OAuth 2.0. GNAP seeks to
provide functionality and solve use cases that OAuth 2.0 cannot easily
or cleanly address. <xref target="vs-oauth2"/> further details the protocol rationale compared to OAuth 2.0.
GNAP and OAuth 2.0 will likely exist in parallel
for many deployments, and considerations have been taken to facilitate
the mapping and transition from legacy systems to GNAP. Some examples
of these can be found in <xref target="example-oauth2"/>.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<t>This document contains non-normative examples of partial and complete HTTP messages, JSON structures, URIs, query components, keys, and other elements. Whenever possible, the document uses URI as a generic term, since it aligns with <xref target="RFC3986"/> recommendations and matches better with the intent that the identifier may be reachable through various/generic means (compared to URLs). Some examples use a single trailing backslash <spanx style="verb">\</spanx> to indicate line wrapping for long values, as per <xref target="RFC8792"/>. The <spanx style="verb">\</spanx> character and leading spaces on wrapped lines are not part of the value.</t>

</section>
<section anchor="roles"><name>Roles</name>

<t>The parties in GNAP perform actions under different roles.
Roles are defined by the actions taken and the expectations leveraged
on the role by the overall protocol.</t>

<figure><artwork><![CDATA[
+-------------+            +------------+
|             |            |            |
|Authorization|            |  Resource  |
|   Server    |            |   Server   |
|             |<--+   +--->|            |
+-------------+   |   |    +------------+
        +         |   |
        +         |   |
        +         |   |
        +         |   |
        +         |   |
        +      +----------+
        +      |  Client  |
        +      | Instance |
        +      +----------+
        +           +
        +           +
        +           +
+-----------+       +     +------------+
|           |       + + + |            |
|  Resource |             |    End     |
|   Owner   | ~ ~ ~ ~ ~ ~ |    User    |
|           |             |            |
+-----------+             +------------+

Legend

+ + + indicates interaction between a human and computer
----- indicates interaction between two pieces of software
~ ~ ~ indicates a potential equivalence or out-of-band
          communication between roles
]]></artwork></figure>

<dl>
  <dt>
Authorization Server (AS)  </dt>
  <dd>
    <t>server that grants delegated privileges to a particular instance of client software in the form of access tokens or other information (such as subject information).</t>
  </dd>
  <dt>
Client  </dt>
  <dd>
    <t>application that consumes resources from one or several RSs, possibly requiring access privileges from one or several ASs. The client is operated by the end user or it runs autonomously on behalf of a resource owner.
</t>

    <t>Example: a client can be a mobile application, a web application, etc.</t>

    <t>Note: this specification differentiates between a specific instance (the client instance, identified by its unique key) and the software running the instance (the client software). For some kinds of client software, there could be many instances of that software, each instance with a different key.</t>
  </dd>
  <dt>
Resource Server (RS)  </dt>
  <dd>
    <t>server that provides operations on protected resources, where operations require a valid access token issued by an AS.</t>
  </dd>
  <dt>
Resource Owner (RO)  </dt>
  <dd>
    <t>subject entity that may grant or deny operations on resources it has authority upon.
</t>

    <t>Note: the act of granting or denying an operation may be manual (i.e. through an interaction with a physical person) or automatic (i.e. through predefined organizational rules).</t>
  </dd>
  <dt>
End user  </dt>
  <dd>
    <t>natural person that operates a client instance.
</t>

    <t>Note: that natural person may or may not be the same entity as the RO.</t>
  </dd>
</dl>

<t>The design of GNAP does not assume any one deployment architecture,
but instead attempts to define roles that can be fulfilled in a number
of different ways for different use cases. As long as a given role fulfills
all of its obligations and behaviors as defined by the protocol, GNAP does
not make additional requirements on its structure or setup.</t>

<t>Multiple roles can be fulfilled by the same party, and a given party
can switch roles in different instances of the protocol. For example,
the RO and end user in many instances are the same person, where a user is
authorizing the client instance to act on their own behalf at the RS. In this case,
one party fulfills both of the RO and end-user roles, but the roles themselves
are still defined separately from each other to allow for other
use cases where they are fulfilled by different parties.</t>

<t>For another example,
in some complex scenarios, an RS receiving requests from one client instance can act as
a client instance for a downstream secondary RS in order to fulfill the
original request. In this case, one piece of software is both an
RS and a client instance from different perspectives, and it fulfills these
roles separately as far as the overall protocol is concerned.</t>

<t>A single role need not be deployed as a monolithic service. For example,
a client instance could have components that are installed on the end user's device as
well as a back-end system that it communicates with. If both of these
components participate in the delegation protocol, they are both considered
part of the client instance. If there are several copies of the client software
that run separately but all share the same key material, such as a
deployed cluster, then this cluster is considered a single client instance.</t>

<t>In these cases, the distinct components of what is considered a GNAP client instance
may use any number of different communication mechanisms between them, all of which
would be considered an implementation detail of the client instances and out of scope of GNAP.</t>

<t>For another example, an AS could likewise be built out of many constituent
components in a distributed architecture. The component that the client instance
calls directly could be different from the component that the
RO interacts with to drive consent, since API calls and user interaction
have different security considerations in many environments. Furthermore,
the AS could need to collect identity claims about the RO from one system
that deals with user attributes while generating access tokens at
another system that deals with security rights. From the perspective of
GNAP, all of these are pieces of the AS and together fulfill the
role of the AS as defined by the protocol. These pieces may have their own internal
communications mechanisms which are considered out of scope of GNAP.</t>

</section>
<section anchor="elements"><name>Elements</name>

<t>In addition to the roles above, the protocol also involves several
elements that are acted upon by the roles throughout the process.</t>

<dl>
  <dt>
Attribute  </dt>
  <dd>
    <t>characteristics related to a subject.</t>
  </dd>
  <dt>
Access Token  </dt>
  <dd>
    <t>a data artifact representing a set of rights and/or attributes.
</t>

    <t>Note: an access token can be first issued to an client instance (requiring authorization by the RO) and subsequently rotated.</t>
  </dd>
  <dt>
Grant  </dt>
  <dd>
    <t>(verb): to permit an instance of client software to receive some attributes at a specific time and valid for a specific duration and/or to exercise some set of delegated rights to access a protected resource (noun): the act of granting.</t>
  </dd>
  <dt>
Privilege  </dt>
  <dd>
    <t>right or attribute associated with a subject.
</t>

    <t>Note: the RO defines and maintains the rights and attributes associated to the protected resource, and might temporarily delegate some set of those privileges to an end user. This process is refered to as privilege delegation.</t>
  </dd>
  <dt>
Protected Resource  </dt>
  <dd>
    <t>protected API (Application Programming Interface) served by an RS and that can be accessed by a client, if and only if a valid access token is provided.
</t>

    <t>Note: to avoid complex sentences, the specification document may simply refer to "resource" instead of "protected resource".</t>
  </dd>
  <dt>
Right  </dt>
  <dd>
    <t>ability given to a subject to perform a given operation on a resource under the control of an RS.</t>
  </dd>
  <dt>
Subject  </dt>
  <dd>
    <t>person, organization or device. It decides whether and under which conditions its attributes can be disclosed to other parties.</t>
  </dd>
  <dt>
Subject Information  </dt>
  <dd>
    <t>statement asserted by an AS about a subject.</t>
  </dd>
</dl>

</section>
<section anchor="trust"><name>Trust relationships</name>

<t>GNAP defines its trust objective as: "the RO trusts the AS to ensure access validation and delegation of protected resources to end users, through third party clients."</t>

<t>This trust objective can be decomposed into trust relationships between software elements and roles, especially the pairs end user/RO, end user/client, client/AS, RS/RO, AS/RO, AS/RS. Trust of an agent by its pair can exist if the pair is informed that the agent has made a promise to follow the protocol in the past (e.g. pre-registration, uncompromised cryptographic components) or if the pair is able to infer by indirect means that the agent has made such a promise (e.g. a compliant client request). Each agent defines its own valuation function of promises given or received. Examples of such valuations can be the benefits from interacting with other agents (e.g. safety in client access, interoperability with identity standards), the cost of following the protocol (including its security and privacy requirements and recommendations), a ranking of promise importance (e.g. a policy decision made by the AS), the assessment of one's vulnerability or risk of not being able to defend against threats, etc. Those valuations may depend on the context of the request. For instance, the AS may decide to either take into account or discard hints provided by the client, the RS may refuse bearer tokens, etc. depending on the specific case in which GNAP is used. Some promises can be conditional of some previous interactions (e.g. repeated requests).</t>

<t>Looking back on each trust relationship:</t>

<t><list style="symbols">
  <t>end user/RO: this relationship exists only when the end user and the RO are different, in which case the end user needs some out of band mechanism of getting the RO consent (see <xref target="authorization"/>). GNAP generally assumes that humans can be authenticated thanks to identity protocols (for instance, through an id_token assertion in <xref target="request-subject"/>).</t>
  <t>end user/client: the client acts as a user agent. Depending on the technology used (browser, SPA, mobile application, IoT device, etc.), some interactions may or may not be possible (as described in <xref target="request-interact-start"/>). Client developers promise to implement requirements and generally some recommendations or best practices, so that the end users may confidently use their software. However, end users might also be facing some attacker's client software, without even realizing it.</t>
  <t>end user/AS: when the client supports it (see <xref target="response-interact"/>), the end user gets to interact with front-channel URIs provided by the AS. See <xref target="security-front-channel"/> for some considerations in trusting these interactions.</t>
  <t>client/AS: An honest AS may be facing an attacker's client (as discussed just above), or the reverse, and GNAP aims at making common attacks impractical. The core specification makes access tokens opaque to the client and defines the request/response scheme in detail, therefore avoiding extra trust hypotheses from this critical piece of software. Yet the AS may further define cryptographic attestations or optional rules to simplify the access of clients it already trusts, due to past behavior or organizational policies (see <xref target="request-client"/>).</t>
  <t>RS/RO: the RS promises it protects its resources from unauthorized access, and only accepts valid access tokens issued by a trusted AS. In case tokens are key bound, proper validation is expected from the RS.</t>
  <t>AS/RO: the AS is expected to follow the decisions made by the RO, either through interactive consent requests, repeated interactions or automated rules (as described in <xref target="sequence"/>). Privacy considerations aim to reduce the risk of an honest but too curious AS, or the consequences of an unexpected user data exposure.</t>
  <t>AS/RS: the AS promises to issue valid access tokens to legitimate client requests (i.e. after carrying out appropriate due diligence, as defined in the GNAP protocol). Some optional configurations are covered by <xref target="I-D.ietf-gnap-resource-servers"/>.</t>
</list></t>

<t>A global assumption made by GNAP is that authorization requests are security and privacy sensitive, and appropriate measures are respectively detailed in <xref target="security"/> and <xref target="privacy"/>.</t>

<t>A formal trust model is out of scope of this specification, but might be carried out thanks to <xref target="promise-theory"/>.</t>

</section>
<section anchor="sequence"><name>Sequences</name>

<t>GNAP can be used in a variety of ways to allow the core
delegation process to take place. Many portions of this process are
conditionally present depending on the context of the deployments,
and not every step in this overview will happen in all circumstances.</t>

<t>Note that a connection between roles in this process does not necessarily
indicate that a specific protocol message is sent across the wire
between the components fulfilling the roles in question, or that a
particular step is required every time. For example, for a client instance interested
in only getting subject information directly, and not calling an RS,
all steps involving the RS below do not apply.</t>

<t>In some circumstances,
the information needed at a given stage is communicated out of band
or is preconfigured between the components or entities performing
the roles. For example, one entity can fulfill multiple roles, and so
explicit communication between the roles is not necessary within the
protocol flow. Additionally some components may not be involved
in all use cases. For example, a client instance could be calling the
AS just to get direct user information and have no need to get
an access token to call an RS.</t>

<section anchor="sequence-overall"><name>Overall Protocol Sequence</name>

<t>The following diagram provides a general overview of GNAP, including many
different optional phases and connections. The diagrams in the following sections
provide views of GNAP under more specific circumstances.</t>

<figure><artwork><![CDATA[
    +------------+         +------------+
    | End user   | ~ ~ ~ ~ |  Resource  |
    |            |         | Owner (RO) |
    +------------+         +------------+
          +                       +
          +                       +
          (A)                     (B)
          +                       +
          +                       +
    +--------+                    +          +------------+
    | Client | (1)                +          |  Resource  |
    |Instance|                    +          |   Server   |
    |        |       +---------------+       |    (RS)    |
    |        |--(2)->| Authorization |       |            |
    |        |<-(3)--|     Server    |       |            |
    |        |       |      (AS)     |       |            |
    |        |--(4)->|               |       |            |
    |        |<-(5)--|               |       |            |
    |        |--------------(6)------------->|            |
    |        |       |               |   (7) |            |
    |        |<-------------(8)------------->|            |
    |        |--(9)->|               |       |            |
    |        |<-(10)-|               |       |            |
    |        |--------------(11)------------>|            |
    |        |       |               |  (12) |            |
    |        |-(13)->|               |       |            |
    |        |       |               |       |            |
    +--------+       +---------------+       +------------+

Legend
+ + + indicates a possible interaction with a human
----- indicates an interaction between protocol roles
~ ~ ~ indicates a potential equivalence or out-of-band
        communication between roles
]]></artwork></figure>

<t><list style="symbols">
  <t>(A) The end user interacts with the client instance to indicate a need for resources on
  behalf of the RO. This could identify the RS the client instance needs to call,
  the resources needed, or the RO that is needed to approve the
  request. Note that the RO and end user are often
  the same entity in practice, but GNAP makes no general assumption that they are.</t>
  <t>(1) The client instance determines what access is needed and which AS to approach for access. Note that
  for most situations, the client instance is pre-configured with which AS to talk to and which
  kinds of access it needs, but some more dynamic processes are discussed in
  <xref target="rs-request-without-token"/>.</t>
  <t>(2) The client instance <xref target="request">requests access at the AS</xref>.</t>
  <t>(3) The AS processes the request and determines what is needed to fulfill
  the request. (See <xref target="authorization"/>.)
  The AS sends its <xref target="response">response to the client instance</xref>.</t>
  <t>(B) If interaction is required, the
  AS <xref target="authorization">interacts with the RO</xref> to gather authorization.
  The interactive component of the AS can function
  using a variety of possible mechanisms including web page
  redirects, applications, challenge/response protocols, or
  other methods. The RO approves the request for the client instance
  being operated by the end user. Note that the RO and end user are often
  the same entity in practice, and many of GNAP's interaction methods allow
  the client instance to facilitate the end user interacting with the AS
  in order to fulfill the role of the RO.</t>
  <t>(4) The client instance <xref target="continue-request">continues the grant at the AS</xref>.</t>
  <t>(5) If the AS determines that access can be granted, it returns a
  <xref target="response">response to the client instance</xref> including an <xref target="response-token">access token</xref> for
  calling the RS and any <xref target="response-subject">directly returned information</xref> about the RO.</t>
  <t>(6) The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>(7) The RS determines if the token is sufficient for the request by
  examining the token. The means of the RS determining this access are
  out of scope of this specification, but some options are discussed in
  <xref target="I-D.ietf-gnap-resource-servers"/>.</t>
  <t>(8) The client instance <xref target="use-access-token">calls the RS</xref> using the access token
  until the RS or client instance determine that the token is no longer valid.</t>
  <t>(9) When the token no longer works, the client instance fetches an
  <xref target="rotate-access-token">updated access token</xref> based on the
  rights granted in (5).</t>
  <t>(10) The AS issues a <xref target="response-token">new access token</xref> to the client instance.</t>
  <t>(11) The client instance <xref target="use-access-token">uses the new access token</xref> to call the RS.</t>
  <t>(12) The RS determines if the new token is sufficient for the request.
  The means of the RS determining this access are
  out of scope of this specification, but some options are discussed in
  <xref target="I-D.ietf-gnap-resource-servers"/>.</t>
  <t>(13) The client instance <xref target="revoke-access-token">disposes of the token</xref> once the client instance
  has completed its access of the RS and no longer needs the token.</t>
</list></t>

<t>The following sections and <xref target="examples"/> contain specific guidance on how to use
GNAP in different situations and deployments. For example, it is possible for the
client instance to never request an access token and never call an RS, just as it is
possible for there not to be a user involved in the delegation process.</t>

</section>
<section anchor="sequence-redirect"><name>Redirect-based Interaction</name>

<t>In this example flow, the client instance is a web application that wants access to resources on behalf
of the current user, who acts as both the end user and the resource
owner (RO). Since the client instance is capable of directing the user to an arbitrary URI and
receiving responses from the user's browser, interaction here is handled through
front-channel redirects using the user's browser. The redirection URI used for interaction is
a service hosted by the AS in this example. The client instance uses a persistent session
with the user to ensure the same user that is starting the interaction is the user
that returns from the interaction.</t>

<figure><artwork><![CDATA[
+--------+                                  +--------+         +------+
| Client |                                  |   AS   |         | User |
|Instance|                                  |        |         |      |
|        |< (1) + Start Session + + + + + + + + + + + + + + + +|      |
|        |                                  |        |         |      |
|        |--(2)--- Request Access --------->|        |         |      |
|        |                                  |        |         |      |
|        |<-(3)-- Interaction Needed -------|        |         |      |
|        |                                  |        |         |      |
|        |+ (4) + Redirect for Interaction + + + + + + + + + > |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (5) +>|      |
|        |                                  |        |  AuthN  |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (6) +>|      |
|        |                                  |        |  AuthZ  |      |
|        |                                  |        |         |      |
|        |< (7) + Redirect for Continuation + + + + + + + + + +|      |
|        |                                  |        |         +------+
|        |--(8)--- Continue Request ------->|        |
|        |                                  |        |
|        |<-(9)----- Grant Access ----------|        |
|        |                                  |        |
|        |                                  |        |     +--------+
|        |--(10)-- Access API ---------------------------->|   RS   |
|        |                                  |        |     |        |
|        |<-(11)-- API Response ---------------------------|        |
|        |                                  |        |     +--------+
+--------+                                  +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance establishes a verifiable session to the user, in the role of the end user.</t>
  <t>The client instance <xref target="request">requests access to the resource</xref>. The client instance indicates that
 it can <xref target="request-interact-redirect">redirect to an arbitrary URI</xref> and
 <xref target="request-interact-callback-redirect">receive a redirect from the browser</xref>. The client instance
 stores verification information for its redirect in the session created
 in (1).</t>
  <t>The AS determines that interaction is needed and <xref target="response">responds</xref> with
 a <xref target="response-interact-redirect">URI to send the user to</xref> and
 <xref target="response-interact-finish">information needed to verify the redirect</xref> in (7).
 The AS also includes information the client instance will need to
 <xref target="response-continue">continue the request</xref> in (8). The AS associates this
 continuation information with an ongoing request that will be referenced in (4), (6), and (8).</t>
  <t>The client instance stores the verification and continuation information from (3) in the session from (1). The client instance
 then <xref target="interaction-redirect">redirects the user to the URI</xref> given by the AS in (3).
 The user's browser loads the interaction redirect URI. The AS loads the pending
 request based on the incoming URI generated in (3).</t>
  <t>The user authenticates at the AS, taking on the role of the RO.</t>
  <t>As the RO, the user authorizes the pending request from the client instance.</t>
  <t>When the AS is done interacting with the user, the AS
 <xref target="interaction-callback">redirects the user back</xref> to the
 client instance using the redirect URI provided in (2). The redirect URI is augmented with
 an interaction reference that the AS associates with the ongoing
 request created in (2) and referenced in (4). The redirect URI is also
 augmented with a hash of the security information provided
 in (2) and (3). The client instance loads the verification information from (2) and (3) from
 the session created in (1). The client instance <xref target="interaction-hash">calculates a hash</xref>
 based on this information and continues only if the hash validates.
 Note that the client instance needs to ensure that the parameters for the incoming
 request match those that it is expecting from the session created
 in (1). The client instance also needs to be prepared for the end user never being returned
 to the client instance and handle timeouts appropriately.</t>
  <t>The client instance loads the continuation information from (3) and sends the
 interaction reference from (7) in a request to
 <xref target="continue-after-interaction">continue the request</xref>. The AS
 validates the interaction reference ensuring that the reference
 is associated with the request being continued.</t>
  <t>If the request has been authorized, the AS grants access to the information
 in the form of <xref target="response-token">access tokens</xref> and
 <xref target="response-subject">direct subject information</xref> to the client instance.</t>
  <t>The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>The RS validates the access token and returns an appropriate response for the
API.</t>
</list></t>

<t>An example set of protocol messages for this method can be found in <xref target="example-auth-code"/>.</t>

</section>
<section anchor="sequence-user-code"><name>User-code Interaction</name>

<t>In this example flow, the client instance is a device that is capable of presenting a short,
human-readable code to the user and directing the user to enter that code at
a known URI. The URI the user enters the code at is an interactive service hosted by the
AS in this example. The client instance is not capable of presenting an arbitrary URI to the user,
nor is it capable of accepting incoming HTTP requests from the user's browser.
The client instance polls the AS while it is waiting for the RO to authorize the request.
The user's interaction is assumed to occur on a secondary device. In this example
it is assumed that the user is both the end user and RO, though the user is not assumed
to be interacting with the client instance through the same web browser used for interaction at
the AS.</t>

<figure><artwork><![CDATA[
+--------+                                  +--------+         +------+
| Client |                                  |   AS   |         | User |
|Instance|--(1)--- Request Access --------->|        |         |      |
|        |                                  |        |         |      |
|        |<-(2)-- Interaction Needed -------|        |         |      |
|        |                                  |        |         |      |
|        |+ (3) + + Display User Code + + + + + + + + + + + + >|      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (4) + |      |
|        |                                  |        |Open URI |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (5) +>|      |
|        |                                  |        |  AuthN  |      |
|        |--(9)--- Continue Request (A) --->|        |         |      |
|        |                                  |        |<+ (6) +>|      |
|        |<-(10)- Not Yet Granted (Wait) ---|        |  Code   |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (7) +>|      |
|        |                                  |        |  AuthZ  |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (8) +>|      |
|        |                                  |        |Completed|      |
|        |                                  |        |         |      |
|        |--(11)-- Continue Request (B) --->|        |         +------+
|        |                                  |        |
|        |<-(12)----- Grant Access ---------|        |
|        |                                  |        |
|        |                                  |        |     +--------+
|        |--(13)-- Access API ---------------------------->|   RS   |
|        |                                  |        |     |        |
|        |<-(14)-- API Response ---------------------------|        |
|        |                                  |        |     +--------+
+--------+                                  +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance <xref target="request">requests access to the resource</xref>. The client instance indicates that
 it can <xref target="request-interact-usercode">display a user code</xref>.</t>
  <t>The AS determines that interaction is needed and <xref target="response">responds</xref> with
 a <xref target="response-interact-usercode">user code to communicate to the user</xref>. This
 could optionally include a URI to direct the user to, but this URI should
 be static and so could be configured in the client instance's documentation.
 The AS also includes information the client instance will need to
 <xref target="response-continue">continue the request</xref> in (8) and (10). The AS associates this
 continuation information with an ongoing request that will be referenced in (4), (6), (8), and (10).</t>
  <t>The client instance stores the continuation information from (2) for use in (8) and (10). The client instance
 then <xref target="interaction-usercode">communicates the code to the user</xref> given by the AS in (2).</t>
  <t>The users directs their browser to the user code URI. This URI is stable and
 can be communicated via the client software's documentation, the AS documentation, or
 the client software itself. Since it is assumed that the RO will interact
 with the AS through a secondary device, the client instance does not provide a mechanism to
 launch the RO's browser at this URI.</t>
  <t>The end user authenticates at the AS, taking on the role of the RO.</t>
  <t>The RO enters the code communicated in (3) to the AS. The AS validates this code
against a current request in process.</t>
  <t>As the RO, the user authorizes the pending request from the client instance.</t>
  <t>When the AS is done interacting with the user, the AS
 indicates to the RO that the request has been completed.</t>
  <t>Meanwhile, the client instance loads the continuation information stored at (3) and
 <xref target="continue-request">continues the request</xref>. The AS determines which
 ongoing access request is referenced here and checks its state.</t>
  <t>If the access request has not yet been authorized by the RO in (6),
the AS responds to the client instance to <xref target="response-continue">continue the request</xref>
at a future time through additional polled continuation requests. This response can include
updated continuation information as well as information regarding how long the
client instance should wait before calling again. The client instance replaces its stored
continuation information from the previous response (2).
Note that the AS may need to determine that the RO has not approved
the request in a sufficient amount of time and return an appropriate
error to the client instance.</t>
  <t>The client instance continues to <xref target="continue-poll">poll the AS</xref> with the new
continuation information in (9).</t>
  <t>If the request has been authorized, the AS grants access to the information
in the form of <xref target="response-token">access tokens</xref> and
<xref target="response-subject">direct subject information</xref> to the client instance.</t>
  <t>The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>The RS validates the access token and returns an appropriate response for the
API.</t>
</list></t>

<t>An example set of protocol messages for this method can be found in <xref target="example-device"/>.</t>

</section>
<section anchor="sequence-async"><name>Asynchronous Authorization</name>

<t>In this example flow, the end user and RO roles are fulfilled by different parties, and
the RO does not interact with the client instance. The AS reaches out asynchronously to the RO
during the request process to gather the RO's authorization for the client instance's request.
The client instance polls the AS while it is waiting for the RO to authorize the request.</t>

<figure><artwork><![CDATA[
+--------+                                  +--------+         +------+
| Client |                                  |   AS   |         |  RO  |
|Instance|--(1)--- Request Access --------->|        |         |      |
|        |                                  |        |         |      |
|        |<-(2)-- Not Yet Granted (Wait) ---|        |         |      |
|        |                                  |        |<+ (3) +>|      |
|        |                                  |        |  AuthN  |      |
|        |--(6)--- Continue Request (A) --->|        |         |      |
|        |                                  |        |<+ (4) +>|      |
|        |<-(7)-- Not Yet Granted (Wait) ---|        |  AuthZ  |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (5) +>|      |
|        |                                  |        |Completed|      |
|        |                                  |        |         |      |
|        |--(8)--- Continue Request (B) --->|        |         +------+
|        |                                  |        |
|        |<-(9)------ Grant Access ---------|        |
|        |                                  |        |
|        |                                  |        |     +--------+
|        |--(10)-- Access API ---------------------------->|   RS   |
|        |                                  |        |     |        |
|        |<-(11)-- API Response ---------------------------|        |
|        |                                  |        |     +--------+
+--------+                                  +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance <xref target="request">requests access to the resource</xref>. The client instance does not
 send any interaction modes to the server, indicating that
 it does not expect to interact with the RO. The client instance can also signal
 which RO it requires authorization from, if known, by using the
 <xref target="request-user">user request section</xref>.</t>
  <t>The AS determines that interaction is needed, but the client instance cannot interact
 with the RO. The AS <xref target="response">responds</xref> with the information the client instance
 will need to <xref target="response-continue">continue the request</xref> in (6) and (8), including
 a signal that the client instance should wait before checking the status of the request again.
 The AS associates this continuation information with an ongoing request that will be
 referenced in (3), (4), (5), (6), and (8).</t>
  <t>The AS determines which RO to contact based on the request in (1), through a
 combination of the <xref target="request-user">user request</xref>, the
 <xref target="request-token">resources request</xref>, and other policy information. The AS
 contacts the RO and authenticates them.</t>
  <t>The RO authorizes the pending request from the client instance.</t>
  <t>When the AS is done interacting with the RO, the AS
 indicates to the RO that the request has been completed.</t>
  <t>Meanwhile, the client instance loads the continuation information stored at (2) and
 <xref target="continue-request">continues the request</xref>. The AS determines which
 ongoing access request is referenced here and checks its state.</t>
  <t>If the access request has not yet been authorized by the RO in (6),
 the AS responds to the client instance to <xref target="response-continue">continue the request</xref>
 at a future time through additional polling. This response can include
 refreshed credentials as well as information regarding how long the
 client instance should wait before calling again. The client instance replaces its stored
 continuation information from the previous response (2).
 Note that the AS may need to determine that the RO has not approved
 the request in a sufficient amount of time and return an appropriate
 error to the client instance.</t>
  <t>The client instance continues to <xref target="continue-poll">poll the AS</xref> with the new
 continuation information from (7).</t>
  <t>If the request has been authorized, the AS grants access to the information
 in the form of <xref target="response-token">access tokens</xref> and
 <xref target="response-subject">direct subject information</xref> to the client instance.</t>
  <t>The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>The RS validates the access token and returns an appropriate response for the
API.</t>
</list></t>

<t>An example set of protocol messages for this method can be found in <xref target="example-async"/>.</t>

</section>
<section anchor="sequence-no-user"><name>Software-only Authorization</name>

<t>In this example flow, the AS policy allows the client instance to make a call on its own behalf,
without the need for an RO to be involved at runtime to approve the decision.
Since there is no explicit RO, the client instance does not interact with an RO.</t>

<figure><artwork><![CDATA[
+--------+                            +--------+
| Client |                            |   AS   |
|Instance|--(1)--- Request Access --->|        |
|        |                            |        |
|        |<-(2)---- Grant Access -----|        |
|        |                            |        |  +--------+
|        |--(3)--- Access API ------------------->|   RS   |
|        |                            |        |  |        |
|        |<-(4)--- API Response ------------------|        |
|        |                            |        |  +--------+
+--------+                            +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance <xref target="request">requests access to the resource</xref>. The client instance does not
 send any interaction modes to the server.</t>
  <t>The AS determines that the request has been authorized,
 the AS grants access to the resource
 in the form of <xref target="response-token">access tokens</xref> to the client instance.
 Note that <xref target="response-subject">direct subject information</xref> is not
 generally applicable in this use case, as there is no user involved.</t>
  <t>The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>The RS validates the access token and returns an appropriate response for the
 API.</t>
</list></t>

<t>An example set of protocol messages for this method can be found in <xref target="example-no-user"/>.</t>

</section>
<section anchor="sequence-refresh"><name>Refreshing an Expired Access Token</name>

<t>In this example flow, the client instance receives an access token to access a resource server through
some valid GNAP process. The client instance uses that token at the RS for some time, but eventually
the access token expires. The client instance then gets a new access token by rotating the
expired access token at the AS using the token's management URI.</t>

<figure><artwork><![CDATA[
+--------+                                          +--------+
| Client |                                          |   AS   |
|Instance|--(1)--- Request Access ----------------->|        |
|        |                                          |        |
|        |<-(2)--- Grant Access --------------------|        |
|        |                                          |        |
|        |                             +--------+   |        |
|        |--(3)--- Access Resource --->|   RS   |   |        |
|        |                             |        |   |        |
|        |<-(4)--- Success Response ---|        |   |        |
|        |                             |        |   |        |
|        |                             |        |   |        |
|        |                             |        |   |        |
|        |--(5)--- Access Resource --->|        |   |        |
|        |                             |        |   |        |
|        |<-(6)--- Error Response -----|        |   |        |
|        |                             +--------+   |        |
|        |                                          |        |
|        |--(7)--- Rotate Token ------------------->|        |
|        |                                          |        |
|        |<-(8)--- Rotated Token -------------------|        |
|        |                                          |        |
+--------+                                          +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance <xref target="request">requests access to the resource</xref>.</t>
  <t>The AS <xref target="response">grants access to the resource</xref> with an
 <xref target="response-token">access token</xref> usable at the RS. The access token
 response includes a token management URI.</t>
  <t>The client instance <xref target="use-access-token">uses the access token</xref> to call the RS.</t>
  <t>The RS validates the access token and returns an appropriate response for the
 API.</t>
  <t>Time passes and the client instance uses the access token to call the RS again.</t>
  <t>The RS validates the access token and determines that the access token is expired.
 The RS responds to the client instance with an error.</t>
  <t>The client instance calls the token management URI returned in (2) to
 <xref target="rotate-access-token">rotate the access token</xref>. The client instance
 <xref target="use-access-token">uses the access token</xref> in this call as well as the appropriate key,
 see the token rotation section for details.</t>
  <t>The AS validates the rotation request including the signature
 and keys presented in (5) and returns a
 <xref target="response-token-single">new access token</xref>. The response includes
 a new access token and can also include updated token management
 information, which the client instance will store in place of the values
 returned in (2).</t>
</list></t>

</section>
<section anchor="sequence-user"><name>Requesting User Information</name>

<t>In this scenario, the client instance does not call an RS and does not
request an access token. Instead, the client instance only requests
and is returned <xref target="response-subject">direct subject information</xref>. Many different
interaction modes can be used in this scenario, so these are shown only in
the abstract as functions of the AS here.</t>

<figure><artwork><![CDATA[
+--------+                                  +--------+         +------+
| Client |                                  |   AS   |         | User |
|Instance|                                  |        |         |      |
|        |--(1)--- Request Access --------->|        |         |      |
|        |                                  |        |         |      |
|        |<-(2)-- Interaction Needed -------|        |         |      |
|        |                                  |        |         |      |
|        |+ (3) + Facilitate Interaction + + + + + + + + + + > |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (4) +>|      |
|        |                                  |        |  AuthN  |      |
|        |                                  |        |         |      |
|        |                                  |        |<+ (5) +>|      |
|        |                                  |        |  AuthZ  |      |
|        |                                  |        |         |      |
|        |< (6) + Signal Continuation + + + + + + + + + + + + +|      |
|        |                                  |        |         +------+
|        |--(7)--- Continue Request ------->|        |
|        |                                  |        |
|        |<-(8)----- Grant Access ----------|        |
|        |                                  |        |
+--------+                                  +--------+
]]></artwork></figure>

<t><list style="numbers">
  <t>The client instance <xref target="request">requests access to subject information</xref>.</t>
  <t>The AS determines that interaction is needed and <xref target="response">responds</xref> with
 appropriate information for <xref target="response-interact">facilitating user interaction</xref>.</t>
  <t>The client instance facilitates <xref target="authorization">the user interacting with the AS</xref> as directed in (2).</t>
  <t>The user authenticates at the AS, taking on the role of the RO.</t>
  <t>As the RO, the user authorizes the pending request from the client instance.</t>
  <t>When the AS is done interacting with the user, the AS
 returns the user to the client instance and signals continuation.</t>
  <t>The client instance loads the continuation information from (2) and
 calls the AS to <xref target="continue-request">continue the request</xref>.</t>
  <t>If the request has been authorized, the AS grants access to the requested
 <xref target="response-subject">direct subject information</xref> to the client instance.
 At this stage, the user is generally considered "logged in" to the client
 instance based on the identifiers and assertions provided by the AS.
 Note that the AS can restrict the subject information returned and it
 might not match what the client instance requested, see the section on
 subject information for details.</t>
</list></t>

</section>
</section>
</section>
<section anchor="request"><name>Requesting Access</name>

<t>To start a request, the client instance sends a <xref target="RFC8259">JSON</xref> document with an object as its root. Each
member of the request object represents a different aspect of the
client instance's request. Each field is described in detail in a section below.</t>

<dl>
  <dt>
<spanx style="verb">access_token</spanx> (object / array of objects):  </dt>
  <dd>
    <t>Describes the rights and properties associated with the requested access token. <bcp14>REQUIRED</bcp14> if requesting an access token. See <xref target="request-token"/>.</t>
  </dd>
  <dt>
<spanx style="verb">subject</spanx> (object):  </dt>
  <dd>
    <t>Describes the information about the RO that the client instance is requesting to be returned
  directly in the response from the AS. <bcp14>REQUIRED</bcp14> if requesting subject information. See <xref target="request-subject"/>.</t>
  </dd>
  <dt>
<spanx style="verb">client</spanx> (object / string):  </dt>
  <dd>
    <t>Describes the client instance that is making this request, including
  the key that the client instance will use to protect this request and any continuation
  requests at the AS and any user-facing information about the client instance used in
  interactions. <bcp14>REQUIRED</bcp14>. See <xref target="request-client"/>.</t>
  </dd>
  <dt>
<spanx style="verb">user</spanx> (object / string):  </dt>
  <dd>
    <t>Identifies the end user to the AS in a manner that the AS can verify, either directly or
  by interacting with the end user to determine their status as the RO. <bcp14>OPTIONAL</bcp14>. See <xref target="request-user"/>.</t>
  </dd>
  <dt>
<spanx style="verb">interact</spanx> (object):  </dt>
  <dd>
    <t>Describes the modes that the client instance supports for allowing the RO to interact with the
  AS and modes for the client instance to receive updates when interaction is complete. <bcp14>REQUIRED</bcp14> if interaction is supported. See <xref target="request-interact"/>.</t>
  </dd>
</dl>

<t>Additional members of this request object can be defined by extensions to this protocol
as described in <xref target="request-extending"/>.</t>

<t>A non-normative example of a grant request is below:</t>

<figure><artwork><![CDATA[
{
    "access_token": {
        "access": [
            {
                "type": "photo-api",
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "dolphin-metadata"
        ]
    },
    "client": {
      "display": {
        "name": "My Client Display Name",
        "uri": "https://example.net/client"
      },
      "key": {
        "proof": "httpsig",
        "jwk": {
          "kty": "RSA",
          "e": "AQAB",
          "kid": "xyz-1",
          "alg": "RS256",
          "n": "kOB5rR4Jv0GMeL...."
        }
      }
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return/123455",
            "nonce": "LKLTI25DK82FX4T4QFZC"
        }
    },
    "subject": {
        "sub_id_formats": ["iss_sub", "opaque"],
        "assertion_formats": ["id_token"]
    }
}
]]></artwork></figure>

<t>The request and response <bcp14>MUST</bcp14> be sent as a JSON object in the body of the HTTP
POST request with Content-Type <spanx style="verb">application/json</spanx>,
unless otherwise specified by the signature mechanism.</t>

<t>The authorization server <bcp14>MUST</bcp14> include the HTTP "Cache-Control" response header field <xref target="RFC7234"/> with a value set to "no-store".</t>

<section anchor="request-token"><name>Requesting Access to Resources</name>

<t>If the client instance is requesting one or more access tokens for the
purpose of accessing an API, the client instance <bcp14>MUST</bcp14> include an <spanx style="verb">access_token</spanx>
field. This field <bcp14>MUST</bcp14> be an object (for a <xref target="request-token-single">single access token</xref>) or
an array of these objects (for <xref target="request-token-multiple">multiple access tokens</xref>),
as described in the following sections.</t>

<section anchor="request-token-single"><name>Requesting a Single Access Token</name>

<t>To request a single access token, the client instance sends an <spanx style="verb">acccess_token</spanx> object
composed of the following fields.</t>

<dl>
  <dt>
<spanx style="verb">access</spanx> (array of objects/strings):  </dt>
  <dd>
    <t>Describes the rights that the client instance is requesting for one or more access tokens to be
  used at RS's. <bcp14>REQUIRED</bcp14>. See <xref target="resource-access-rights"/>.</t>
  </dd>
  <dt>
<spanx style="verb">label</spanx> (string):  </dt>
  <dd>
    <t>A unique name chosen by the client instance to refer to the resulting access token. The value of this
  field is opaque to the AS.  If this field
  is included in the request, the AS <bcp14>MUST</bcp14> include the same label in the <xref target="response-token">token response</xref>.
  <bcp14>REQUIRED</bcp14> if used as part of a <xref target="request-token-multiple">multiple access token request</xref>,
  <bcp14>OPTIONAL</bcp14> otherwise.</t>
  </dd>
  <dt>
<spanx style="verb">flags</spanx> (array of strings):  </dt>
  <dd>
    <t>A set of flags that indicate desired attributes or behavior to be attached to the access token by the
  AS. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>The values of the <spanx style="verb">flags</spanx> field defined by this specification are as follows:</t>

<dl>
  <dt>
<spanx style="verb">"bearer"</spanx>:  </dt>
  <dd>
    <t>If this flag is included, the access token being requested is a bearer token.
  If this flag is omitted, the access token is bound to the key used
  by the client instance in this request (or that key's most recent rotation)
  and the access token <bcp14>MUST</bcp14> be presented using the same key and proofing method.
  Methods for presenting bound and bearer access tokens are described
  in <xref target="use-access-token"/>. See <xref target="security-bearer-tokens"/> for additional
  considerations on the use of bearer tokens.</t>
  </dd>
  <dt>
<spanx style="verb">"split"</spanx>:  </dt>
  <dd>
    <t>If this flag is included, the client instance is capable of
  receiving a different number of tokens than specified in the
  <xref target="request-token">token request</xref>, including
  receiving <xref target="response-token-multiple">multiple access tokens</xref>
  in response to any <xref target="request-token-single">single token request</xref> or a
  different number of access tokens than requested in a <xref target="request-token-multiple">multiple access token request</xref>.
  The <spanx style="verb">label</spanx> fields of the returned additional tokens are chosen by the AS.
  The client instance <bcp14>MUST</bcp14> be able to tell from the token response where and
  how it can use each of the access tokens.
  [[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/37">See issue #37</eref> ]]</t>
  </dd>
</dl>

<t>Flag values <bcp14>MUST NOT</bcp14> be included more than once.</t>

<t>Additional flags can be defined by extensions using <xref target="IANA">a registry TBD</xref>.</t>

<t>In the following example, the client instance is requesting access to a complex resource
described by a pair of access request object.</t>

<figure><artwork><![CDATA[
"access_token": {
    "access": [
        {
            "type": "photo-api",
            "actions": [
                "read",
                "write",
                "delete"
            ],
            "locations": [
                "https://server.example.net/",
                "https://resource.local/other"
            ],
            "datatypes": [
                "metadata",
                "images"
            ]
        },
        {
            "type": "walrus-access",
            "actions": [
                "foo",
                "bar"
            ],
            "locations": [
                "https://resource.other/"
            ],
            "datatypes": [
                "data",
                "pictures",
                "walrus whiskers"
            ]
        }
    ],
    "label": "token1-23",
    "flags": [ "split" ]
}
]]></artwork></figure>

<t>If access is approved, the resulting access token is valid for the described resource
and is bound to the client instance's key (or its most recent rotation). The token
is labeled "token1-23" and could be split into multiple access tokens by the AS, if the
AS chooses. The token response structure is described in <xref target="response-token-single"/>.</t>

</section>
<section anchor="request-token-multiple"><name>Requesting Multiple Access Tokens</name>

<t>To request multiple access tokens to be returned in a single response, the
client instance sends an array of objects as the value of the <spanx style="verb">access_token</spanx>
parameter. Each object <bcp14>MUST</bcp14> conform to the request format for a single
access token request, as specified in
<xref target="request-token-single">requesting a single access token</xref>.
Additionally, each object in the array <bcp14>MUST</bcp14> include the <spanx style="verb">label</spanx> field, and
all values of these fields <bcp14>MUST</bcp14> be unique within the request. If the
client instance does not include a <spanx style="verb">label</spanx> value for any entry in the
array, or the values of the <spanx style="verb">label</spanx> field are not unique within the array,
the AS <bcp14>MUST</bcp14> return an error.</t>

<t>The following non-normative example shows a request for two
separate access tokens, <spanx style="verb">token1</spanx> and <spanx style="verb">token2</spanx>.</t>

<figure><artwork><![CDATA[
"access_token": [
    {
        "label": "token1",
        "access": [
            {
                "type": "photo-api",
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "dolphin-metadata"
        ]
    },
    {
        "label": "token2",
        "access": [
            {
                "type": "walrus-access",
                "actions": [
                    "foo",
                    "bar"
                ],
                "locations": [
                    "https://resource.other/"
                ],
                "datatypes": [
                    "data",
                    "pictures",
                    "walrus whiskers"
                ]
            }
        ],
        "flags": [ "bearer" ]
    }
]

]]></artwork></figure>

<t>All approved access requests are returned in the
<xref target="response-token-multiple">multiple access token response</xref> structure using
the values of the <spanx style="verb">label</spanx> fields in the request.</t>

</section>
</section>
<section anchor="request-subject"><name>Requesting Subject Information</name>

<t>If the client instance is requesting information about the RO from
the AS, it sends a <spanx style="verb">subject</spanx> field as a JSON object. This object <bcp14>MAY</bcp14>
contain the following fields (or additional fields defined in
<xref target="IANA">a registry TBD</xref>).</t>

<dl>
  <dt>
<spanx style="verb">sub_id_formats</spanx> (array of strings):  </dt>
  <dd>
    <t>An array of subject identifier subject formats
  requested for the RO, as defined by <xref target="I-D.ietf-secevent-subject-identifiers"/>.
  <bcp14>REQUIRED</bcp14> if subject identifiers are requested.</t>
  </dd>
  <dt>
<spanx style="verb">assertion_formats</spanx> (array of strings):  </dt>
  <dd>
    <t>An array of requested assertion formats. Possible values include
  <spanx style="verb">id_token</spanx> for an <xref target="OIDC"/> ID Token and <spanx style="verb">saml2</spanx> for a SAML 2 assertion. Additional
  assertion formats are defined by <xref target="IANA">a registry TBD</xref>.
  <bcp14>REQUIRED</bcp14> if assertions are requested.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"subject": {
  "sub_id_formats": [ "iss_sub", "opaque" ],
  "assertion_formats": [ "id_token", "saml2" ]
}
]]></artwork></figure>

<t>The AS can determine the RO's identity and permission for releasing
this information through <xref target="authorization">interaction with the RO</xref>,
AS policies, or <xref target="request-user">assertions presented by the client instance</xref>. If
this is determined positively, the AS <bcp14>MAY</bcp14> <xref target="response-subject">return the RO's information in its response</xref>
as requested.</t>

<t>Subject identifier types requested by the client instance serve only to identify
the RO in the context of the AS and can't be used as communication
channels by the client instance, as discussed in <xref target="response-subject"/>.</t>

<t>The AS <bcp14>SHOULD NOT</bcp14> re-use subject identifiers for multiple different ROs.</t>

<t>The "formats" and "assertions" request fields are independent of each other, and a
returned assertion <bcp14>MAY</bcp14> use a different subject identifier than other assertions and
subject identifiers in the response. All subject identifiers and assertions returned
<bcp14>MUST</bcp14> refer to the same person.</t>

</section>
<section anchor="request-client"><name>Identifying the Client Instance</name>

<t>When sending a non-continuation request to the AS, the client instance <bcp14>MUST</bcp14> identify
itself by including the <spanx style="verb">client</spanx> field of the request and by signing the
request as described in <xref target="binding-keys"/>. Note that for a
<xref target="continue-request">continuation request</xref>, the client instance is identified by its
association with the request being continued and so this field is
not sent under those circumstances.</t>

<t>When client instance information is sent
by value, the <spanx style="verb">client</spanx> field of the request consists of a JSON
object with the following fields.</t>

<dl>
  <dt>
<spanx style="verb">key</spanx> (object / string):  </dt>
  <dd>
    <t>The public key of the client instance to be used in this request as
  described in <xref target="key-format"/> or a reference to a key as
  described in <xref target="key-reference"/>. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">class_id</spanx> (string):  </dt>
  <dd>
    <t>An identifier string that the AS can use to identify the
  client software comprising this client instance. The contents
  and format of this field are up to the AS. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">display</spanx> (object):  </dt>
  <dd>
    <t>An object containing additional information that the AS
  <bcp14>MAY</bcp14> display to the RO during interaction, authorization,
  and management. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"client": {
    "key": {
        "proof": "httpsig",
        "jwk": {
            "kty": "RSA",
            "e": "AQAB",
            "kid": "xyz-1",
            "alg": "RS256",
            "n": "kOB5rR4Jv0GMeLaY6_It_r3ORwdf8ci_JtffXyaSx8..."
        },
        "cert": "MIIEHDCCAwSgAwIBAgIBATANBgkqhkiG9w0BAQsFA..."
    },
    "class_id": "web-server-1234",
    "display": {
        "name": "My Client Display Name",
        "uri": "https://example.net/client"
    }
}
]]></artwork></figure>

<t>Additional fields are defined in <xref target="IANA">a registry TBD</xref>.</t>

<t>The client instance <bcp14>MUST</bcp14> prove possession of any presented key by the <spanx style="verb">proof</spanx> mechanism
associated with the key in the request.  Proof types
are defined in <xref target="IANA">a registry TBD</xref> and an initial set of methods
is described in <xref target="binding-keys"/>.</t>

<t>If the same public key is sent by value on different access requests, the AS <bcp14>MUST</bcp14>
treat these requests as coming from the same client instance for purposes
of identification, authentication, and policy application.
If the AS does not know the client instance's public key ahead of time, the AS
<bcp14>MAY</bcp14> accept or reject the request based on AS policy, attestations
within the <spanx style="verb">client</spanx> request, and other mechanisms.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/44">See issue #44</eref> ]]</t>

<t>The client instance <bcp14>MUST NOT</bcp14> send a symmetric key by value in the request, as doing so would expose
the key directly instead of simply proving possession of it. See considerations on symmetric keys
in <xref target="security-symmetric"/>.</t>

<t>The client instance's key <bcp14>MAY</bcp14> be pre-registered with the AS ahead of time and associated
with a set of policies and allowable actions pertaining to that client. If this pre-registration
includes other fields that can occur in the <spanx style="verb">client</spanx> request object described in this section,
such as <spanx style="verb">class_id</spanx> or <spanx style="verb">display</spanx>, the pre-registered values <bcp14>MUST</bcp14> take precedence over any values
given at runtime. Additional fields sent during a request but not present in a pre-registered
client instance record at the AS <bcp14>SHOULD NOT</bcp14> be added to the client's pre-registered record.
See additional considerations regarding client instance impersonation in <xref target="security-impersonation"/>.</t>

<t>A client instance that is capable of talking to multiple AS's <bcp14>SHOULD</bcp14> use a different key for each
AS to prevent a class of mix-up attacks as described in <xref target="security-cuckoo"/>.</t>

<section anchor="request-instance"><name>Identifying the Client Instance by Reference</name>

<t>If the client instance has an instance identifier that the AS can use to determine
appropriate key information, the client instance can send this instance
identifier as a direct reference value in lieu of the <spanx style="verb">client</spanx> object.
The instance identifier <bcp14>MAY</bcp14> be assigned to a client instance at runtime
through a grant response (<xref target="response-dynamic-handles"/>) or <bcp14>MAY</bcp14> be obtained in another fashion,
such as a static registration process at the AS.</t>

<figure><artwork><![CDATA[
"client": "client-541-ab"
]]></artwork></figure>

<t>When the AS receives a request with an instance identifier, the AS <bcp14>MUST</bcp14>
ensure that the key used to <xref target="binding-keys">sign the request</xref> is
associated with the instance identifier.</t>

<t>If the AS does not recognize the instance identifier, the request <bcp14>MUST</bcp14> be rejected
with an error.</t>

<t>If the client instance is identified in this manner, the registered key for the client instance
<bcp14>MAY</bcp14> be a symmetric key known to the AS. See considerations on symmetric keys
in <xref target="security-symmetric"/>.</t>

</section>
<section anchor="request-display"><name>Providing Displayable Client Instance Information</name>

<t>If the client instance has additional information to display to the RO
during any interactions at the AS, it <bcp14>MAY</bcp14> send that information in the
"display" field. This field is a JSON object that declares information
to present to the RO during any interactive sequences.</t>

<dl>
  <dt>
<spanx style="verb">name</spanx> (string):  </dt>
  <dd>
    <t>Display name of the client software. <bcp14>RECOMMENDED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>User-facing web page of the client software. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">logo_uri</spanx> (string)  </dt>
  <dd>
    <t>Display image to represent the client software. The logo <bcp14>MAY</bcp14> be passed by value by using a data: URI <xref target="RFC2397"/> referencing an image mediatype. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"display": {
    "name": "My Client Display Name",
    "uri": "https://example.net/client",
    "logo_uri": "data:image/png;base64,Eeww...="
}
]]></artwork></figure>

<t>Additional display fields are defined by <xref target="IANA">a registry TBD</xref>.</t>

<t>The AS <bcp14>SHOULD</bcp14> use these values during interaction with the RO.
The values are for informational purposes only and <bcp14>MUST NOT</bcp14>
be taken as authentic proof of the client instance's identity or source.
The AS <bcp14>MAY</bcp14> restrict display values to specific client instances, as identified
by their keys in <xref target="request-client"/>. See additional considerations for displayed
client information in <xref target="security-impersonation"/>.</t>

</section>
<section anchor="request-key-authenticate"><name>Authenticating the Client Instance</name>

<t>If the presented key is known to the AS and is associated with a single instance
of the client software, the process of presenting a key and proving possession of that key
is sufficient to authenticate the client instance to the AS. The AS <bcp14>MAY</bcp14> associate policies
with the client instance identified by this key, such as limiting which resources
can be requested and which interaction methods can be used. For example, only
specific client instances with certain known keys might be trusted with access tokens without the
AS interacting directly with the RO as in <xref target="example-no-user"/>.</t>

<t>The presentation of a key allows the AS to strongly associate multiple
successive requests from the same client instance with each other. This
is true when the AS knows the key ahead of time and can use the key to
authenticate the client instance, but also if the key is
ephemeral and created just for this series of requests. As such the
AS <bcp14>MAY</bcp14> allow for client instances to make requests with unknown keys. This pattern allows
for ephemeral client instances, such as single-page applications, and client software with many individual long-lived instances,
such as mobile applications, to generate key pairs per instance and use the keys within
the protocol without having to go through a separate registration step.
The AS <bcp14>MAY</bcp14> limit which capabilities are made available to client instances
with unknown keys. For example, the AS could have a policy saying that only
previously-registered client instances can request particular resources, or that all
client instances with unknown keys have to be interactively approved by an RO.</t>

</section>
</section>
<section anchor="request-user"><name>Identifying the User</name>

<t>If the client instance knows the identity of the end user through one or more
identifiers or assertions, the client instance <bcp14>MAY</bcp14> send that information to the
AS in the "user" field. The client instance <bcp14>MAY</bcp14> pass this information by value
or by reference.</t>

<dl>
  <dt>
<spanx style="verb">sub_ids</spanx> (array of objects):  </dt>
  <dd>
    <t>An array of subject identifiers for the
  end user, as defined by <xref target="I-D.ietf-secevent-subject-identifiers"/>.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">assertions</spanx> (array of objects)  </dt>
  <dd>
    <t>An array containing assertions as objects each containing the assertion
  format and the assertion value as the JSON string serialization of the assertion.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"user": {
  "sub_ids": [ {
    "format": "opaque",
    "id": "J2G8G8O4AZ"
  } ],
  "assertions": [ {
    "format": "id_token",
    "value": "eyj..."
  } ]
}

]]></artwork></figure>

<t>Subject identifiers are hints to the AS in determining the
RO and <bcp14>MUST NOT</bcp14> be taken as declarative statements that a particular
RO is present at the client instance and acting as the end user. Assertions <bcp14>SHOULD</bcp14> be validated by the AS.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/49">See issue #49</eref> ]]</t>

<t>If the identified end user does not match the RO present at the AS
during an interaction step, the AS <bcp14>SHOULD</bcp14> reject the request with an error.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/50">See issue #50</eref> ]]</t>

<t>If the AS trusts the client instance to present verifiable assertions, the AS <bcp14>MAY</bcp14>
decide, based on its policy, to skip interaction with the RO, even
if the client instance provides one or more interaction modes in its request.</t>

<t>See <xref target="security-assertions"/> for considerations that the AS has to make when accepting and
processing assertions from the client instance.</t>

<section anchor="request-user-reference"><name>Identifying the User by Reference</name>

<t>The AS can identify the current end user to the client instance with a reference
which can be used by the client instance to refer to the end user across
multiple requests.
If the client instance has a reference for the end user at this AS, the
client instance <bcp14>MAY</bcp14> pass that reference as a string. The format of this string
is opaque to the client instance.</t>

<figure><artwork><![CDATA[
"user": "XUT2MFM1XBIKJKSDU8QM"
]]></artwork></figure>

<t>One means of dynamically obtaining such a user reference is from the AS returning
an <spanx style="verb">opaque</spanx> subject identifier as described in <xref target="response-subject"/>.
Other means of configuring a client instance with a user identifier are out
of scope of this specification.</t>

<t>User reference identifiers are not intended to be human-readable
user identifiers or structured assertions. For the client instance to send
either of these, use the full <xref target="request-user">user request object</xref> instead.</t>

<t>If the AS does not recognize the user reference, it <bcp14>MUST</bcp14>
return an error.</t>

</section>
</section>
<section anchor="request-interact"><name>Interacting with the User</name>

<t>Often, the AS will require <xref target="authorization">interaction with the RO</xref> in order to
approve a requested delegation to the client instance for both access to resources and direct
subject information. Many times the end user using the client instance is the same person as
the RO, and the client instance can directly drive interaction with the end user by facilitating
the process through means such as redirection to a URI or launching an application. Other times, the
client instance can provide information to start the RO's interaction on a secondary
device, or the client instance will wait for the RO to approve the request asynchronously.
The client instance could also be signaled that interaction has concluded through a
callback mechanism.</t>

<t>The client instance declares the parameters for interaction methods that it can support
using the <spanx style="verb">interact</spanx> field.</t>

<t>The <spanx style="verb">interact</spanx> field is a JSON object with three keys whose values declare how the client can initiate
and complete the request, as well as provide hints to the AS about user preferences such as locale.
A client instance <bcp14>MUST NOT</bcp14> declare an interaction mode it does not support.
The client instance <bcp14>MAY</bcp14> send multiple modes in the same request.
There is no preference order specified in this request. An AS <bcp14>MAY</bcp14>
<xref target="response-interact">respond to any, all, or none of the presented interaction modes</xref> in a request, depending on
its capabilities and what is allowed to fulfill the request.</t>

<dl>
  <dt>
<spanx style="verb">start</spanx> (array of strings/objects):  </dt>
  <dd>
    <t>Indicates how the client instance can start an interaction. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">finish</spanx> (object):  </dt>
  <dd>
    <t>Indicates how the client instance can receive an indication that interaction has finished at the AS. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">hints</spanx> (object):  </dt>
  <dd>
    <t>Provides additional information to inform the interaction process at the AS. <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>In this non-normative example, the client instance is indicating that it can <xref target="request-interact-redirect">redirect</xref>
the end user to an arbitrary URI and can receive a <xref target="request-interact-callback-redirect">redirect</xref> through
a browser request.</t>

<figure><artwork><![CDATA[
"interact": {
    "start": ["redirect"],
    "finish": {
        "method": "redirect",
        "uri": "https://client.example.net/return/123455",
        "nonce": "LKLTI25DK82FX4T4QFZC"
    }
}
]]></artwork></figure>

<t>In this non-normative example, the client instance is indicating that it can
display a <xref target="request-interact-usercode">user code</xref> and direct the end user
to an <xref target="request-interact-redirect">arbitrary URI</xref> on a secondary
device, but it cannot accept a redirect or push callback.</t>

<figure><artwork><![CDATA[
"interact": {
    "start": ["redirect", "user_code"]
}
]]></artwork></figure>

<t>If the client instance does not provide a suitable interaction mechanism, the
AS cannot contact the RO asynchronously, and the AS determines
that interaction is required, then the AS <bcp14>SHOULD</bcp14> return an
error since the client instance will be unable to complete the
request without authorization.</t>

<t>The AS <bcp14>SHOULD</bcp14> handle any interact request as a one-time-use mechanism and <bcp14>SHOULD</bcp14> apply suitable timeouts to any interaction mechanisms
provided, including user codes and redirection URIs. The client instance <bcp14>SHOULD</bcp14>
apply suitable timeouts to any callback URIs.</t>

<section anchor="request-interact-start"><name>Start Mode Definitions</name>

<t>This specification defines the following interaction start modes as an array of string values under the <spanx style="verb">start</spanx> key:</t>

<dl>
  <dt>
<spanx style="verb">"redirect"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can direct the end user to an arbitrary URI
  for interaction. <xref target="request-interact-redirect"/></t>
  </dd>
  <dt>
<spanx style="verb">"app"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can launch an application on the end user's
  device for interaction. <xref target="request-interact-app"/></t>
  </dd>
  <dt>
<spanx style="verb">"user_code"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can communicate a human-readable short
  code to the end user for use with a stable URI. <xref target="request-interact-usercode"/></t>
  </dd>
  <dt>
<spanx style="verb">"user_code_uri"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can communicate a human-readable short
  code to the end user for use with a short, dynamic URI. <xref target="request-interact-usercodeuri"/></t>
  </dd>
</dl>

<section anchor="request-interact-redirect"><name>Redirect to an Arbitrary URI</name>

<t>If the client instance is capable of directing the end user to a URI defined
by the AS at runtime, the client instance indicates this by including
<spanx style="verb">redirect</spanx> in the array under the <spanx style="verb">start</spanx> key. The means by which
the client instance will activate this URI is out of scope of this
specification, but common methods include an HTTP redirect,
launching a browser on the end user's device, providing a scannable
image encoding, and printing out a URI to an interactive
console. While this URI is generally hosted at the AS, the client
instance can make no assumptions about its contents, composition,
or relationship to the AS grant URI.</t>

<figure><artwork><![CDATA[
"interact": {
  "start": ["redirect"]
}
]]></artwork></figure>

<t>If this interaction mode is supported for this client instance and
request, the AS returns a redirect interaction response <xref target="response-interact-redirect"/>.
The client instance manages this interaction method as described in <xref target="interaction-redirect"/>.</t>

<t>See <xref target="security-front-channel"/> for more considerations regarding the use of front-channel
communication techniques such as this.</t>

</section>
<section anchor="request-interact-app"><name>Open an Application-specific URI</name>

<t>If the client instance can open a URI associated with an application on
the end user's device, the client instance indicates this by including <spanx style="verb">app</spanx>
in the array under the <spanx style="verb">start</spanx> key. The means by which the client instance
determines the application to open with this URI are out of scope of
this specification.</t>

<figure><artwork><![CDATA[
"interact": {
  "start": ["app"]
}
]]></artwork></figure>

<t>If this interaction mode is supported for this client instance and
request, the AS returns an app interaction response with an app URI
payload <xref target="response-interact-app"/>. The client instance manages
this interaction method as described in <xref target="interaction-app"/>.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/54">See issue #54</eref> ]]</t>

</section>
<section anchor="request-interact-usercode"><name>Display a Short User Code</name>

<t>If the client instance is capable of displaying or otherwise communicating
a short, human-entered code to the RO, the client instance indicates this
by including <spanx style="verb">user_code</spanx> in the array under the <spanx style="verb">start</spanx> key. This
code is to be entered at a static URI that does not change at
runtime. The client instance has no reasonable means to communicate a dynamic
URI to the RO, and so this URI is usually communicated out of band to the
RO through documentation or other messaging outside of GNAP.
While this URI is generally hosted at the AS, the client
instance can make no assumptions about its contents, composition,
or relationship to the AS grant URI.</t>

<figure><artwork><![CDATA[
"interact": {
    "start": ["user_code"]
}
]]></artwork></figure>

<t>If this interaction mode is supported for this client instance and
request, the AS returns a user code as specified
in <xref target="response-interact-usercode"/>. The client instance manages this interaction
method as described in <xref target="interaction-usercode"/>.</t>

</section>
<section anchor="request-interact-usercodeuri"><name>Display a Short User Code and URI</name>

<t>If the client instance is capable of displaying or otherwise communicating
a short, human-entered code along with a short, human-entered URI to the RO,
the client instance indicates this
by including <spanx style="verb">user_code_uri</spanx> in the array under the <spanx style="verb">start</spanx> key. This
code is to be entered at the dynamic URL given in the response.
While this URL is generally hosted at the AS, the client
instance can make no assumptions about its contents, composition,
or relationship to the AS grant URL.</t>

<figure><artwork><![CDATA[
"interact": {
    "start": ["user_code_uri"]
}
]]></artwork></figure>

<t>If this interaction mode is supported for this client instance and
request, the AS returns a user code and interaction URL as specified
in <xref target="response-interact-usercodeuri"/>. The client instance manages this interaction
method as described in <xref target="interaction-usercodeuri"/>.</t>

</section>
</section>
<section anchor="request-interact-finish"><name>Finish Interaction Methods</name>

<t>If the client instance is capable of receiving a message from the AS indicating
that the RO has completed their interaction, the client instance
indicates this by sending the following members of an object under the <spanx style="verb">finish</spanx> key.</t>

<dl>
  <dt>
<spanx style="verb">method</spanx> (string):  </dt>
  <dd>
    <t>The callback method that the AS will use to contact the client instance.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>Indicates the URI that the AS will either send the RO to
  after interaction or send an HTTP POST request. This URI <bcp14>MAY</bcp14> be unique per request and <bcp14>MUST</bcp14>
  be hosted by or accessible by the client instance. This URI <bcp14>MUST NOT</bcp14> contain
  any fragment component. This URI <bcp14>MUST</bcp14> be protected by HTTPS, be
  hosted on a server local to the RO's browser ("localhost"), or
  use an application-specific URI scheme. If the client instance needs any
  state information to tie to the front channel interaction
  response, it <bcp14>MUST</bcp14> use a unique callback URI to link to
  that ongoing state. The allowable URIs and URI patterns <bcp14>MAY</bcp14> be restricted by the AS
  based on the client instance's presented key information. The callback URI
  <bcp14>SHOULD</bcp14> be presented to the RO during the interaction phase
  before redirect. <bcp14>REQUIRED</bcp14> for <spanx style="verb">redirect</spanx> and <spanx style="verb">push</spanx> methods.</t>
  </dd>
  <dt>
<spanx style="verb">nonce</spanx> (string):  </dt>
  <dd>
    <t>Unique value to be used in the
  calculation of the "hash" query parameter sent to the callback URI,
  must be sufficiently random to be unguessable by an attacker.
  <bcp14>MUST</bcp14> be generated by the client instance as a unique value for this
  request. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">hash_method</spanx> (string):  </dt>
  <dd>
    <t>The hash calculation
  mechanism to be used for the callback hash in <xref target="interaction-hash"/>. Can be one of <spanx style="verb">sha3</spanx> or <spanx style="verb">sha2</spanx>. If
  absent, the default value is <spanx style="verb">sha3</spanx>. <bcp14>OPTIONAL</bcp14>.
  [[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/56">See issue #56</eref> ]]</t>
  </dd>
</dl>

<t>This specification defines the following values for the <spanx style="verb">method</spanx> parameter,
with other values defined by <xref target="IANA">a registry TBD</xref>:</t>

<dl>
  <dt>
<spanx style="verb">"redirect"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can receive a redirect from the end user's device
  after interaction with the RO has concluded. <xref target="request-interact-callback-redirect"/></t>
  </dd>
  <dt>
<spanx style="verb">"push"</spanx>:  </dt>
  <dd>
    <t>Indicates that the client instance can receive an HTTP POST request from the AS
  after interaction with the RO has concluded. <xref target="request-interact-callback-push"/></t>
  </dd>
</dl>

<t>If this interaction mode is supported for this client instance and
request, the AS returns a nonce for use in validating
<xref target="response-interact-finish">the callback response</xref>.
Requests to the callback URI <bcp14>MUST</bcp14> be processed as described in
<xref target="interaction-finish"/>, and the AS <bcp14>MUST</bcp14> require
presentation of an interaction callback reference as described in
<xref target="continue-after-interaction"/>.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/58">See issue #58</eref> ]]</t>

<section anchor="request-interact-callback-redirect"><name>Receive an HTTP Callback Through the Browser</name>

<t>A finish <spanx style="verb">method</spanx> value of <spanx style="verb">redirect</spanx> indicates that the client instance
will expect a request from the RO's browser using the HTTP method
GET as described in <xref target="interaction-callback"/>.</t>

<figure><artwork><![CDATA[
"interact": {
    "finish": {
        "method": "redirect",
        "uri": "https://client.example.net/return/123455",
        "nonce": "LKLTI25DK82FX4T4QFZC"
    }
}
]]></artwork></figure>

<t>Requests to the callback URI <bcp14>MUST</bcp14> be processed by the client instance as described in
<xref target="interaction-callback"/>.</t>

<t>Since the incoming request to the callback URI is from the RO's
browser, this method is usually used when the RO and end user are the
same entity. See <xref target="security-sessions"/> for considerations on ensuring the incoming HTTP message
matches the expected context of the request.
See <xref target="security-front-channel"/> for more considerations regarding the use of front-channel
communication techniques such as this.</t>

</section>
<section anchor="request-interact-callback-push"><name>Receive an HTTP Direct Callback</name>

<t>A finish <spanx style="verb">method</spanx> value of <spanx style="verb">push</spanx> indicates that the client instance will
expect a request from the AS directly using the HTTP method POST
as described in <xref target="interaction-pushback"/>.</t>

<figure><artwork><![CDATA[
"interact": {
    "finish": {
        "method": "push",
        "uri": "https://client.example.net/return/123455",
        "nonce": "LKLTI25DK82FX4T4QFZC"
    }
}
]]></artwork></figure>

<t>Requests to the callback URI <bcp14>MUST</bcp14> be processed by the client instance as described in
<xref target="interaction-pushback"/>.</t>

<t>Since the incoming request to the callback URI is from the AS and
not from the RO's browser, this request is not expected to have any shared
session information from the start method. See <xref target="security-sessions"/> and <xref target="security-polling"/> for
more considerations regarding the use of back-channel and polling mechanisms like this.</t>

</section>
</section>
<section anchor="request-interact-hint"><name>Hints</name>

<t>The <spanx style="verb">hints</spanx> key is an object describing one or more suggestions from the client
instance that the AS can use to help drive user interaction.</t>

<t>This specification defines the following properties under the <spanx style="verb">hints</spanx> key:</t>

<dl>
  <dt>
<spanx style="verb">ui_locales</spanx> (array of strings):  </dt>
  <dd>
    <t>Indicates the end user's preferred locales that the AS can use
  during interaction, particularly before the RO has
  authenticated. <bcp14>OPTIONAL</bcp14>. <xref target="request-interact-locale"/></t>
  </dd>
</dl>

<t>The following sections detail requests for interaction
hints. Additional interaction hints are defined in
<xref target="IANA">a registry TBD</xref>.</t>

<section anchor="request-interact-locale"><name>Indicate Desired Interaction Locales</name>

<t>If the client instance knows the end user's locale and language preferences, the
client instance can send this information to the AS using the <spanx style="verb">ui_locales</spanx> field
with an array of locale strings as defined by <xref target="RFC5646"/>.</t>

<figure><artwork><![CDATA[
"interact": {
    "hints": {
        "ui_locales": ["en-US", "fr-CA"]
    }
}
]]></artwork></figure>

<t>If possible, the AS <bcp14>SHOULD</bcp14> use one of the locales in the array, with
preference to the first item in the array supported by the AS. If none
of the given locales are supported, the AS <bcp14>MAY</bcp14> use a default locale.</t>

</section>
</section>
<section anchor="request-interact-extend"><name>Extending Interaction Modes</name>

<t>Additional interaction start modes, finish modes, and hints are defined in <xref target="IANA">a registry TBD</xref>.</t>

</section>
</section>
<section anchor="request-extending"><name>Extending The Grant Request</name>

<t>The request object <bcp14>MAY</bcp14> be extended by registering new items in
<xref target="IANA">a registry TBD</xref>. Extensions <bcp14>SHOULD</bcp14> be orthogonal to other parameters.
Extensions <bcp14>MUST</bcp14> document any aspects where the extension item affects or influences
the values or behavior of other request and response objects.</t>

</section>
</section>
<section anchor="response"><name>Grant Response</name>

<t>In response to a client instance's request, the AS responds with a JSON object
as the HTTP entity body. Each possible field is detailed in the sections below.</t>

<dl>
  <dt>
<spanx style="verb">continue</spanx> (object):  </dt>
  <dd>
    <t>Indicates that the client instance can continue the request by making one or
  more continuation requests. <bcp14>REQUIRED</bcp14> if continuation calls are allowed for this client instance on this grant request. See <xref target="response-continue"/>.</t>
  </dd>
  <dt>
<spanx style="verb">access_token</spanx> (object / array of objects):  </dt>
  <dd>
    <t>A single access token or set of access tokens that the client instance can use to call the RS on
  behalf of the RO. <bcp14>REQUIRED</bcp14> if an access token is included. See <xref target="response-token"/>.</t>
  </dd>
  <dt>
<spanx style="verb">interact</spanx> (object):  </dt>
  <dd>
    <t>Indicates that interaction through some set of defined mechanisms
  needs to take place. <bcp14>REQUIRED</bcp14> if interaction is needed or allowed. See <xref target="response-interact"/>.</t>
  </dd>
  <dt>
<spanx style="verb">subject</spanx> (object):  </dt>
  <dd>
    <t>Claims about the RO as known and declared by the AS. <bcp14>REQUIRED</bcp14> if subject information is included. See <xref target="response-subject"/>.</t>
  </dd>
  <dt>
<spanx style="verb">instance_id</spanx> (string):  </dt>
  <dd>
    <t>An identifier this client instance can use to identify itself when making
  future requests. <bcp14>OPTIONAL</bcp14>. See <xref target="response-dynamic-handles"/>.</t>
  </dd>
  <dt>
<spanx style="verb">error</spanx> (object):  </dt>
  <dd>
    <t>An error code indicating that something has gone wrong. <bcp14>REQUIRED</bcp14> for an error condition. If included, other fields <bcp14>MUST NOT</bcp14> be included. See <xref target="response-error"/>.</t>
  </dd>
</dl>

<t>In this example, the AS is returning an <xref target="response-interact-redirect">interaction URI</xref>,
a <xref target="response-interact-finish">callback nonce</xref>, and a <xref target="response-continue">continuation response</xref>.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "interact": {
        "redirect": "https://server.example.com/interact/4CF492ML\
          VMSW9MKMXKHQ",
        "finish": "MBDOFXG4Y5CVJCX821LH"
    },
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU",
        },
        "uri": "https://server.example.com/tx"
    }
}
]]></artwork></figure>

<t>In this example, the AS is returning a bearer <xref target="response-token-single">access token</xref> with a management URI and a <xref target="response-subject">subject identifier</xref> in the form of
an opaque identifier.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792 and a [subject identifier](#response-subject) in the form of
an opaque identifier.

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "flags": ["bearer"],
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
    },
    "subject": {
        "sub_ids": [ {
          "format": "opaque",
          "id": "J2G8G8O4AZ"
        } ]
    }
}
]]></artwork></figure>

<t>In this example, the AS is returning set of <xref target="response-subject">subject identifiers</xref>,
simultaneously as an opaque identifier, an email address, and a decentralized identifier URL (DID).</t>

<figure><artwork><![CDATA[
{
    "subject": {
        "sub_ids": [ {
          "format": "opaque",
          "id": "J2G8G8O4AZ"
        }, {
          "format": "email",
          "email": "user@example.com"
        }, {
          "format": "did",
          "url": "did:example:123456"
        } ]
    }
}
]]></artwork></figure>

<section anchor="response-continue"><name>Request Continuation</name>

<t>If the AS determines that the request can be continued with
additional requests, it responds with the <spanx style="verb">continue</spanx> field. This field
contains a JSON object with the following properties.</t>

<dl>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>The URI at which the client instance can make
  continuation requests. This URI <bcp14>MAY</bcp14> vary per
  request, or <bcp14>MAY</bcp14> be stable at the AS.
  The client instance <bcp14>MUST</bcp14> use this
  value exactly as given when making a <xref target="continue-request">continuation request</xref>.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">wait</spanx> (integer):  </dt>
  <dd>
    <t>The amount of time in integer
  seconds the client instance <bcp14>MUST</bcp14> wait after receiving this request continuation
  response and calling the continuation URI. The value <bcp14>SHOULD NOT</bcp14> be less than five seconds,
  and omission of the value <bcp14>MUST NOT</bcp14> be interpreted as zero (i.e., no delay
  between requests).
  <bcp14>RECOMMENDED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">access_token</spanx> (object):  </dt>
  <dd>
    <t>A unique access token for continuing the request, called the "continuation access token".
  The value of this property <bcp14>MUST</bcp14> be in the format specified
  in <xref target="response-token-single"/>. This access token <bcp14>MUST</bcp14> be bound to the
  client instance's key used in the request and <bcp14>MUST NOT</bcp14> be a bearer token. As a consequence,
  the <spanx style="verb">flags</spanx> array of this access token <bcp14>MUST NOT</bcp14> contain the string <spanx style="verb">bearer</spanx> and the
  <spanx style="verb">key</spanx> field <bcp14>MUST</bcp14> be omitted.
  The client instance <bcp14>MUST</bcp14> present the continuation access token in all requests to the continuation URI as described in <xref target="use-access-token"/>.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
{
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue",
        "wait": 60
    }
}
]]></artwork></figure>

<t>The client instance can use the values of this field to continue the
request as described in <xref target="continue-request"/>. Note that the
client instance <bcp14>MUST</bcp14> sign all continuation requests with its key as described
in <xref target="binding-keys"/> and
<bcp14>MUST</bcp14> present the access token in its continuation request.</t>

<t>This field <bcp14>SHOULD</bcp14> be returned when interaction is expected, to
allow the client instance to follow up after interaction has been
concluded.</t>

</section>
<section anchor="response-token"><name>Access Tokens</name>

<t>If the AS has successfully granted one or more access tokens to the client instance,
the AS responds with the <spanx style="verb">access_token</spanx> field. This field contains either a single
access token as described in <xref target="response-token-single"/> or an array of access tokens
as described in <xref target="response-token-multiple"/>.</t>

<t>The client instance uses any access tokens in this response to call the RS as
described in <xref target="use-access-token"/>.</t>

<section anchor="response-token-single"><name>Single Access Token</name>

<t>If the client instance has requested a single access token and the AS has
granted that access token, the AS responds with the "access_token"
field. The value of this field is an object with the following
properties.</t>

<dl>
  <dt>
<spanx style="verb">value</spanx> (string):  </dt>
  <dd>
    <t>The value of the access token as a
  string. The value is opaque to the client instance. The value <bcp14>SHOULD</bcp14> be
  limited to ASCII characters to facilitate transmission over HTTP
  headers within other protocols without requiring additional encoding.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">label</spanx> (string):  </dt>
  <dd>
    <t>The value of the <spanx style="verb">label</spanx> the client instance provided in the associated
  <xref target="request-token">token request</xref>, if present. If the token has been split
  by the AS, the value of the <spanx style="verb">label</spanx> field is chosen by the AS and the
  <spanx style="verb">split</spanx> flag is used.
  <bcp14>REQUIRED</bcp14> for multiple access tokens, <bcp14>OPTIONAL</bcp14> for single access token.</t>
  </dd>
  <dt>
<spanx style="verb">manage</spanx> (string):  </dt>
  <dd>
    <t>The management URI for this
  access token. If provided, the client instance <bcp14>MAY</bcp14> manage its access
  token as described in <xref target="token-management"/>. This management
  URI is a function of the AS and is separate from the RS
  the client instance is requesting access to.
  This URI <bcp14>MUST NOT</bcp14> include the
  access token value and <bcp14>SHOULD</bcp14> be different for each access
  token issued in a request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">access</spanx> (array of objects/strings):  </dt>
  <dd>
    <t>A description of the rights
  associated with this access token, as defined in
  <xref target="resource-access-rights"/>. If included, this <bcp14>MUST</bcp14> reflect the rights
  associated with the issued access token. These rights <bcp14>MAY</bcp14> vary
  from what was requested by the client instance.
  <spanx style="verb">REQUIRED</spanx>.</t>
  </dd>
  <dt>
<spanx style="verb">expires_in</spanx> (integer):  </dt>
  <dd>
    <t>The number of seconds in
  which the access will expire. The client instance <bcp14>MUST NOT</bcp14> use the access
  token past this time. An RS <bcp14>MUST NOT</bcp14> accept an access token
  past this time. Note that the access token <bcp14>MAY</bcp14> be revoked by the
  AS or RS at any point prior to its expiration.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">key</spanx> (object / string):  </dt>
  <dd>
    <t>The key that the token is bound to, if different from the
  client instance's presented key. The key <bcp14>MUST</bcp14> be an object or string in a format
  described in <xref target="key-format"/>. The client instance <bcp14>MUST</bcp14> be able to
  dereference or process the key information in order to be able
  to sign the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">flags</spanx> (array of strings):  </dt>
  <dd>
    <t>A set of flags that represent attributes or behaviors of the access token
  issued by the AS.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>The values of the <spanx style="verb">flags</spanx> field defined by this specification are as follows:</t>

<dl>
  <dt>
<spanx style="verb">"bearer"</spanx>:  </dt>
  <dd>
    <t>This flag indicates whether the token is a bearer token, not bound to a key and proofing mechanism.
  If the <spanx style="verb">bearer</spanx> flag is present, the access token is a bearer token, and the <spanx style="verb">key</spanx>
  field in this response <bcp14>MUST</bcp14> be omitted. If the <spanx style="verb">bearer</spanx> flag is omitted and the <spanx style="verb">key</spanx> field
  in this response is omitted, the token is bound the <xref target="request-client">key used by the client instance</xref>
  in its request for access. If the <spanx style="verb">bearer</spanx> flag is omitted, and the <spanx style="verb">key</spanx> field is present,
  the token is bound to the key and proofing mechanism indicated in the <spanx style="verb">key</spanx> field.
  See <xref target="security-bearer-tokens"/> for additional considerations on the use of bearer tokens.</t>
  </dd>
  <dt>
<spanx style="verb">"durable"</spanx>:  </dt>
  <dd>
    <t>Flag indicating a hint of AS behavior on token rotation.
  If this flag is present, then the client instance can expect
  a previously-issued access token to continue to work after it has been <xref target="rotate-access-token">rotated</xref>
  or the underlying grant request has been <xref target="continue-modify">modified</xref>, resulting
  in the issuance of new access tokens. If this flag is omitted, the client
  instance can anticipate a given access token
  could stop working after token rotation or grant request modification.
  Note that a token flagged as <spanx style="verb">durable</spanx> can still expire or be revoked through
  any normal means.</t>
  </dd>
  <dt>
<spanx style="verb">"split"</spanx>:  </dt>
  <dd>
    <t>Flag indicating that this token was generated by issuing multiple access tokens
  in response to one of the client instance's <xref target="request-token">token request</xref> objects.
  This behavior <bcp14>MUST NOT</bcp14> be used unless the client instance has specifically requested it
  by use of the <spanx style="verb">split</spanx> flag.</t>
  </dd>
</dl>

<t>Flag values <bcp14>MUST NOT</bcp14> be included more than once.</t>

<t>Additional flags can be defined by extensions using <xref target="IANA">a registry TBD</xref>.</t>

<t>The following non-normative example shows a single access token bound to the client instance's key
used in the initial request, with a management URI, and that has access to three described resources
(one using an object and two described by reference strings).</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"access_token": {
    "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
    "manage": "https://server.example.com/token/PRY5NM33O\
        M4TB8N6BW7OZB8CDFONP219RP1L",
    "access": [
        {
            "type": "photo-api",
            "actions": [
                "read",
                "write",
                "dolphin"
            ],
            "locations": [
                "https://server.example.net/",
                "https://resource.local/other"
            ],
            "datatypes": [
                "metadata",
                "images"
            ]
        },
        "read", "dolphin-metadata"
    ]
}
]]></artwork></figure>

<t>The following non-normative example shows a single bearer access token
with access to two described resources.</t>

<figure><artwork><![CDATA[
"access_token": {
    "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
    "flags": ["bearer"],
    "access": [
        "finance", "medical"
    ]
}
]]></artwork></figure>

<t>If the client instance <xref target="request-token-single">requested a single access token</xref>, the AS <bcp14>MUST NOT</bcp14> respond with the multiple
access token structure unless the client instance sends the <spanx style="verb">split</spanx> flag as described in <xref target="request-token-single"/>.</t>

<t>If the AS has split the access token response, the response <bcp14>MUST</bcp14> include the <spanx style="verb">split</spanx> flag.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/69">See issue #69</eref> ]]</t>

</section>
<section anchor="response-token-multiple"><name>Multiple Access Tokens</name>

<t>If the client instance has requested multiple access tokens and the AS has
granted at least one of them, the AS responds with the
"access_token" field. The value of this field is a JSON
array, the members of which are distinct access
tokens as described in <xref target="response-token-single"/>.
Each object <bcp14>MUST</bcp14> have a unique <spanx style="verb">label</spanx> field, corresponding to the token labels
chosen by the client instance in the <xref target="request-token-multiple">multiple access token request</xref>.</t>

<t>In this non-normative example, two tokens are issued under the
names <spanx style="verb">token1</spanx> and <spanx style="verb">token2</spanx>, and only the first token has a management
URI associated with it.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"access_token": [
    {
        "label": "token1",
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "access": [ "finance" ]
    },
    {
        "label": "token2",
        "value": "UFGLO2FDAFG7VGZZPJ3IZEMN21EVU71FHCARP4J1",
        "access": [ "medical" ]
    }
}
]]></artwork></figure>

<t>Each access token corresponds to one of the objects in the <spanx style="verb">access_token</spanx> array of
the client instance's <xref target="request-token-multiple">request</xref>.</t>

<t>The multiple access token response <bcp14>MUST</bcp14> be used when multiple access tokens are
requested, even if only one access token is issued as a result of the request.
The AS <bcp14>MAY</bcp14> refuse to issue one or more of the
requested access tokens, for any reason. In such cases the refused token is omitted
from the response and all of the other issued access
tokens are included in the response the requested names appropriate names.</t>

<t>If the client instance <xref target="request-token-multiple">requested multiple access tokens</xref>, the AS <bcp14>MUST NOT</bcp14> respond with a
single access token structure, even if only a single access token is granted. In such cases, the AS responds
with a multiple access token structure containing one access token.</t>

<t>If the AS has split the access token response, the response <bcp14>MUST</bcp14> include the <spanx style="verb">split</spanx> flag in the <spanx style="verb">flags</spanx> array.</t>

<figure><artwork><![CDATA[
"access_token": [
    {
        "label": "split-1",
        "value": "8N6BW7OZB8CDFONP219-OS9M2PMHKUR64TBRP1LT0",
        "flags": ["split"],
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "access": [ "fruits" ]
    },
    {
        "label": "split-2",
        "value": "FG7VGZZPJ3IZEMN21EVU71FHCAR-UFGLO2FDAP4J1",
        "flags": ["split"],
        "access": [ "vegetables" ]
    }
}
]]></artwork></figure>

<t>Each access token <bcp14>MAY</bcp14> be bound to different keys with different proofing mechanisms.</t>

<t>The <spanx style="verb">manage</spanx> URI <bcp14>MUST NOT</bcp14> contain the access token <spanx style="verb">value</spanx>.</t>

</section>
</section>
<section anchor="response-interact"><name>Interaction Modes</name>

<t>If the client instance has indicated a <xref target="request-interact">capability to interact with the RO in its request</xref>,
and the AS has determined that interaction is both
supported and necessary, the AS responds to the client instance with any of the
following values in the <spanx style="verb">interact</spanx> field of the response. There is
no preference order for interaction modes in the response,
and it is up to the client instance to determine which ones to use. All supported
interaction methods are included in the same <spanx style="verb">interact</spanx> object.</t>

<dl>
  <dt>
<spanx style="verb">redirect</spanx> (string):  </dt>
  <dd>
    <t>Redirect to an arbitrary URI. <bcp14>REQUIRED</bcp14> if the <spanx style="verb">redirect</spanx> interaction start mode is possible for this request. See <xref target="response-interact-redirect"/>.</t>
  </dd>
  <dt>
<spanx style="verb">app</spanx> (string):  </dt>
  <dd>
    <t>Launch of an application URI. <bcp14>REQUIRED</bcp14> if the <spanx style="verb">app</spanx> interaction start mode is possible for this request. See <xref target="response-interact-app"/>.</t>
  </dd>
  <dt>
<spanx style="verb">user_code</spanx> (object):  </dt>
  <dd>
    <t>Display a short user code. <bcp14>REQUIRED</bcp14> if the <spanx style="verb">user_code</spanx> interaction start mode is possible for this request. See <xref target="response-interact-usercode"/>.</t>
  </dd>
  <dt>
<spanx style="verb">user_code_uri</spanx> (object):  </dt>
  <dd>
    <t>Display a short user code and URL. <bcp14>REQUIRED</bcp14> if the <spanx style="verb">user_code_uri</spanx> interaction start mode is possible for this request. <xref target="response-interact-usercodeuri"/></t>
  </dd>
  <dt>
<spanx style="verb">finish</spanx> (string):  </dt>
  <dd>
    <t>A nonce used by the client instance to verify the callback after interaction is completed. <bcp14>REQUIRED</bcp14> if the interaction finish method requested by the client instance is possible for this request. See <xref target="response-interact-finish"/>.</t>
  </dd>
</dl>

<t>Additional interaction mode responses can be defined in <xref target="IANA">a registry TBD</xref>.</t>

<t>The AS <bcp14>MUST NOT</bcp14> respond with any interaction mode that the
client instance did not indicate in its request. The AS <bcp14>MUST NOT</bcp14> respond with
any interaction mode that the AS does not support. Since interaction
responses include secret or unique information, the AS <bcp14>SHOULD</bcp14>
respond to each interaction mode only once in an ongoing request,
particularly if the client instance <xref target="continue-modify">modifies its request</xref>.</t>

<section anchor="response-interact-redirect"><name>Redirection to an arbitrary URI</name>

<t>If the client instance indicates that it can <xref target="request-interact-redirect">redirect to an arbitrary URI</xref> and the AS supports this mode for the client instance's
request, the AS responds with the "redirect" field, which is
a string containing the URI to direct the end user to. This URI <bcp14>MUST</bcp14> be
unique for the request and <bcp14>MUST NOT</bcp14> contain any security-sensitive
information such as user identifiers or access tokens.</t>

<figure><artwork><![CDATA[
"interact": {
    "redirect": "https://interact.example.com/4CF492MLVMSW9MKMXKHQ"
}
]]></artwork></figure>

<t>The URI returned is a function of the AS, but the URI itself <bcp14>MAY</bcp14> be completely
distinct from the URI the client instance uses to <xref target="request">request access</xref>, allowing an
AS to separate its user-interactive functionality from its back-end security
functionality. If the AS does not directly host the functionality accessed through
the given URI, then the means for the interaction functionality to communicate
with the rest of the AS are out of scope for this specification.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/72">See issue #72</eref> ]]</t>

<t>The client instance sends the end user to the URI to interact with the AS. The
client instance <bcp14>MUST NOT</bcp14> alter the URI in any way. The means for the client instance
to send the end user to this URI is out of scope of this specification,
but common methods include an HTTP redirect, launching the system
browser, displaying a scannable code, or printing out the URI in an
interactive console. See details of the interaction in <xref target="interaction-redirect"/>.</t>

</section>
<section anchor="response-interact-app"><name>Launch of an application URI</name>

<t>If the client instance indicates that it can <xref target="request-interact-app">launch an application URI</xref> and
the AS supports this mode for the client instance's request, the AS
responds with the "app" field, which is a string containing the URI
for the client instance to launch. This URI <bcp14>MUST</bcp14> be unique for the request and
<bcp14>MUST NOT</bcp14> contain any security-sensitive information such as user identifiers or access tokens.</t>

<figure><artwork><![CDATA[
"interact": {
    "app": "https://app.example.com/launch?tx=4CF492MLV"
}
]]></artwork></figure>

<t>The means for the launched application to communicate with the AS are out of
scope for this specification.</t>

<t>The client instance launches the URI as appropriate on its platform, and
the means for the client instance to launch this URI is out of scope of this
specification. The client instance <bcp14>MUST NOT</bcp14> alter the URI in any way. The
client instance <bcp14>MAY</bcp14> attempt to detect if an installed application will
service the URI being sent before attempting to launch the
application URI. See details of the interaction in <xref target="interaction-app"/>.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/71">See issue #71</eref> ]]</t>

</section>
<section anchor="response-interact-usercode"><name>Display of a Short User Code</name>

<t>If the client instance indicates that it can
<xref target="request-interact-usercode">display a short user-typeable code</xref>
and the AS supports this mode for the client instance's
request, the AS responds with a "user_code" field. This field is an
object that contains the following members.</t>

<dl>
  <dt>
<spanx style="verb">code</spanx> (string):  </dt>
  <dd>
    <t>A unique short code that the user
  can type into a web page. This string <bcp14>MUST</bcp14> be
  case-insensitive, <bcp14>MUST</bcp14> consist of only easily typeable
  characters (such as letters or numbers). The time in which this
  code will be accepted <bcp14>SHOULD</bcp14> be short lived, such as several
  minutes. It is <bcp14>RECOMMENDED</bcp14> that this code be no more than eight
  characters in length.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"interact": {
    "user_code": {
        "code": "A1BC-3DFF",
    }
}
]]></artwork></figure>

<t>The client instance <bcp14>MUST</bcp14> communicate the "code" to the end user in some
fashion, such as displaying it on a screen or reading it out
audibly. This code is used by the interaction component of the AS as a means
of identifying the pending grant request and does not function as an
authentication factor for the RO.</t>

<t>The URI that the end user is intended to enter the code into <bcp14>MUST</bcp14> be stable,
since the client instance is expected to have no means of communicating a
dynamic URI to the end user at runtime.</t>

<t>As this interaction mode is designed to facilitate interaction
via a secondary device, it is not expected that the client instance redirect
the end user to the URL given here at runtime.
If the client instance is capable of communicating an
short arbitrary URI to the end user for use with the user code, the client
instance can instead use the <xref target="request-interact-usercodeuri">"user_code_uri"</xref> method instead.
If the client instance is capable of communicating a long arbitrary URI to the end user,
such as through a scannable code, the
client instance can use the <xref target="request-interact-redirect">"redirect"</xref> mode
for this purpose instead of or in addition to the user code mode.</t>

<t>See details of the interaction in <xref target="interaction-usercode"/>.</t>

</section>
<section anchor="response-interact-usercodeuri"><name>Display of a Short User Code and URI</name>

<t>If the client instance indicates that it can
<xref target="request-interact-usercode">display a short user-typeable code</xref>
and the AS supports this mode for the client instance's
request, the AS responds with a "user_code_uri"
object that contains the following members.</t>

<dl>
  <dt>
<spanx style="verb">code</spanx> (string):  </dt>
  <dd>
    <t>A unique short code that the end user
  can type into a provided URI. This string <bcp14>MUST</bcp14> be
  case-insensitive, <bcp14>MUST</bcp14> consist of only easily typeable
  characters (such as letters or numbers). The time in which this
  code will be accepted <bcp14>SHOULD</bcp14> be short lived, such as several
  minutes. It is <bcp14>RECOMMENDED</bcp14> that this code be no more than eight
  characters in length.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>The interaction URI that the client instance
  will direct the RO to. This URI <bcp14>MUST</bcp14> be short enough to be
  communicated to the end user. It is <bcp14>RECOMMENDED</bcp14> that this URI
  be short enough for an end user to type in manually. The URI
  <bcp14>MUST NOT</bcp14> contain the <spanx style="verb">code</spanx> value.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"interact": {
    "user_code_uri": {
        "code": "A1BC-3DFF",
        "uri": "https://srv.ex/device"
    }
}
]]></artwork></figure>

<t>The client instance <bcp14>MUST</bcp14> communicate the "code" to the end user in some
fashion, such as displaying it on a screen or reading it out
audibly. This code is used by the interaction component of the AS as a means
of identifying the pending grant request and does not function as an
authentication factor for the RO.</t>

<t>The client instance <bcp14>MUST</bcp14> also communicate the URI to the end user. Since it is expected
that the end user will continue interaction on a secondary device,
the URI needs to be short enough to allow the end user to type or copy it to a secondary
device without mistakes.</t>

<t>The URI returned is a function of the AS, but the URI itself <bcp14>MAY</bcp14> be completely
distinct from the URI the client instance uses to <xref target="request">request access</xref>, allowing an
AS to separate its user-interactive functionality from its back-end security
functionality. If the AS does not directly host the functionality accessed through
the given URI, then the means for the interaction functionality to communicate
with the rest of the AS are out of scope for this specification.</t>

<t>See details of the interaction in <xref target="interaction-usercode"/>.</t>

</section>
<section anchor="response-interact-finish"><name>Interaction Finish</name>

<t>If the client instance indicates that it can <xref target="request-interact-finish">receive a post-interaction redirect or push at a URI</xref>
and the AS supports this mode for the
client instance's request, the AS responds with a <spanx style="verb">finish</spanx> field containing a nonce
that the client instance will use in validating the callback as defined in
<xref target="interaction-finish"/>.</t>

<figure><artwork><![CDATA[
"interact": {
    "finish": "MBDOFXG4Y5CVJCX821LH"
}
]]></artwork></figure>

<t>When the interaction is completed, the interaction component <bcp14>MUST</bcp14> contact the client instance
using either a redirect or launch of the RO's browser
or through an HTTP POST to the client instance's callback URI using the method indicated in the
<xref target="request-interact-finish">interaction request</xref> as described in <xref target="interaction-finish"/>.</t>

<t>If the AS returns a nonce, the client instance <bcp14>MUST NOT</bcp14>
continue a grant request before it receives the associated
interaction reference on the callback URI. See details in <xref target="interaction-finish"/>.</t>

</section>
<section anchor="response-interact-extend"><name>Extending Interaction Mode Responses</name>

<t>Extensions to this specification can define new interaction
mode responses in <xref target="IANA">a registry TBD</xref>. Extensions <bcp14>MUST</bcp14>
document the corresponding interaction request.</t>

</section>
</section>
<section anchor="response-subject"><name>Returning Subject Information</name>

<t>If information about the RO is requested and the AS
grants the client instance access to that data, the AS returns the approved
information in the "subject" response field. The AS <bcp14>MUST</bcp14> return the <spanx style="verb">subject</spanx> field only in cases where the AS is sure that
the RO and the end user are the same party. This can be accomplished through some forms of
<xref target="authorization">interaction with the RO</xref>.</t>

<t>This field is an object with the following <bcp14>OPTIONAL</bcp14> properties.</t>

<dl>
  <dt>
<spanx style="verb">sub_ids</spanx> (array of objects):  </dt>
  <dd>
    <t>An array of subject identifiers for the
  RO, as defined by
  <xref target="I-D.ietf-secevent-subject-identifiers"/>.
  <bcp14>REQUIRED</bcp14> if returning subject identifiers.</t>
  </dd>
  <dt>
<spanx style="verb">assertions</spanx> (array of objects):  </dt>
  <dd>
    <t>An array containing assertions as objects each containing the assertion
  format and the assertion value as the JSON string serialization of the assertion.
  Possible formats include <spanx style="verb">id_token</spanx> for an <xref target="OIDC"/> ID Token and <spanx style="verb">saml2</spanx> for a SAML 2 assertion.
  Additional assertion formats are defined by <xref target="IANA">a registry TBD</xref>.
  <bcp14>REQUIRED</bcp14> if returning assertions.</t>
  </dd>
  <dt>
<spanx style="verb">updated_at</spanx> (string):  </dt>
  <dd>
    <t>Timestamp as an ISO8610 date string, indicating
  when the identified account was last updated. The client instance <bcp14>MAY</bcp14> use
  this value to determine if it needs to request updated profile
  information through an identity API. The definition of such an
  identity API is out of scope for this specification.
  <bcp14>RECOMMENDED</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
"subject": {
  "sub_ids": [ {
    "format": "opaque",
    "id": "XUT2MFM1XBIKJKSDU8QM"
  } ],
  "assertions": [ {
    "format": "id_token",
    "value": "eyj..."
  } ]
}
]]></artwork></figure>

<t>Subject identifiers returned by the AS <bcp14>SHOULD</bcp14> uniquely identify the RO at the
AS. Some forms of subject identifier are opaque to the client instance (such as the subject of an
issuer and subject pair), while others forms (such as email address and phone number) are
intended to allow the client instance to correlate the identifier with other account information
at the client instance. The AS <bcp14>MUST</bcp14> ensure that the returned subject identifiers only apply to the authenticated end user. The client instance <bcp14>MUST NOT</bcp14> request or use any returned subject identifiers for communication
purposes (see <xref target="request-subject"/>). That is, a subject identifier returned in the format of an email address or
a phone number only identifies the RO to the AS and does not indicate that the
AS has validated that the represented email address or phone number in the identifier
is suitable for communication with the current user. To get such information,
the client instance <bcp14>MUST</bcp14> use an identity protocol to request and receive additional identity
claims. The details of an identity protocol and associated schema
are outside the scope of this specification.</t>

<t>Extensions to this specification <bcp14>MAY</bcp14> define additional response
properties in <xref target="IANA">a registry TBD</xref>.</t>

<t>See <xref target="security-assertions"/> for considerations that the client instance has to make when accepting
and processing assertions from the AS.</t>

</section>
<section anchor="response-dynamic-handles"><name>Returning a Dynamically-bound Client Instance Identifier</name>

<t>Many parts of the client instance's request can be passed as either a value
or a reference. The use of a reference in place of a value allows
for a client instance to optimize requests to the AS.</t>

<t>Some references, such as for the <xref target="request-instance">client instance's identity</xref>
or the <xref target="resource-access-reference">requested resources</xref>, can be managed statically through an
admin console or developer portal provided by the AS or RS. The developer
of the client software can include these values in their code for a more
efficient and compact request.</t>

<t>If desired, the AS <bcp14>MAY</bcp14> also generate and return an instance identifier
dynamically to the client instance in the response to facilitate multiple
interactions with the same client instance over time. The client instance <bcp14>SHOULD</bcp14> use this
instance identifier in future requests in lieu of sending the associated data
values in the <spanx style="verb">client</spanx> field.</t>

<t>Dynamically generated client instance identifiers are string values that <bcp14>MUST</bcp14> be
protected by the client instance as secrets. Instance identifier values <bcp14>MUST</bcp14> be unguessable
and <bcp14>MUST NOT</bcp14> contain any information that would compromise any party if revealed. Instance identifier values are
opaque to the client instance.</t>

<dl>
  <dt>
<spanx style="verb">instance_id</spanx> (string):  </dt>
  <dd>
    <t>A string value used to represent the information
  in the <spanx style="verb">client</spanx> object that the client instance can use in a future request, as
  described in <xref target="request-instance"/>.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>This non-normative example shows an instance identifier along side an issued access token.</t>

<figure><artwork><![CDATA[
{
    "instance_id": "7C7C4AZ9KHRS6X63AJAO",
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0"
    }
}

]]></artwork></figure>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/77">See issue #77</eref> ]]</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/78">See issue #78</eref> ]]</t>

</section>
<section anchor="response-error"><name>Error Response</name>

<t>If the AS determines that the request cannot be issued for any
reason, it responds to the client instance with an error message.</t>

<dl>
  <dt>
<spanx style="verb">error</spanx> (string):  </dt>
  <dd>
    <t>A single ASCII error code from the
following, with additional values available in <xref target="IANA">a registry TBD</xref>.
<bcp14>REQUIRED</bcp14>.
</t>

    <dl>
      <dt>
<spanx style="verb">"invalid_request"</spanx>:      </dt>
      <dd>
        <t>The request is missing a required parameter, includes an
invalid parameter value or is otherwise malformed.</t>
      </dd>
      <dt>
<spanx style="verb">"invalid_client"</spanx>:      </dt>
      <dd>
        <t>The request was made from a client that was not recognized
or allowed by the AS, or the client's signature validation failed.</t>
      </dd>
      <dt>
<spanx style="verb">"user_denied"</spanx>:      </dt>
      <dd>
        <t>The RO denied the request.</t>
      </dd>
      <dt>
<spanx style="verb">"too_fast"</spanx>:      </dt>
      <dd>
        <t>The client instance did not respect the timeout in the wait response.</t>
      </dd>
      <dt>
<spanx style="verb">"unknown_request"</spanx>:      </dt>
      <dd>
        <t>The request referenced an unknown ongoing access request.</t>
      </dd>
      <dt>
<spanx style="verb">"request_denied"</spanx>:      </dt>
      <dd>
        <t>The request was denied for an unspecified reason.</t>
      </dd>
    </dl>
  </dd>
  <dt>
<spanx style="verb">error_description</spanx> (string):  </dt>
  <dd>
    <t>A human-readable string description of the error intended for the
developer of the client.
<bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>For example, if the RO denied the request while interacting with the AS,
the AS would return the following error when the client instance tries to
continue the grant request:</t>

<figure><artwork><![CDATA[
{
  "error": "user_denied"
}
]]></artwork></figure>

</section>
<section anchor="response-extend"><name>Extending the Response</name>

<t>Extensions to this specification <bcp14>MAY</bcp14> define additional fields for
the grant response in <xref target="IANA">a registry TBD</xref>.</t>

</section>
</section>
<section anchor="authorization"><name>Determining Authorization and Consent</name>

<t>When the client instance makes its <xref target="request">initial request</xref> to the AS for delegated access, it
is capable of asking for several different kinds of information in response:</t>

<t><list style="symbols">
  <t>the access being requested in the <spanx style="verb">access_token</spanx> request parameter</t>
  <t>the subject information being requested in the <spanx style="verb">subject</spanx> request parameter</t>
  <t>any additional requested information defined by extensions of this protocol</t>
</list></t>

<t>The AS determines what authorizations and consents are required to fulfill this requested delegation. The details of how the
AS makes this determination are out of scope for this document. However, there are several common patterns
defined and supported by GNAP for fulfilling these requirements, including information sent by the client instance, information
gathered through the interaction process, and information supplied by external parties. An individual AS
can define its own policies and processes for deciding when and how to gather the necessary authorizations
and consent.</t>

<t>The client instance can supply information directly to the AS in its request. From this information, the AS can determine
if the requested delegation can be granted immediately. The client instance can send several kinds of things, including:</t>

<t><list style="symbols">
  <t>the identity of the client instance, known from the presented keys or associated identifiers</t>
  <t>the identity of the end user presented in the <spanx style="verb">user</spanx> request parameter</t>
  <t>any additional information presented by the client instance in the request, including any extensions</t>
</list></t>

<t>The AS will verify this presented information in the context of the client instance's request and
can only trust the information as much as it trusts the presentation and context of the information.
If the AS determines that the information presented in the initial request is sufficient for granting the requested
access, the AS <bcp14>MAY</bcp14> return the positive results <xref target="response">immediately in its response</xref> with
access tokens and subject information.</t>

<t>If the AS determines that additional runtime authorization is required, the AS can either deny the request
outright or use a number of means at its disposal to gather that authorization from the appropriate ROs,
including for example:</t>

<t><list style="symbols">
  <t>starting interaction with the end user facilitated by the client software, such as a redirection or user code</t>
  <t>challenging the client instance through a challenge-response mechanism</t>
  <t>requesting that the client instance present specific additional information, such as a user's credential or an assertion</t>
  <t>contacting an RO through an out-of-band mechanism, such as a push notification</t>
  <t>contacting an auxiliary software process through an out-of-band mechanism, such as querying a digital wallet</t>
</list></t>

<t>The authorization and consent gathering process in GNAP is left deliberately flexible to allow for a
wide variety of different deployments, interactions, and methodologies.
In this process, the AS can gather consent from the RO as necessitated by the access that has
been requested. The AS can sometimes determine which RO needs to consent based on what has been requested
by the client instance, such as a specific RS record, an identified user, or a request requiring specific
access such as approval by an administrator. If the AS has a means of contacting the RO directly, it could
do so without involving the client instance in its consent gathering process. For example, the AS could
push a notification to a known RO and have the RO approve the pending request asynchronously. These interactions
can be through an interface of the AS itself (such as a hosted web page), through another application (such as
something installed on the RO's device), through a messaging fabric, or any other means.
When interacting with an RO, the AS can do anything it needs to determine the authorization of the requested grant,
including:</t>

<t><list style="symbols">
  <t>authenticate the RO, through a local account or some other means such as federated login</t>
  <t>validate the RO through presentation of claims, attributes, or other information</t>
  <t>prompt the RO for consent for the requested delegation</t>
  <t>describe to the RO what information is being released, to whom, and for what purpose</t>
  <t>provide warnings to the RO about potential attacks or negative effects of allowing the information</t>
  <t>allow the RO to modify the client instance's requested access, including limiting or expanding that access</t>
  <t>provide the RO with artifacts such as receipts to facilitate an audit trail of authorizations</t>
  <t>allow the RO to deny the requested delegation</t>
</list></t>

<t>The AS is also allowed to request authorization from more than one RO, if the AS deems fit. For example, a medical
record might need to be released by both an attending nurse and a physician, or both owners of a bank account
need to sign off on a transfer request. Alternatively, the AS could require N of M possible RO's
to approve a given request in order. The AS could also determine that the end user is not the appropriate RO
for a given request and reach out to the appropriate RO asynchronously. The details of determining which RO's are required for a given
request are out of scope for this specification.</t>

<t>The client instance can also indicate that it is capable of facilitating interaction with the end user,
another party, or another piece of software through its <xref target="request-interact-start">interaction start</xref> request.
In many cases, the end user is delegating their own access as RO to the client instance. Here, the
AS needs to determine the identity of the end user and will often need to interact directly with
the end user to determine their status as an RO and collect their consent. If the AS has determined
that authorization is required and the AS can support one or more of the requested interaction start
methods, the AS returns the associated <xref target="response-interact">interaction start responses</xref>. The client
instance <bcp14>SHOULD</bcp14> <xref target="interaction-start">initiate one or more of these interaction methods</xref> in order to
facilitate the granting of the request. If more than one interaction start method is available,
the means by which the client chooses which methods to follow is out of scope of this specification.
The client instance <bcp14>MUST</bcp14> use each interaction method once at most.</t>

<t>After starting interaction, the client instance can then make a <xref target="continue-request">continuation request</xref>
either in response to a signal indicating the <xref target="interaction-finish">finish of the interaction</xref>, through
polling, or through some other method defined by an extension of this specification.</t>

<t>If the AS and client instance have not reached a state where the delegation can be granted, the
AS and client instance can repeat the interaction process as long as the AS supplies the client
instance with <xref target="response-continue">continuation information</xref> to facilitate the ongoing requests.</t>

<section anchor="interaction-start"><name>Interaction Start Methods</name>

<t>To initiate an interaction start method indicated by the
<xref target="response-interact">interaction start responses</xref> from the AS, the client instance
follows the steps defined by that interaction method. The actions of the client instance
required for the interaction start modes defined in this specification are described
in the following sections.</t>

<section anchor="interaction-redirect"><name>Interaction at a Redirected URI</name>

<t>When the end user is directed to an arbitrary URI through the <xref target="response-interact-redirect">"redirect"</xref>
mode, the client instance facilitates opening the URI through the end user's web browser.
The client instance could launch the URI through the system browser, provide a clickable
link, redirect the user through HTTP response codes, or display the URI in a form
the end user can use to launch such as a multidimensional barcode.
With this method, it is common (though not required) for the RO to be the same party as the end user, since
the client instance has to communicate the redirection URI to the end user.</t>

<t>In many cases, the URI indicates a web page hosted at the AS, allowing the
AS to authenticate the end user as the RO and interactively provide consent.
The URI value is used to identify the grant request being authorized.
If the URI cannot be associated with a currently active
request, the AS <bcp14>MUST</bcp14> display an error to the RO and <bcp14>MUST NOT</bcp14> attempt
to redirect the RO back to any client instance even if a <xref target="request-interact-callback-redirect">redirect finish method is supplied</xref>.
If the URI is not hosted by the AS directly, the means of communication between
the AS and this URI are out of scope for this specification.</t>

<t>The client instance <bcp14>MUST NOT</bcp14> modify the URI when launching it,
in particular the client instance <bcp14>MUST NOT</bcp14> add any parameters to the URI.
The URI <bcp14>MUST</bcp14> be reachable from the end user's browser, though
the URI <bcp14>MAY</bcp14> be opened on a separate device from the client instance
itself. The URI <bcp14>MUST</bcp14> be accessible from an HTTP GET
request and <bcp14>MUST</bcp14> be protected by HTTPS or equivalent means.</t>

</section>
<section anchor="interaction-usercode"><name>Interaction at the Static User Code URI</name>

<t>When the end user is directed to enter a short code through the <xref target="response-interact-usercode">"user_code"</xref>
mode, the client instance communicates the user code to the end user and
directs the end user to enter that code at an associated URI.
This mode is used when the client instance is not able to communicate or facilitate launching
an arbitrary URI. The associated URI could be statically configured with the client instance or
in the client software's documentation. As a consequence, these URIs <bcp14>SHOULD</bcp14> be short.
The user code URI <bcp14>MUST</bcp14> be reachable from the end user's browser, though
the URI is usually be opened on a separate device from the client instance
itself. Since it is designed to be typed in, the URI <bcp14>SHOULD</bcp14> be accessible from an HTTP GET
request and <bcp14>MUST</bcp14> be protected by HTTPS or equivalent means.</t>

<t>In many cases, the URI indicates a web page hosted at the AS, allowing the
AS to authenticate the end user as the RO and interactively provide consent.
The value of the user code is used to identify the grant request being authorized.
If the user code cannot be associated with a currently active
request, the AS <bcp14>MUST</bcp14> display an error to the RO and <bcp14>MUST NOT</bcp14> attempt
to redirect the RO back to any client instance even if a <xref target="request-interact-callback-redirect">redirect finish method is supplied</xref>.
If the interaction component at the user code URI is not hosted by the AS directly, the means of communication between
the AS and this URI, including communication of the user code itself, are out of scope for this specification.</t>

<t>When the RO enters this code at the user code URI,
the AS <bcp14>MUST</bcp14> uniquely identify the pending request that the code was associated
with. If the AS does not recognize the entered code, the interaction component <bcp14>MUST</bcp14>
display an error to the user. If the AS detects too many unrecognized code
enter attempts, the interaction component <bcp14>SHOULD</bcp14> display an error to the user and
<bcp14>MAY</bcp14> take additional actions such as slowing down the input interactions.
The user should be warned as such an error state is approached, if possible.</t>

</section>
<section anchor="interaction-usercodeuri"><name>Interaction at a Dynamic User Code URI</name>

<t>When the end user is directed to enter a short code through the <xref target="response-interact-usercodeuri">"user_code_uri"</xref>
mode, the client instance communicates the user code and associated URI to the end user and
directs the end user to enter that code at the URI.
This mode is used when the client instance is not able to facilitate launching
an arbitrary URI but can communicate arbitrary values like URIs. As a consequence, these URIs
<bcp14>SHOULD</bcp14> be short.
The client instance <bcp14>MUST NOT</bcp14> modify the URI when communicating it to the end user;
in particular the client instance <bcp14>MUST NOT</bcp14> add any parameters to the URI.
The user code URI <bcp14>MUST</bcp14> be reachable from the end user's browser, though
the URI is usually be opened on a separate device from the client instance
itself. Since it is designed to be typed in, the URI <bcp14>SHOULD</bcp14> be accessible from an HTTP GET
request and <bcp14>MUST</bcp14> be protected by HTTPS or equivalent means.</t>

<t>In many cases, the URI indicates a web page hosted at the AS, allowing the
AS to authenticate the end user as the RO and interactively provide consent.
The value of the user code is used to identify the grant request being authorized.
If the user code cannot be associated with a currently active
request, the AS <bcp14>MUST</bcp14> display an error to the RO and <bcp14>MUST NOT</bcp14> attempt
to redirect the RO back to any client instance even if a <xref target="request-interact-callback-redirect">redirect finish method is supplied</xref>.
If the interaction component at the user code URI is not hosted by the AS directly, the means of communication between
the AS and this URI, including communication of the user code itself, are out of scope for this specification.</t>

<t>When the RO enters this code at the given URI,
the AS <bcp14>MUST</bcp14> uniquely identify the pending request that the code was associated
with. If the AS does not recognize the entered code, the interaction component <bcp14>MUST</bcp14>
display an error to the user. If the AS detects too many unrecognized code
enter attempts, the interaction component <bcp14>SHOULD</bcp14> display an error to the user and
<bcp14>MAY</bcp14> take additional actions such as slowing down the input interactions.
The user should be warned as such an error state is approached, if possible.</t>

</section>
<section anchor="interaction-app"><name>Interaction through an Application URI</name>

<t>When the client instance is directed to launch an application through the
<xref target="response-interact-app">"app"</xref> mode, the client launches the
URI as appropriate to the system, such as through a deep link or custom URI
scheme registered to a mobile application. The means by which the AS and the
launched application communicate with each other and perform any
of the required actions are out of scope for this specification.</t>

</section>
</section>
<section anchor="interaction-finish"><name>Post-Interaction Completion</name>

<t>If an interaction <xref target="response-interact-finish">"finish"</xref> method is
associated with the current request, the AS <bcp14>MUST</bcp14> follow the appropriate
method at upon completion of interaction in order to signal the client
instance to continue, except for some limited error cases discussed below.
If a finish method is not available, the AS <bcp14>SHOULD</bcp14> instruct the RO to
return to the client instance upon completion.</t>

<t>The AS <bcp14>MUST</bcp14> create an interaction reference and associate that
reference with the current interaction and the underlying pending
request. This interaction reference value <bcp14>MUST</bcp14> be sufficiently random so as not to be
guessable by an attacker. The interaction reference <bcp14>MUST</bcp14> be
one-time-use to prevent interception and replay attacks.</t>

<t>The AS <bcp14>MUST</bcp14> calculate a hash value based on the client instance and AS nonces and the
interaction reference, as described in
<xref target="interaction-hash"/>. The client instance will use this value to
validate the "finish" call.</t>

<t>The AS <bcp14>MUST</bcp14> send the hash and interaction reference based on
the interaction finish mode as described in the following
sections.</t>

<t>Note that the "finish" method still occurs in many error cases, such as when the RO has denied
access. This pattern allows the client instance to potentially recover from the error
state by modifying its request or providing additional information directly to the AS in a
continuation request. The AS <bcp14>MUST NOT</bcp14> follow the "finish" method in the
following circumstances:</t>

<t><list style="symbols">
  <t>The AS has determined that any URIs involved with the finish method are dangerous or blocked.</t>
  <t>The AS cannot determine which ongoing grant request is being referenced.</t>
  <t>The ongoing grant request has been cancelled or otherwise blocked.</t>
</list></t>

<section anchor="interaction-callback"><name>Completing Interaction with a Browser Redirect to the Callback URI</name>

<t>When using the <xref target="response-interact-finish"><spanx style="verb">redirect</spanx> interaction finish method</xref>,
the AS signals to the client instance that interaction is
complete and the request can be continued by directing the RO (in
their browser) back to the client instance's redirect URI sent in <xref target="request-interact-callback-redirect">the callback request</xref>.</t>

<t>The AS secures this redirect by adding the hash and interaction
reference as query parameters to the client instance's redirect URI.</t>

<dl>
  <dt>
<spanx style="verb">hash</spanx>:  </dt>
  <dd>
    <t>The interaction hash value as
  described in <xref target="interaction-hash"/>.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">interact_ref</spanx>:  </dt>
  <dd>
    <t>The interaction reference
  generated for this interaction.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>The means of directing the RO to this URI are outside the scope
of this specification, but common options include redirecting the
RO from a web page and launching the system browser with the
target URI. See <xref target="security-redirect-status-codes"/> for considerations on
which HTTP status code to use when redirecting a request that
potentially contains credentials.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

https://client.example.net/return/123455\
  ?hash=p28jsq0Y2KK3WS__a42tavNC64ldGTBroywsWxT4md_jZQ1R2\
    HZT8BOWYHcLmObM7XHPAdJzTZMtKBsaraJ64A\
  &interact_ref=4IFWWIKYBC2PQ6U56NL1
]]></artwork></figure>

<t>When receiving the request, the client instance <bcp14>MUST</bcp14> parse the query
parameters to calculate and validate the hash value as described in
<xref target="interaction-hash"/>. If the hash validates, the client instance
sends a continuation request to the AS as described in
<xref target="continue-after-interaction"/> using the interaction
reference value received here.</t>

</section>
<section anchor="interaction-pushback"><name>Completing Interaction with a Direct HTTP Request Callback</name>

<t>When using the <xref target="response-interact-finish"><spanx style="verb">push</spanx> interaction finish method</xref>,
the AS signals to the client instance that interaction is
complete and the request can be continued by sending an HTTP POST
request to the client instance's callback URI sent in <xref target="request-interact-callback-push">the callback request</xref>.</t>

<t>The entity message body is a JSON object consisting of the
following two fields:</t>

<dl>
  <dt>
<spanx style="verb">hash</spanx> (string):  </dt>
  <dd>
    <t>The interaction hash value as
  described in <xref target="interaction-hash"/>.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">interact_ref</spanx> (string)  </dt>
  <dd>
    <t>The interaction reference
  generated for this interaction.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /push/554321 HTTP/1.1
Host: client.example.net
Content-Type: application/json

{
  "hash": "p28jsq0Y2KK3WS__a42tavNC64ldGTBroywsWxT4md_jZQ1R\
    2HZT8BOWYHcLmObM7XHPAdJzTZMtKBsaraJ64A",
  "interact_ref": "4IFWWIKYBC2PQ6U56NL1"
}
]]></artwork></figure>

<t>When processing such a call, the AS <bcp14>MUST</bcp14> protect itself against SSRF attacks as discussed in
<xref target="security-ssrf"/>.</t>

<t>When receiving the request, the client instance <bcp14>MUST</bcp14> parse the JSON object
and validate the hash value as described in
<xref target="interaction-hash"/>. If the hash validates, the client instance sends
a continuation request to the AS as described in <xref target="continue-after-interaction"/> using the interaction
reference value received here.</t>

</section>
<section anchor="interaction-hash"><name>Calculating the interaction hash</name>

<t>The "hash" parameter in the request to the client instance's callback URI ties
the front channel response to an ongoing request by using values
known only to the parties involved. This security mechanism allows the client instance to protect itself against
several kinds of session fixation and injection attacks. The AS <bcp14>MUST</bcp14>
always provide this hash, and the client instance <bcp14>MUST</bcp14> validate the hash when received.</t>

<t>To calculate the "hash" value, the party doing the calculation
creates a hash string by concatenating the following values in the following order
using a single newline (<spanx style="verb">\n</spanx>) character to separate them:</t>

<t><list style="symbols">
  <t>the "nonce" value sent by the client instance in the <xref target="request-interact-finish">interaction "finish" section of the initial request</xref></t>
  <t>the AS's nonce value from <xref target="response-interact-finish">the interaction finish response</xref></t>
  <t>the "interact_ref" returned from the AS as part of the <xref target="interaction-finish">interaction finish method</xref></t>
  <t>the grant endpoint URI the client instance used to make its <xref target="request">initial request</xref></t>
</list></t>

<t>There is no padding or whitespace before or after any of the lines,
and no trailing newline character.</t>

<figure><artwork><![CDATA[
VJLO6A4CAYLBXHTR0KRO
MBDOFXG4Y5CVJCX821LH
4IFWWIKYBC2PQ6U56NL1
https://server.example.com/tx
]]></artwork></figure>

<t>The party then hashes this string with the appropriate algorithm
based on the "hash_method" parameter under the "finish" key.
If the "hash_method" value is not present in the client instance's
request, the algorithm defaults to "sha3".</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/56">See issue #56</eref> ]]</t>

<section anchor="hash-sha3"><name>SHA3-512</name>

<t>The "sha3" hash method consists of hashing the input string
with the 512-bit SHA3 algorithm. The byte array is then encoded
using URL Safe Base64 with no padding <xref target="RFC4648"/>. The resulting string is the
hash value.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

p28jsq0Y2KK3WS__a42tavNC64ldGTBroywsWxT4md_jZQ1R2HZT8BOWYHcLmObM\
  7XHPAdJzTZMtKBsaraJ64A
]]></artwork></figure>

</section>
<section anchor="hash-sha2"><name>SHA2-512</name>

<t>The "sha2" hash method consists of hashing the input string
with the 512-bit SHA2 algorithm. The byte array is then encoded
using URL Safe Base64 with no padding <xref target="RFC4648"/>. The resulting string is the
hash value.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

62SbcD3Xs7L40rjgALA-ymQujoh2LB2hPJyX9vlcr1H6ecChZ8BNKkG_HrOKP_Bp\
  j84rh4mC9aE9x7HPBFcIHw
]]></artwork></figure>

</section>
</section>
</section>
</section>
<section anchor="continue-request"><name>Continuing a Grant Request</name>

<t>While it is possible for the AS to return a <xref target="response">grant response</xref> with all the
client instance's requested information (including <xref target="response-token">access tokens</xref> and
<xref target="response-subject">direct user information</xref>), it's more common that the AS and
the client instance will need to communicate several times over the lifetime of an access grant.
This is often part of facilitating <xref target="authorization">interaction</xref>, but it could
also be used to allow the AS and client instance to continue negotiating the parameters of
the <xref target="request">original grant request</xref>.</t>

<t>To enable this ongoing negotiation, the AS provides a continuation API to the client software.
The AS returns a <spanx style="verb">continue</spanx> field
<xref target="response-continue">in the response</xref> that contains information the client instance needs to
access this API, including a URI to access
as well as a continuation access token to use during the requests.</t>

<t>The continuation access token is initially bound to the same key and method the client instance used to make
the initial request. As a consequence,
when the client instance makes any calls to the continuation URI, the client instance <bcp14>MUST</bcp14> present
the continuation access token as described in <xref target="use-access-token"/> and present
proof of the client instance's key (or its most recent rotation)
by signing the request as described in <xref target="binding-keys"/>.
The AS <bcp14>MUST</bcp14> validate all keys presented by the client instance or referenced in an
ongoing request for each call within that request.</t>

<t>Access tokens other than the continuation access tokens <bcp14>MUST NOT</bcp14> be usable for continuation requests.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/85">See issue #85</eref> ]]</t>

<t>For example, here the client instance makes a POST request to a unique URI and signs
the request with HTTP Message Signatures:</t>

<figure><artwork><![CDATA[
POST /continue/KSKUOMUKM HTTP/1.1
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Host: server.example.com
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>The AS <bcp14>MUST</bcp14> be able to tell from the client instance's request which specific ongoing request
is being accessed, using a combination of the continuation URI,
the provided continuation access token, and the client instance identified by the key signature.
If the AS cannot determine a single active grant request to map the
continuation request to, the AS <bcp14>MUST</bcp14> return an error.</t>

<t>The ability to continue an already-started request allows the client instance to perform several
important functions, including presenting additional information from interaction,
modifying the initial request, and getting the current state of the request.</t>

<t>All requests to the continuation API are protected by this bound continuation access token.
For example, here the client instance makes a POST request to a stable continuation endpoint
URI with the <xref target="continue-after-interaction">interaction reference</xref>,
includes the access token, and signs with HTTP Message Signatures:</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
  "interact_ref": "4IFWWIKYBC2PQ6U56NL1"
}
]]></artwork></figure>

<t>If a <spanx style="verb">wait</spanx> parameter was included in the <xref target="response-continue">continuation response</xref>, the
client instance <bcp14>MUST NOT</bcp14> call the continuation URI prior to waiting the number of
seconds indicated. If no <spanx style="verb">wait</spanx> period is indicated, the client instance
<bcp14>MUST NOT</bcp14> poll immediately and <bcp14>SHOULD</bcp14>
wait at least 5 seconds. If the client instance does not respect the
given wait period, the AS <bcp14>MUST</bcp14> return the error <spanx style="verb">too_fast</spanx> defined in <xref target="response-error"/>.</t>

<t>The response from the AS is a JSON object and <bcp14>MAY</bcp14> contain any of the
fields described in <xref target="response"/>, as described in more detail in the
sections below.</t>

<t>If the AS determines that the client instance can
make a further continuation request, the AS <bcp14>MUST</bcp14> include a new
<xref target="response-continue">"continue" response</xref>.
The new <spanx style="verb">continue</spanx> response <bcp14>MUST</bcp14> include a continuation access token as well, and
this token <bcp14>SHOULD</bcp14> be a new access token, invalidating the previous access token.
If the AS does not return a new <spanx style="verb">continue</spanx> response, the client instance
<bcp14>MUST NOT</bcp14> make an additional continuation request. If a client instance does so,
the AS <bcp14>MUST</bcp14> return an error.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/87">See issue #87</eref> ]]</t>

<t>For continuation functions that require the client instance to send a message body, the body <bcp14>MUST</bcp14> be
a JSON object.</t>

<section anchor="continue-after-interaction"><name>Continuing After a Completed Interaction</name>

<t>When the AS responds to the client instance's <spanx style="verb">finish</spanx> method as in <xref target="interaction-callback"/>, this
response includes an interaction reference. The client instance <bcp14>MUST</bcp14> include that value as the field
<spanx style="verb">interact_ref</spanx> in a POST request to the continuation URI.</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
  "interact_ref": "4IFWWIKYBC2PQ6U56NL1"
}
]]></artwork></figure>

<t>Since the interaction reference is a one-time-use value as described in <xref target="interaction-callback"/>,
if the client instance needs to make additional continuation calls after this request, the client instance
<bcp14>MUST NOT</bcp14> include the interaction reference. If the AS detects a client instance submitting the same
interaction reference multiple times, the AS <bcp14>MUST</bcp14> return an error and <bcp14>SHOULD</bcp14> invalidate
the ongoing request.</t>

<t>The <xref target="response">grant response</xref> <bcp14>MAY</bcp14> contain any newly-created <xref target="response-token">access tokens</xref> or
newly-released <xref target="response-subject">subject claims</xref>. The response <bcp14>MAY</bcp14> contain
a new <xref target="response-continue">"continue" response</xref> as described above. The response
<bcp14>SHOULD NOT</bcp14> contain any <xref target="response-interact">interaction responses</xref>.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/89">See issue #89</eref> ]]</t>

<t>For example, if the request is successful in causing the AS to issue access tokens and
release opaque subject claims, the response could look like this:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
    },
    "subject": {
        "sub_ids": [ {
          "format": "opaque",
          "id": "J2G8G8O4AZ"
        } ]
    }
}
]]></artwork></figure>

<t>With this example, the client instance can not make an additional continuation request because
a <spanx style="verb">continue</spanx> field is not included.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/88">See issue #88</eref> ]]</t>

</section>
<section anchor="continue-poll"><name>Continuing During Pending Interaction</name>

<t>When the client instance does not include a <spanx style="verb">finish</spanx> parameter, the client instance will often need to
poll the AS until the RO has authorized the request. To do so, the client instance makes a POST
request to the continuation URI as in <xref target="continue-after-interaction"/>, but does not
include a message body.</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>The <xref target="response">grant response</xref> <bcp14>MAY</bcp14> contain any newly-created <xref target="response-token">access tokens</xref> or
newly-released <xref target="response-subject">subject claims</xref>. The response <bcp14>MAY</bcp14> contain
a new <xref target="response-continue">"continue" response</xref> as described above. If a <spanx style="verb">continue</spanx>
field is included, it <bcp14>SHOULD</bcp14> include a <spanx style="verb">wait</spanx> field to facilitate a reasonable polling rate by
the client instance. The response <bcp14>SHOULD NOT</bcp14> contain <xref target="response-interact">interaction responses</xref>.</t>

<t>For example, if the request has not yet been authorized by the RO, the AS could respond
by telling the client instance to make another continuation request in the future. In this example,
a new, unique access token has been issued for the call, which the client instance will use in its
next continuation request.</t>

<figure><artwork><![CDATA[
{
    "continue": {
        "access_token": {
            "value": "33OMUKMKSKU80UPRY5NM"
        },
        "uri": "https://server.example.com/continue",
        "wait": 30
    }
}
]]></artwork></figure>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/90">See issue #90</eref> ]]</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/91">See issue #91</eref> ]]</t>

<t>If the request is successful in causing the AS to issue access tokens and
release subject claims, the response could look like this example:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
    },
    "subject": {
        "sub_ids": [ {
          "format": "opaque",
          "id": "J2G8G8O4AZ"
        } ]
    }
}
]]></artwork></figure>

<t>See <xref target="security-polling"/> for considerations on polling for continuation without an interaction
<spanx style="verb">finish</spanx> method.</t>

</section>
<section anchor="continue-modify"><name>Modifying an Existing Request</name>

<t>The client instance might need to modify an ongoing request, whether or not tokens have already been
issued or claims have already been released. In such cases, the client instance makes an HTTP PATCH
request to the continuation URI and includes any fields it needs to modify. Fields
that aren't included in the request are considered unchanged from the original request.</t>

<t>The client instance <bcp14>MAY</bcp14> include the <spanx style="verb">access_token</spanx> and <spanx style="verb">subject</spanx> fields as described in <xref target="request-token"/>
and <xref target="request-subject"/>. Inclusion of these fields override any values in the initial request,
which <bcp14>MAY</bcp14> trigger additional requirements and policies by the AS. For example, if the client instance is asking for
more access, the AS could require additional interaction with the RO to gather additional consent.
If the client instance is asking for more limited access, the AS could determine that sufficient authorization
has been granted to the client instance and return the more limited access rights immediately.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/92">See issue #92</eref> ]]</t>

<t>The client instance <bcp14>MAY</bcp14> include the <spanx style="verb">interact</spanx> field as described in <xref target="request-interact"/>. Inclusion of
this field indicates that the client instance is capable of driving interaction with the RO, and this field
replaces any values from a previous request. The AS <bcp14>MAY</bcp14> respond to any of the interaction
responses as described in <xref target="response-interact"/>, just like it would to a new request.</t>

<t>The client instance <bcp14>MAY</bcp14> include the <spanx style="verb">user</spanx> field as described in <xref target="request-user"/> to present new assertions
or information about the end user.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/93">See issue #93</eref> ]]</t>

<t>The client instance <bcp14>MUST NOT</bcp14> include the <spanx style="verb">client</spanx> section of the request.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/94">See issue #94</eref> ]]</t>

<t>The client instance <bcp14>MAY</bcp14> include post-interaction responses such as described in <xref target="continue-after-interaction"/>.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/95">See issue #95</eref> ]]</t>

<t>Modification requests <bcp14>MUST NOT</bcp14> alter previously-issued access tokens. Instead, any access
tokens issued from a continuation are considered new, separate access tokens. The AS
<bcp14>MAY</bcp14> revoke existing access tokens after a modification has occurred.
[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/96">See issue #96</eref> ]]</t>

<t>If the modified request can be granted immediately by the AS,
the <xref target="response">grant response</xref> <bcp14>MAY</bcp14> contain any newly-created <xref target="response-token">access tokens</xref> or
newly-released <xref target="response-subject">subject claims</xref>. The response <bcp14>MAY</bcp14> contain
a new <xref target="response-continue">"continue" response</xref> as described above. If interaction
can occur, the response <bcp14>SHOULD</bcp14> contain <xref target="response-interact">interaction responses</xref> as well.</t>

<t>For example, a client instance initially requests a set of resources using references:</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "read", "write"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return/123455",
            "nonce": "LKLTI25DK82FX4T4QFZC"
        }
    },
    "client": "987YHGRT56789IOLK"
}
]]></artwork></figure>

<t>Access is granted by the RO, and a token is issued by the AS.
In its final response, the AS includes a <spanx style="verb">continue</spanx> field, which includes
a separate access token for accessing the continuation API:</t>

<figure><artwork><![CDATA[
{
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue",
        "wait": 30
    },
    "access_token": {
        "value": "RP1LT0-OS9M2P_R64TB",
        "access": [
            "read", "write"
        ]
    }
}
]]></artwork></figure>

<t>This <spanx style="verb">continue</spanx> field allows the client instance to make an eventual continuation call. In the future,
the client instance realizes that it no longer needs
"write" access and therefore modifies its ongoing request, here asking for just "read" access
instead of both "read" and "write" as before.</t>

<figure><artwork><![CDATA[
PATCH /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "read"
        ]
    }
    ...
}
]]></artwork></figure>

<t>The AS replaces the previous <spanx style="verb">access</spanx> from the first request, allowing the AS to
determine if any previously-granted consent already applies. In this case, the AS would
likely determine that reducing the breadth of the requested access means that new access
tokens can be issued to the client instance. The AS would likely revoke previously-issued access tokens
that had the greater access rights associated with them, unless they had been issued
with the <spanx style="verb">durable</spanx> flag.</t>

<figure><artwork><![CDATA[
{
    "continue": {
        "access_token": {
            "value": "M33OMUK80UPRY5NMKSKU"
        },
        "uri": "https://server.example.com/continue",
        "wait": 30
    },
    "access_token": {
        "value": "0EVKC7-2ZKwZM_6N760",
        "access": [
            "read"
        ]
    }
}
]]></artwork></figure>

<t>For another example, the client instance initially requests read-only access but later
needs to step up its access. The initial request could look like this example.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "read"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return/123455",
            "nonce": "LKLTI25DK82FX4T4QFZC"
        }
    },
    "client": "987YHGRT56789IOLK"
}
]]></artwork></figure>

<t>Access is granted by the RO, and a token is issued by the AS.
In its final response, the AS includes a <spanx style="verb">continue</spanx> field:</t>

<figure><artwork><![CDATA[
{
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue",
        "wait": 30
    },
    "access_token": {
        "value": "RP1LT0-OS9M2P_R64TB",
        "access": [
            "read"
        ]
    }
}
]]></artwork></figure>

<t>This allows the client instance to make an eventual continuation call. The client instance later realizes that it now
needs "write" access in addition to the "read" access. Since this is an expansion of what
it asked for previously, the client instance also includes a new interaction section in case the AS needs
to interact with the RO again to gather additional authorization. Note that the client instance's
nonce and callback are different from the initial request. Since the original callback was
already used in the initial exchange, and the callback is intended for one-time-use, a new one
needs to be included in order to use the callback again.</t>

<figure><artwork><![CDATA[
PATCH /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "read", "write"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return/654321",
            "nonce": "K82FX4T4LKLTI25DQFZC"
        }
    }
}
]]></artwork></figure>

<t>From here, the AS can determine that the client instance is asking for more than it was previously granted,
but since the client instance has also provided a mechanism to interact with the RO, the AS can use that
to gather the additional consent. The protocol continues as it would with a new request.
Since the old access tokens are good for a subset of the rights requested here, the
AS might decide to not revoke them. However, any access tokens granted after this update
process are new access tokens and do not modify the rights of existing access tokens.</t>

</section>
<section anchor="continue-delete"><name>Canceling a Grant Request</name>

<t>If the client instance wishes to cancel an ongoing grant request, it makes an
HTTP DELETE request to the continuation URI.</t>

<figure><artwork><![CDATA[
DELETE /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>If the request is successfully cancelled, the AS responds with an HTTP 202.
The AS <bcp14>SHOULD</bcp14> revoke all associated access tokens.</t>

</section>
</section>
<section anchor="token-management"><name>Token Management</name>

<t>If an access token response includes the <spanx style="verb">manage</spanx> parameter as
described in <xref target="response-token-single"/>, the client instance <bcp14>MAY</bcp14> call
this URI to manage the access token with any of the actions defined in
the following sections: rotate and revoke. Other actions are undefined by this
specification.</t>

<t>The access token being managed acts as the access element for its own
management API. The client instance <bcp14>MUST</bcp14> present proof of an appropriate key
along with the access token.</t>

<t>If the token is sender-constrained (i.e., not a bearer token), it
<bcp14>MUST</bcp14> be sent <xref target="use-access-token">with the appropriate binding for the access token</xref>.</t>

<t>If the token is a bearer token, the client instance <bcp14>MUST</bcp14> present proof of the
same <xref target="request-client">key identified in the initial request</xref> as described in <xref target="binding-keys"/>.</t>

<t>The AS <bcp14>MUST</bcp14> validate the proof and assure that it is associated with
either the token itself or the client instance the token was issued to, as
appropriate for the token's presentation type.</t>

<section anchor="rotate-access-token"><name>Rotating the Access Token</name>

<t>If the client instance has an access token and that access token expires, the
client instance might want to rotate the access token.
Rotating an access token consists of issuing a new access token in place of an
existing access token, with the same rights and properties as the original token,
apart from an updated expiration time.</t>

<t>To rotate an access token, the client instance makes an HTTP POST to the token management URI,
sending the access token in the appropriate header and signing the request
with the appropriate key.</t>

<figure><artwork><![CDATA[
POST /token/PRY5NM33OM4TB8N6BW7OZB8CDFONP219RP1L HTTP/1.1
Host: server.example.com
Authorization: GNAP OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...
]]></artwork></figure>

<t>The AS validates that the token presented is associated with the management
URI, that the AS issued the token to the given client instance, and that
the presented key is appropriate to the token.</t>

<t>Note that in many cases, the access token will have expired for regular use. To facilitate
token rotation, the AS <bcp14>SHOULD</bcp14> honor the rotation request of the expired access token
since it is likely that the client instance is attempting to
refresh the expired token. To support this, the AS <bcp14>MAY</bcp14> allow a longer lifetime for
token management compared to its use at an RS. An AS <bcp14>MUST NOT</bcp14>
honor a rotation request for an access token that has been revoked or otherwise disabled.</t>

<t>If the token is validated and the key is appropriate for the
request, the AS <bcp14>MUST</bcp14> invalidate the current access token associated
with this URI, if possible. Note that stateless access tokens can make proactive
revocation difficult within a system, see <xref target="security-stateless-tokens"/>.</t>

<t>The AS responds with an HTTP 200 with a JSON body consisting of the rotated access token
in the <spanx style="verb">access_token</spanx> field described in <xref target="response-token-single"/>. The value of the
access token <bcp14>MUST NOT</bcp14> be the same as the current value of the access
token used to access the management API. The response <bcp14>MUST</bcp14> include an
access token management URI, and the value of this URI <bcp14>MAY</bcp14> be different
from the URI used by the client instance to make the rotation call. The client instance
<bcp14>MUST</bcp14> use this new URI to manage the rotated access token.</t>

<t>The access rights in the <spanx style="verb">access</spanx> array for the rotated access token <bcp14>MUST</bcp14>
be included in the response and <bcp14>MUST</bcp14> be the same
as the token before rotation. If the client instance requires different access rights,
the client instance can request a new access token by creating <xref target="request">a new request</xref> or
by <xref target="continue-modify">updating an existing grant request</xref>.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "value": "FP6A8H6HY37MH13CK76LBZ6Y1UADG6VEUPEER5H2",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "expires_in": 3600,
        "access": [
            {
                "type": "photo-api",
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "read", "dolphin-metadata"
        ]
    }
}
]]></artwork></figure>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/103">See issue #103</eref> ]]</t>

</section>
<section anchor="revoke-access-token"><name>Revoking the Access Token</name>

<t>If the client instance wishes to revoke the access token proactively, such as when
a user indicates to the client instance that they no longer wish for it to have
access or the client instance application detects that it is being uninstalled,
the client instance can use the token management URI to indicate to the AS that
the AS should invalidate the access token for all purposes.</t>

<t>The client instance makes an HTTP DELETE request to the token management
URI, presenting the access token and signing the request with
the appropriate key.</t>

<figure><artwork><![CDATA[
DELETE /token/PRY5NM33OM4TB8N6BW7OZB8CDFONP219RP1L HTTP/1.1
Host: server.example.com
Authorization: GNAP OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>If the key presented is associated with the token (or the client instance, in
the case of a bearer token), the AS <bcp14>MUST</bcp14> invalidate the access token, if
possible, and return an HTTP 204 response code.</t>

<figure><artwork><![CDATA[
204 No Content
]]></artwork></figure>

<t>Though the AS <bcp14>MAY</bcp14> revoke an access token at any time for
any reason, the token management function is specifically for the client instance's use.
If the access token has already expired or has been revoked through other
means, the AS <bcp14>SHOULD</bcp14> honor the revocation request to
the token management URI as valid, since the end result is still the token
not being usable.</t>

</section>
</section>
<section anchor="secure-requests"><name>Securing Requests from the Client Instance</name>

<t>In GNAP, the client instance secures its requests to the AS and RS by presenting an access
token, presenting proof of a key that it possesses (aka, a "key proof"), or both an access token and
key proof together.</t>

<t><list style="symbols">
  <t>When an access token is used with a key proof, this is a bound token request. This type of
  request is used for calls to the RS as well as the AS during negotiation.</t>
  <t>When a key proof is used with no access token, this is a non-authorized signed request. This
  type of request is used for calls to the AS to initiate a negotiation.</t>
  <t>When an access token is used with no key proof, this is a bearer token request. This type of
  request is used only for calls to the RS, and only with access tokens that are
  not bound to any key as described in <xref target="response-token-single"/>.</t>
  <t>When neither an access token nor key proof are used, this is an unsecured request. This type
  of request is used optionally for calls to the RS as part of an RS-first discovery
  process as described in <xref target="rs-request-without-token"/>.</t>
</list></t>

<section anchor="key-format"><name>Key Formats</name>

<t>Several different places in GNAP require the presentation of key material
by value. Proof of this key material <bcp14>MUST</bcp14> be bound to a request, the nature of which varies with
the location in the protocol the key is used. For a key used as part of a client instance's initial request
in <xref target="request-client"/>, the key value is the client instance's public key, and
proof of that key <bcp14>MUST</bcp14> be presented in that request. For a key used as part of an
access token response in <xref target="response-token-single"/>, the proof of that key <bcp14>MUST</bcp14>
be used when presenting the access token.</t>

<t>A key presented by value <bcp14>MUST</bcp14> be a public key in at least one
supported format. If a key is sent in multiple
formats, all the key format values <bcp14>MUST</bcp14> be equivalent. Note that
while most formats present the full value of the public key, some
formats present a value cryptographically derived from the public key.</t>

<dl>
  <dt>
<spanx style="verb">proof</spanx> (string):  </dt>
  <dd>
    <t>The form of proof that the client instance will use when
  presenting the key. The valid values of this field and
  the processing requirements for each are detailed in
  <xref target="binding-keys"/>. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">jwk</spanx> (object):  </dt>
  <dd>
    <t>The public key and its properties represented as a JSON Web Key <xref target="RFC7517"/>.
  A JWK <bcp14>MUST</bcp14> contain the <spanx style="verb">alg</spanx> (Algorithm) and <spanx style="verb">kid</spanx> (Key ID) parameters. The <spanx style="verb">alg</spanx>
  parameter <bcp14>MUST NOT</bcp14> be "none". The <spanx style="verb">x5c</spanx> (X.509 Certificate Chain) parameter <bcp14>MAY</bcp14>
  be used to provide the X.509 representation of the provided public key.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">cert</spanx> (string):  </dt>
  <dd>
    <t>PEM serialized value of the certificate used to
  sign the request, with optional internal whitespace per <xref target="RFC7468"/>. The
  PEM header and footer are optionally removed.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">cert#S256</spanx> (string):  </dt>
  <dd>
    <t>The certificate thumbprint calculated as
  per <xref target="RFC8705">OAuth-MTLS</xref> in base64 URL
  encoding. Note that this format does not include
  the full public key.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>Additional key formats are defined in <xref target="IANA">a registry TBD</xref>.</t>

<t>This non-normative example shows a single key presented in multiple
formats. This example key is intended to be used with the <eref target="{{httpsig-binding}}">HTTP Message Signatures</eref>
proofing mechanism, as indicated by the <spanx style="verb">httpsig</spanx> value of the <spanx style="verb">proof</spanx> field.</t>

<figure><artwork><![CDATA[
"key": {
    "proof": "httpsig",
    "jwk": {
        "kty": "RSA",
        "e": "AQAB",
        "kid": "xyz-1",
        "alg": "RS256",
        "n": "kOB5rR4Jv0GMeLaY6_It_r3ORwdf8ci_JtffXyaSx8xY..."
    },
    "cert": "MIIEHDCCAwSgAwIBAgIBATANBgkqhkiG9w0BAQsFA..."
}
]]></artwork></figure>

<section anchor="key-reference"><name>Key References</name>

<t>Keys in GNAP can also be passed by reference such that the party receiving
the reference will be able to determine the appropriate keying material for
use in that part of the protocol.</t>

<figure><artwork><![CDATA[
    "key": "S-P4XJQ_RYJCRTSU1.63N3E"
]]></artwork></figure>

<t>Keys referenced in this manner <bcp14>MAY</bcp14> be shared symmetric keys. The key reference
<bcp14>MUST NOT</bcp14> contain any unencrypted private or shared symmetric key information.</t>

<t>Keys referenced in this manner <bcp14>MUST</bcp14> be bound to a single proofing mechanism.</t>

<t>The means of dereferencing this value are out of scope for this specification.
Commonly, key references are created by the AS and are not necessarily needed
to be dereferencable by the client. These types of key references are an
internal reference to the AS, such as an identifier of a record in a database.
In other applications, it can be useful to use key references that are resolvable
by both clients and ASs, which could be accomplished by e.g. a client publishing
a public key at a URI. For interoperability, this method could later be described
as an extension.</t>

</section>
<section anchor="key-protection"><name>Key Protection</name>

<t>The security of GNAP relies on the cryptographic security of the keys themselves.
When symmetric keys are used in GNAP, a key management system or secure key derivation mechanism <bcp14>MUST</bcp14> be used to supply the keys. Symmetric keys <bcp14>MUST NOT</bcp14> be a human memorable password or a value derived from one. Symmetric keys <bcp14>MUST NOT</bcp14> be passed by value from the client instance to the AS.</t>

</section>
</section>
<section anchor="use-access-token"><name>Presenting Access Tokens</name>

<t>The method the client instance uses to send an access token depends on whether
the token is bound to a key, and if so which proofing method is associated
with the key. This information is conveyed by the
<spanx style="verb">key</spanx> parameter and the <spanx style="verb">bearer</spanx> flag in <xref target="response-token-single">the single</xref>
and <xref target="response-token-multiple">multiple access tokens</xref> responses.</t>

<t>If the <spanx style="verb">flags</spanx> field does not contain the <spanx style="verb">bearer</spanx> flag and the <spanx style="verb">key</spanx> is absent, the access token
<bcp14>MUST</bcp14> be sent using the same key and proofing mechanism that the client instance used
in its initial request (or its most recent rotation).</t>

<t>If the <spanx style="verb">flags</spanx> field does not contain the <spanx style="verb">bearer</spanx> flag and the <spanx style="verb">key</spanx> value is an object as
described in <xref target="key-format"/>, the access token <bcp14>MUST</bcp14> be sent using the key and proofing
mechanism defined by the value of the <spanx style="verb">proof</spanx> field within the key object.</t>

<t>The access token <bcp14>MUST</bcp14> be sent using the HTTP "Authorization" request header field and
the "GNAP" authorization scheme along with a key proof as described in <xref target="binding-keys"/>
for the key bound to the access token. For example, an "httpsig"-bound access token is sent as follows:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /stuff HTTP/1.1
Host: resource.example.com
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=("@method" "@target-uri" "authorization")\
  ;created=1618884473;keyid="gnap-rsa"
Signature: sig1=:ThgXGQjGiJYQW8JYxcNypXk7wQWG8KZ6AtyKOrqNOkgoa8iWgm\
  feHLkRmT6BUj83DkLX84TQehhK3D5Lcgllhghuu2Pr3JmYVY7FFYwYAcfoISzVPKp\
  YyDbh/g34qOpFvlCYDgG94ZX16LAKlqYXWn5vYgealgm54zzCCnvyaLKViGVWz6PM\
  7rOIZqMQPOu6JceqdsiVn8xj2qTS9CWEmuJABtTnRoXNGVg8tUEQp7qt3F7tCI/AM\
  vHW4FAYrQbE47qQsjh4zPiES1EM+lHdA9fCE0OEsfabxB7Gr9GvkMyiApWTf/Zs45\
  IoJhr1OVtOCGVhEmoiNFreBTm7cTyTgg==:
]]></artwork></figure>

<t>If the <spanx style="verb">flags</spanx> field contains the <spanx style="verb">bearer</spanx> flag, the access token is a bearer token
that <bcp14>MUST</bcp14> be sent using the <spanx style="verb">Authorization Request Header Field</spanx> method defined in <xref target="RFC6750"/>.</t>

<figure><artwork><![CDATA[
Authorization: Bearer OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0
]]></artwork></figure>

<t>The <spanx style="verb">Form-Encoded Body Parameter</spanx> and <spanx style="verb">URI Query Parameter</spanx> methods of <xref target="RFC6750"/> <bcp14>MUST NOT</bcp14>
be used.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/104">See issue #104</eref> ]]</t>

<t>The client software <bcp14>MUST</bcp14> reject as an error a situation where the <spanx style="verb">flags</spanx> field contains the <spanx style="verb">bearer</spanx> flag
and the <spanx style="verb">key</spanx> field is present with any value.</t>

</section>
<section anchor="binding-keys"><name>Proving Possession of a Key with a Request</name>

<t>Any keys presented by the client instance to the AS or RS <bcp14>MUST</bcp14> be validated as
part of the request in which they are presented. The type of binding
used is indicated by the proof parameter of the key object in <xref target="key-format"/>.
Values defined by this specification are as follows:</t>

<dl>
  <dt>
<spanx style="verb">"httpsig"</spanx>:  </dt>
  <dd>
    <t>HTTP Signing signature headers. See <xref target="httpsig-binding"/>.</t>
  </dd>
  <dt>
<spanx style="verb">"mtls"</spanx>:  </dt>
  <dd>
    <t>Mutual TLS certificate verification. See <xref target="mtls"/>.</t>
  </dd>
  <dt>
<spanx style="verb">"jwsd"</spanx>:  </dt>
  <dd>
    <t>A detached JWS signature header. See <xref target="detached-jws"/>.</t>
  </dd>
  <dt>
<spanx style="verb">"jws"</spanx>:  </dt>
  <dd>
    <t>Attached JWS payload. See <xref target="attached-jws"/>.</t>
  </dd>
</dl>

<t>Additional proofing methods are defined by <xref target="IANA">a registry TBD</xref>.</t>

<t>All key binding methods used by this specification <bcp14>MUST</bcp14> cover all relevant portions
of the request, including anything that would change the nature of the request, to allow
for secure validation of the request. Relevant aspects include
the URI being called, the HTTP method being used, any relevant HTTP headers and
values, and the HTTP message body itself. The verifier of the signed message
<bcp14>MUST</bcp14> validate all components of the signed message to ensure that nothing
has been tampered with or substituted in a way that would change the nature of
the request. Key binding method definitions <bcp14>SHOULD</bcp14> enumerate how these
requirements are fulfilled.</t>

<t>When a key proofing mechanism is bound to an access token, the key being presented <bcp14>MUST</bcp14>
be the key associated with the access token and the access token <bcp14>MUST</bcp14> be covered
by the signature method of the proofing mechanism.</t>

<t>The key binding methods in this section <bcp14>MAY</bcp14> be used by other components making calls
as part of GNAP, such as the extensions allowing the RS to make calls to the
AS defined in <xref target="I-D.ietf-gnap-resource-servers"/>. To facilitate this extended use, the
sections below are defined in generic terms of the "signer" and "verifier" of the HTTP message.
In the core functions of GNAP, the "signer" is the client instance and the "verifier"
is the AS or RS, as appropriate.</t>

<t>When used for delegation in GNAP, these key binding mechanisms allow
the AS to ensure that the keys presented by the client instance in the initial request are in
control of the party calling any follow-up or continuation requests. To facilitate
this requirement, the <xref target="response-continue">continuation response</xref> includes
an access token bound to the <xref target="request-client">client instance's key</xref>, and that key (or its most recent rotation)
<bcp14>MUST</bcp14> be proved in all continuation requests
<xref target="continue-request"/>. Token management requests <xref target="token-management"/> are similarly bound
to either the access token's own key or, in the case of bearer tokens, the client instance's key.</t>

<t>[[ <eref target="https://github.com/ietf-wg-gnap/gnap-core-protocol/issues/105">See issue #105</eref> ]]</t>

<t>In the following sections, unless otherwise noted, the <spanx style="verb">RS256</spanx> JOSE Signature Algorithm is applied
using the following RSA key (presented here in JWK format):</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "kid": "gnap-rsa",
    "p": "xS4-YbQ0SgrsmcA7xDzZKuVNxJe3pCYwdAe6efSy4hdDgF9-vhC5gjaRk\
        i1wWuERSMW4Tv44l5HNrL-Bbj_nCJxr_HAOaesDiPn2PnywwEfg3Nv95Nn-\
        eilhqXRaW-tJKEMjDHu_fmJBeemHNZI412gBnXdGzDVo22dvYoxd6GM",
    "kty": "RSA",
    "q": "rVdcT_uy-CD0GKVLGpEGRR7k4JO6Tktc8MEHkC6NIFXihk_6vAIOCzCD6\
        LMovMinOYttpRndKoGTNdJfWlDFDScAs8C5n2y1STCQPRximBY-bw39-aZq\
        JXMxOLyPjzuVgiTOCBIvLD6-8-mvFjXZk_eefD0at6mQ5qV3U1jZt88",
    "d": "FHlhdTF0ozTliDxMBffT6aJVKZKmbbFJOVNten9c3lXKB3ux3NAb_D2dB\
        7inp9EV23oWrDspFtvCvD9dZrXgRKMHofkEpo_SSvBZfgtH-OTkbY_TqtPF\
        FLPKAw0JX5cFPnn4Q2xE4n-dQ7tpRCKl59vZLHBrHShr90zqzFp0AKXU5fj\
        b1gC9LPwsFA2Fd7KXmI1drQQEVq9R-o18Pnn4BGQNQNjO_VkcJTiBmEIVT_\
        KJRPdpVJAmbgnYWafL_hAfeb_dK8p85yurEVF8nCK5oO3EPrqB7IL4UqaEn\
        5Sl3u0j8x5or-xrrAoNz-gdOv7ONfZY6NFoa-3f8q9wBAHUuQ",
    "e": "AQAB",
    "qi": "ogpNEkDKg22Rj9cDV_-PJBZaXMk66Fp557RT1tafIuqJRHEufSOYnsto\
        bWPJ0gHxv1gVJw3gm-zYvV-wTMNgr2wVsBSezSJjPSjxWZtmT2z68W1DuvK\
        kZy15vz7Jd85hmDlriGcXNCoFEUsGLWkpHH9RwPIzguUHWmTt8y0oXyI",
    "dp": "dvCKGI2G7RLh3WyjoJ_Dr6hZ3LhXweB3YcY3qdD9BnxZ71mrLiMQg4c_\
        EBnwqCETN_5sStn2cRc2JXnvLP3G8t7IFKHTT_i_TSTacJ7uT04MSa053Y3\
        RfwbvLjRNPR0UKAE3ZxROUoIaVNuU_6-QMf8-2ilUv2GIOrCN87gP_Vk",
    "alg": "RS256",
    "dq": "iMZmELaKgT9_W_MRT-UfDWtTLeFjIGRW8aFeVmZk9R7Pnyt8rNzyN-IQ\
        M40ql8u8J6vc2GmQGfokLlPQ6XLSCY68_xkTXrhoU1f-eDntkhP7L6XawSK\
        Onv5F2H7wyBQ75HUmHTg8AK2B_vRlMyFKjXbVlzKf4kvqChSGEz4IjQ",
    "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8BfYdHsFzAt\
        YKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZGYX\
        jHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZx\
        e0jRETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0\
        bunS0K3bA_3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kO\
        zywzwPTuq-cVQDyEN7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
}
]]></artwork></figure>

<section anchor="httpsig-binding"><name>HTTP Message Signing</name>

<t>This method is indicated by <spanx style="verb">httpsig</spanx> in
the <spanx style="verb">proof</spanx> field. The signer creates an HTTP
Message Signature as described in <xref target="I-D.ietf-httpbis-message-signatures"/>.</t>

<t>The covered components of the signature <bcp14>MUST</bcp14> include the following:</t>

<dl>
  <dt>
<spanx style="verb">"@method"</spanx>:  </dt>
  <dd>
    <t>The method used in the HTTP request.</t>
  </dd>
  <dt>
<spanx style="verb">"@target-uri"</spanx>:  </dt>
  <dd>
    <t>The full request URI of the HTTP request.</t>
  </dd>
</dl>

<t>When the message contains a request body, the covered components <bcp14>MUST</bcp14> also include the following:</t>

<dl>
  <dt>
<spanx style="verb">"content-digest"</spanx>:  </dt>
  <dd>
    <t>The Content-Digest header as defined in <xref target="I-D.ietf-httpbis-digest-headers"/>. When the
  request message has a body, the signer <bcp14>MUST</bcp14> calculate this header value and the verifier
  <bcp14>MUST</bcp14> validate this field value. Use of content-encoding
  agnostic digest methods (such as <spanx style="verb">sha-256</spanx>) is <bcp14>RECOMMENDED</bcp14>.</t>
  </dd>
</dl>

<t>When the request is bound to an access token, the covered components
<bcp14>MUST</bcp14> also include the following:</t>

<dl>
  <dt>
<spanx style="verb">"authorization"</spanx>:  </dt>
  <dd>
    <t>The Authorization header used to present the access token as discussed in
<xref target="use-access-token"/>.</t>
  </dd>
</dl>

<t>Other message components <bcp14>MAY</bcp14> also be included.</t>

<t>If the signer's key presented is a JWK, the <spanx style="verb">keyid</spanx> parameter of the signature <bcp14>MUST</bcp14> be set
to the <spanx style="verb">kid</spanx> value of the JWK, the signing algorithm used <bcp14>MUST</bcp14> be the JWS
algorithm denoted by the key's <spanx style="verb">alg</spanx> field, and the explicit <spanx style="verb">alg</spanx> signature
parameter <bcp14>MUST NOT</bcp14> be included.</t>

<t>In this example, the message body is the following JSON object:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "httpsig",
        "jwk": {
            "kid": "gnap-rsa",
            "kty": "RSA",
            "e": "AQAB",
            "alg": "PS512",
            "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8Bf\
  YdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZG\
  YXjHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZxe0jR\
  ETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0bunS0K3bA_\
  3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kOzywzwPTuq-cVQDyE\
  N7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
        }
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    }
}
]]></artwork></figure>

<t>This body is hashed for the Content-Digest header using <spanx style="verb">sha-256</spanx> into the following encoded value:</t>

<figure><artwork><![CDATA[
sha-256=:q2XBmzRDCREcS2nWo/6LYwYyjrlN1bRfv+HKLbeGAGg=:
]]></artwork></figure>

<t>The HTTP message signature input string is calculated to be the following:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@method": POST
"@target-uri": https://server.example.com/gnap
"content-digest": \
  sha-256=:q2XBmzRDCREcS2nWo/6LYwYyjrlN1bRfv+HKLbeGAGg=:
"content-length": 988
"content-type": application/json
"@signature-params": ("@method" "@target-uri" "content-digest" \
  "content-length" "content-type");created=1618884473;keyid="gnap-rsa"
]]></artwork></figure>

<t>This leads to the following full HTTP message request:</t>

<figure><sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /gnap HTTP/1.1
Host: server.example.com
Content-Type: application/json
Content-Length: 988
Content-Digest: sha-256=:q2XBmzRDCREcS2nWo/6LYwYyjrlN1bRfv+HKLbeGAG\
  g=:
Signature-Input: sig1=("@method" "@target-uri" "content-digest" \
  "content-length" "content-type");created=1618884473;keyid="gnap-rsa"
Signature: sig1=:EWJgAONk3D6542Scj8g51rYeMHw96cH2XiCMxcyL511wyemGcw\
  5PosYVO3eK+v+h1H+LiO4BjapL5ffZV+SgU8Q2v+qEDA4FrP0+/ni9W+lazjIrzNs\
  FAojwTlngMkAjZyDC/5+qUYB0KeEb4gnAhmuikv28DF30MT28yxCjeui2NGyzpPxB\
  cWk1K2Cxb6hS1WXUSZufFN9jOzrTg2c8/jcKkROKbLZLshF/oCuxAAgDabTqJy+qk\
  kz/Z/U5hI181qlTzNIYijnAvXzezlsLPZcMpJ1Au9APyBYAtDipAzyD6+IZl3rhzP\
  2leuCMCOvDxg9qA83LVtsqfjNJO+dEHA==:

{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "httpsig",
        "jwk": {
            "kid": "gnap-rsa",
            "kty": "RSA",
            "e": "AQAB",
            "alg": "PS512",
            "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8Bf\
  YdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZG\
  YXjHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZxe0jR\
  ETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0bunS0K3bA_\
  3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kOzywzwPTuq-cVQDyE\
  N7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
        }
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    }
}
]]></sourcecode></figure>

<t>If the HTTP Message includes a message body, the verifier <bcp14>MUST</bcp14>
calculate and verify the value of the <spanx style="verb">Digest</spanx> or <spanx style="verb">Content-Digest</spanx> header. The verifier
<bcp14>MUST</bcp14> ensure that the signature covers all required message components. The verifier <bcp14>MUST</bcp14> validate
the signature against the expected key of the signer.</t>

</section>
<section anchor="mtls"><name>Mutual TLS</name>

<t>This method is indicated by <spanx style="verb">mtls</spanx> in the
<spanx style="verb">proof</spanx> field. The signer presents its TLS client
certificate during TLS negotiation with the verifier.</t>

<t>In this example, the certificate is communicated to the application
through the <spanx style="verb">Client-Cert</spanx> header from a TLS reverse proxy, leading
to the following full HTTP request message:</t>

<figure><sourcecode type="http-message"><![CDATA[
POST /gnap HTTP/1.1
Host: server.example.com
Content-Type: application/jose
Content-Length: 1567
Client-Cert: \
  :MIIC6jCCAdKgAwIBAgIGAXjw74xPMA0GCSqGSIb3DQEBCwUAMDYxNDAyBgNVBAMM\
  K05JWU15QmpzRGp5QkM5UDUzN0Q2SVR6a3BEOE50UmppOXlhcEV6QzY2bVEwHhcN\
  MjEwNDIwMjAxODU0WhcNMjIwMjE0MjAxODU0WjA2MTQwMgYDVQQDDCtOSVlNeUJq\
  c0RqeUJDOVA1MzdENklUemtwRDhOdFJqaTl5YXBFekM2Nm1RMIIBIjANBgkqhkiG\
  9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhYOJ+XOKISdMMShn/G4W9m20mT0VWtQBsmBB\
  kI2cmRt4Ai8BfYdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8I\
  kZ8NMwSrcUIBZGYXjHpwjzvfGvXH/5KJlnR3/uRUp4Z4Ujk2bCaKegDn11V2vxE4\
  1hqaPUnhRZxe0jRETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo+\
  uv4BC0bunS0K3bA/3UgVp7zBlQFoFnLTO2uWp/muLEWGl67gBq9MO3brKXfGhi3k\
  OzywzwPTuq+cVQDyEN7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQIDAQABMA0GCSqG\
  SIb3DQEBCwUAA4IBAQBnYFK0eYHy+hVf2D58usj39lhL5znb/q9G35GBd/XsWfCE\
  wHuLOSZSUmG71bZtrOcx0ptle9bp2kKl4HlSTTfbtpuG5onSa3swRNhtKtUy5NH9\
  W/FLViKWfoPS3kwoEpC1XqKY6l7evoTCtS+kTQRSrCe4vbNprCAZRxz6z1nEeCgu\
  NMk38yTRvx8ihZpVOuU+Ih+dOtVe/ex5IAPYxlQsvtfhsUZqc7IyCcy72WHnRHlU\
  fn3pJm0S5270+Yls3Iv6h3oBAP19i906UjiUTNH3g0xMW+V4uLxgyckt4wD4Mlyv\
  jnaQ7Z3sR6EsXMocAbXHIAJhwKdtU/fLgdwL5vtx:


{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "mtls",
        "cert": "MIIC6jCCAdKgAwIBAgIGAXjw74xPMA0GCSqGSIb3DQEBCwUAMD\
  YxNDAyBgNVBAMMK05JWU15QmpzRGp5QkM5UDUzN0Q2SVR6a3BEOE50UmppOXlhcEV\
  6QzY2bVEwHhcNMjEwNDIwMjAxODU0WhcNMjIwMjE0MjAxODU0WjA2MTQwMgYDVQQD\
  DCtOSVlNeUJqc0RqeUJDOVA1MzdENklUemtwRDhOdFJqaTl5YXBFekM2Nm1RMIIBI\
  jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhYOJ+XOKISdMMShn/G4W9m20mT\
  0VWtQBsmBBkI2cmRt4Ai8BfYdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8\
  KowlyVy8IkZ8NMwSrcUIBZGYXjHpwjzvfGvXH/5KJlnR3/uRUp4Z4Ujk2bCaKegDn\
  11V2vxE41hqaPUnhRZxe0jRETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDad\
  z8BkPo+uv4BC0bunS0K3bA/3UgVp7zBlQFoFnLTO2uWp/muLEWGl67gBq9MO3brKX\
  fGhi3kOzywzwPTuq+cVQDyEN7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQIDAQABMA0\
  GCSqGSIb3DQEBCwUAA4IBAQBnYFK0eYHy+hVf2D58usj39lhL5znb/q9G35GBd/Xs\
  WfCEwHuLOSZSUmG71bZtrOcx0ptle9bp2kKl4HlSTTfbtpuG5onSa3swRNhtKtUy5\
  NH9W/FLViKWfoPS3kwoEpC1XqKY6l7evoTCtS+kTQRSrCe4vbNprCAZRxz6z1nEeC\
  guNMk38yTRvx8ihZpVOuU+Ih+dOtVe/ex5IAPYxlQsvtfhsUZqc7IyCcy72WHnRHl\
  Ufn3pJm0S5270+Yls3Iv6h3oBAP19i906UjiUTNH3g0xMW+V4uLxgyckt4wD4Mlyv\
  jnaQ7Z3sR6EsXMocAbXHIAJhwKdtU/fLgdwL5vtx"
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    },
    "subject": {
        "formats": ["iss_sub", "opaque"]
    }
}
]]></sourcecode></figure>

<t>The verifier compares the TLS client certificate presented during
mutual TLS negotiation to the expected key of the signer. Since the
TLS connection covers the entire message, there are no additional
requirements to check.</t>

<t>Note that in many instances, the verifier will not do a full certificate
chain validation of the presented TLS client certificate, as the
means of trust for this certificate could be in something other than
a PKI system, such as a static registration or trust-on-first-use.
See <xref target="security-mtls"/> and <xref target="security-mtls-patterns"/> for some additional
considerations for this key proofing method.</t>

</section>
<section anchor="detached-jws"><name>Detached JWS</name>

<t>This method is indicated by <spanx style="verb">jwsd</spanx> in the
<spanx style="verb">proof</spanx> field. A JWS <xref target="RFC7515"/> object is created as follows:</t>

<t>To protect the request, the JOSE header of the signature contains the following
claims:</t>

<dl>
  <dt>
<spanx style="verb">kid</spanx> (string):  </dt>
  <dd>
    <t>The key identifier. <bcp14>REQUIRED</bcp14> if the key is presented in JWK format, this
<bcp14>MUST</bcp14> be the value of the <spanx style="verb">kid</spanx> field of the key.</t>
  </dd>
  <dt>
<spanx style="verb">alg</spanx> (string):  </dt>
  <dd>
    <t>The algorithm used to sign the request. <bcp14>MUST</bcp14> be appropriate to the key presented.
If the key is presented as a JWK, this <bcp14>MUST</bcp14> be equal to the <spanx style="verb">alg</spanx> parameter of the key. <bcp14>MUST NOT</bcp14> be <spanx style="verb">none</spanx>.
<bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">typ</spanx> (string):  </dt>
  <dd>
    <t>The type header, value ”gnap-binding+jwsd”. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">htm</spanx> (string):  </dt>
  <dd>
    <t>The HTTP Method used to make this request, as a case-sensitive ASCII string. Note that most public HTTP methods are in uppercase ASCII by convention. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>The HTTP URI used for this request, including all path and query components and no fragment component. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">created</spanx> (integer):  </dt>
  <dd>
    <t>A timestamp of when the signature was created, in integer seconds since UNIX Epoch. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>When the request is bound to an access token, the JOSE header <bcp14>MUST</bcp14> also include the following:</t>

<dl>
  <dt>
<spanx style="verb">ath</spanx> (string):  </dt>
  <dd>
    <t>The hash of the access token. The value <bcp14>MUST</bcp14> be the
result of Base64url encoding (with no padding) the SHA-256 digest
of the ASCII encoding of the associated access token's value. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>If the HTTP request has a message body, such as an HTTP POST or PUT method,
the payload of the JWS object is the Base64url encoding (without padding)
of the SHA256 digest of the bytes of the body.
If the request being made does not have a message body, such as
an HTTP GET, OPTIONS, or DELETE method, the JWS signature is
calculated over an empty payload.</t>

<t>The signer presents the signed object in compact form
<xref target="RFC7515"/> in the Detached-JWS HTTP Header field.</t>

<t>In this example, the JOSE Header contains the following parameters:</t>

<figure><artwork><![CDATA[
{
    "alg": "RS256",
    "kid": "gnap-rsa",
    "uri": "https://server.example.com/gnap",
    "htm": "POST",
    "typ": "gnap-binding+jwsd",
    "created": 1618884475
}
]]></artwork></figure>

<t>The request body is the following JSON object:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "jwsd",
        "jwk": {
            "kid": "gnap-rsa",
            "kty": "RSA",
            "e": "AQAB",
            "alg": "RS256",
            "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8Bf\
  YdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZG\
  YXjHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZxe0jR\
  ETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0bunS0K3bA_\
  3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kOzywzwPTuq-cVQDyE\
  N7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
        }
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    }
}
]]></artwork></figure>

<t>This is hashed to the following Base64 encoded value:</t>

<figure><artwork><![CDATA[
PGiVuOZUcN1tRtUS6tx2b4cBgw9mPgXG3IPB3wY7ctc
]]></artwork></figure>

<t>This leads to the following full HTTP request message:</t>

<figure><sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /gnap HTTP/1.1
Host: server.example.com
Content-Type: application/json
Content-Length: 983
Detached-JWS: eyJhbGciOiJSUzI1NiIsImNyZWF0ZWQiOjE2MTg4ODQ0NzUsImh0b\
  SI6IlBPU1QiLCJraWQiOiJnbmFwLXJzYSIsInR5cCI6ImduYXAtYmluZGluZytqd3\
  NkIiwidXJpIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20vZ25hcCJ9.PGiVuO\
  ZUcN1tRtUS6tx2b4cBgw9mPgXG3IPB3wY7ctc.fUq-SV-A1iFN2MwCRW_yolVtT2_\
  TZA2h5YeXUoi5F2Q2iToC0Tc4drYFOSHIX68knd68RUA7yHqCVP-ZQEd6aL32H69e\
  9zuMiw6O_s4TBKB3vDOvwrhYtDH6fX2hP70cQoO-47OwbqP-ifkrvI3hVgMX9TfjV\
  eKNwnhoNnw3vbu7SNKeqJEbbwZfpESaGepS52xNBlDNMYBQQXxM9OqKJaXffzLFEl\
  -Xe0UnfolVtBraz3aPrPy1C6a4uT7wLda3PaTOVtgysxzii3oJWpuz0WP5kRujzDF\
  wX_EOzW0jsjCSkL-PXaKSpZgEjNjKDMg9irSxUISt1C1T6q3SzRgfuQ


{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "jwsd",
        "jwk": {
            "kid": "gnap-rsa",
            "kty": "RSA",
            "e": "AQAB",
            "alg": "RS256",
            "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8Bf\
  YdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZG\
  YXjHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZxe0jR\
  ETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0bunS0K3bA_\
  3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kOzywzwPTuq-cVQDyE\
  N7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
        }
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    }
}
]]></sourcecode></figure>

<t>When the verifier receives the Detached-JWS header, it <bcp14>MUST</bcp14> parse and
validate the JWS object. The signature <bcp14>MUST</bcp14> be validated against the
expected key of the signer. All required fields <bcp14>MUST</bcp14> be present
and their values <bcp14>MUST</bcp14> be valid. If the HTTP message request contains
a body, the verifier <bcp14>MUST</bcp14> calculate the hash of body just as
the signer does, with no normalization or transformation of the request.</t>

</section>
<section anchor="attached-jws"><name>Attached JWS</name>

<t>This method is indicated by <spanx style="verb">jws</spanx> in the
<spanx style="verb">proof</spanx> field. A JWS <xref target="RFC7515"/> object is created as follows:</t>

<t>To protect the request, the JWS header contains the following claims.</t>

<dl>
  <dt>
<spanx style="verb">kid</spanx> (string):  </dt>
  <dd>
    <t>The key identifier. <bcp14>REQUIRED</bcp14> if the key is presented in JWK format, this
<bcp14>MUST</bcp14> be the value of the <spanx style="verb">kid</spanx> field of the key.</t>
  </dd>
  <dt>
<spanx style="verb">alg</spanx> (string):  </dt>
  <dd>
    <t>The algorithm used to sign the request. <bcp14>MUST</bcp14> be appropriate to the key presented.
If the key is presented as a JWK, this <bcp14>MUST</bcp14> be equal to the <spanx style="verb">alg</spanx> parameter of the key. <bcp14>MUST NOT</bcp14> be <spanx style="verb">none</spanx>.
<bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">typ</spanx> (string):  </dt>
  <dd>
    <t>The type header, value ”gnap-binding+jwsd”. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">htm</spanx> (string):  </dt>
  <dd>
    <t>The HTTP Method used to make this request, as a case-sensitive ASCII string. (Note that most public HTTP methods are in uppercase.) <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">uri</spanx> (string):  </dt>
  <dd>
    <t>The HTTP URI used for this request, including all path and query components and no fragment component. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">created</spanx> (integer):  </dt>
  <dd>
    <t>A timestamp of when the signature was created, in integer seconds since UNIX Epoch. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>When the request is bound to an access token, the JOSE header <bcp14>MUST</bcp14> also include the following:</t>

<dl>
  <dt>
<spanx style="verb">ath</spanx> (string):  </dt>
  <dd>
    <t>The hash of the access token. The value <bcp14>MUST</bcp14> be the
result of Base64url encoding (with no padding) the SHA-256 digest
of the ASCII encoding of the associated access token's value. <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>If the HTTP request has a message body, such as an HTTP POST or PUT method,
the payload of the JWS object is the JSON serialized body of the request, and
the object is signed according to JWS and serialized into compact form <xref target="RFC7515"/>.
The signer presents the JWS as the body of the request along with a
content type of <spanx style="verb">application/jose</spanx>. The verifier
<bcp14>MUST</bcp14> extract the payload of the JWS and treat it as the request body
for further processing.</t>

<t>If the request being made does not have a message body, such as
an HTTP GET, OPTIONS, or DELETE method, the JWS signature is
calculated over an empty payload and passed in the <spanx style="verb">Detached-JWS</spanx>
header as described in <xref target="detached-jws"/>.</t>

<t>In this example, the JOSE header contains the following parameters:</t>

<figure><artwork><![CDATA[
{
    "alg": "RS256",
    "kid": "gnap-rsa",
    "uri": "https://server.example.com/gnap",
    "htm": "POST",
    "typ": "gnap-binding+jwsd",
    "created": 1618884475
}
]]></artwork></figure>

<t>The request body, used as the JWS Payload, is the following JSON object:</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

{
    "access_token": {
        "access": [
            "dolphin-metadata"
        ]
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.foo/callback",
            "nonce": "VJLO6A4CAYLBXHTR0KRO"
        }
    },
    "client": {
      "key": {
        "proof": "jws",
        "jwk": {
            "kid": "gnap-rsa",
            "kty": "RSA",
            "e": "AQAB",
            "alg": "RS256",
            "n": "hYOJ-XOKISdMMShn_G4W9m20mT0VWtQBsmBBkI2cmRt4Ai8Bf\
  YdHsFzAtYKOjpBR1RpKpJmVKxIGNy0g6Z3ad2XYsh8KowlyVy8IkZ8NMwSrcUIBZG\
  YXjHpwjzvfGvXH_5KJlnR3_uRUp4Z4Ujk2bCaKegDn11V2vxE41hqaPUnhRZxe0jR\
  ETddzsE3mu1SK8dTCROjwUl14mUNo8iTrTm4n0qDadz8BkPo-uv4BC0bunS0K3bA_\
  3UgVp7zBlQFoFnLTO2uWp_muLEWGl67gBq9MO3brKXfGhi3kOzywzwPTuq-cVQDyE\
  N7aL0SxCb3Hc4IdqDaMg8qHUyObpPitDQ"
        }
      }
      "display": {
        "name": "My Client Display Name",
        "uri": "https://client.foo/"
      },
    },
    "subject": {
        "formats": ["iss_sub", "opaque"]
    }
}

]]></artwork></figure>

<t>This leads to the following full HTTP request message:</t>

<figure><sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /gnap HTTP/1.1
Host: server.example.com
Content-Type: application/jose
Content-Length: 1047

eyJhbGciOiJSUzI1NiIsImNyZWF0ZWQiOjE2MTg4ODQ0NzUsImh0bSI6IlBPU1QiLCJ\
raWQiOiJnbmFwLXJzYSIsInR5cCI6ImduYXAtYmluZGluZytqd3NkIiwidXJpIjoiaH\
R0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20vZ25hcCJ9.CnsKICAgICJhY2Nlc3NfdG9r\
ZW4iOiB7CiAgICAgICAgImFjY2VzcyI6IFsKICAgICAgICAgICAgImRvbHBoaW4tbWV\
0YWRhdGEiCiAgICAgICAgXQogICAgfSwKICAgICJpbnRlcmFjdCI6IHsKICAgICAgIC\
Aic3RhcnQiOiBbInJlZGlyZWN0Il0sCiAgICAgICAgImZpbmlzaCI6IHsKICAgICAgI\
CAgICAgIm1ldGhvZCI6ICJyZWRpcmVjdCIsCiAgICAgICAgICAgICJ1cmkiOiAiaHR0\
cHM6Ly9jbGllbnQuZm9vL2NhbGxiYWNrIiwKICAgICAgICAgICAgIm5vbmNlIjogIlZ\
KTE82QTRDQVlMQlhIVFIwS1JPIgogICAgICAgIH0KICAgIH0sCiAgICAiY2xpZW50Ij\
ogewogICAgICAicHJvb2YiOiAiandzIiwKICAgICAgImtleSI6IHsKICAgICAgICAia\
ndrIjogewogICAgICAgICAgICAia2lkIjogImduYXAtcnNhIiwKICAgICAgICAgICAg\
Imt0eSI6ICJSU0EiLAogICAgICAgICAgICAiZSI6ICJBUUFCIiwKICAgICAgICAgICA\
gImFsZyI6ICJSUzI1NiIsCiAgICAgICAgICAgICJuIjogImhZT0otWE9LSVNkTU1TaG\
5fRzRXOW0yMG1UMFZXdFFCc21CQmtJMmNtUnQ0QWk4QmZZZEhzRnpBdFlLT2pwQlIxU\
nBLcEptVkt4SUdOeTBnNlozYWQyWFlzaDhLb3dseVZ5OElrWjhOTXdTcmNVSUJaR1lY\
akhwd2p6dmZHdlhIXzVLSmxuUjNfdVJVcDRaNFVqazJiQ2FLZWdEbjExVjJ2eEU0MWh\
xYVBVbmhSWnhlMGpSRVRkZHpzRTNtdTFTSzhkVENST2p3VWwxNG1VTm84aVRyVG00bj\
BxRGFkejhCa1BvLXV2NEJDMGJ1blMwSzNiQV8zVWdWcDd6QmxRRm9GbkxUTzJ1V3Bfb\
XVMRVdHbDY3Z0JxOU1PM2JyS1hmR2hpM2tPenl3endQVHVxLWNWUUR5RU43YUwwU3hD\
YjNIYzRJZHFEYU1nOHFIVXlPYnBQaXREUSIKICAgICAgICB9CiAgICAgIH0KICAgICA\
gImRpc3BsYXkiOiB7CiAgICAgICAgIm5hbWUiOiAiTXkgQ2xpZW50IERpc3BsYXkgTm\
FtZSIsCiAgICAgICAgInVyaSI6ICJodHRwczovL2NsaWVudC5mb28vIgogICAgICB9L\
AogICAgfSwKICAgICJzdWJqZWN0IjogewogICAgICAgICJmb3JtYXRzIjogWyJpc3Nf\
c3ViIiwgIm9wYXF1ZSJdCiAgICB9Cn0K.MwNoVMQp5hVxI0mCs9LlOUdFtkDXaA1_eT\
vOXq7DOGrtDKH7q4vP2xUq3fH2jRAZqnobo0WdPP3eM3NH5QUjW8pa6_QpwdIWkK7r-\
u_52puE0lPBp7J4U2w4l9gIbg8iknsmWmXeY5F6wiGT8ptfuEYGgmloAJd9LIeNvD3U\
LW2h2dz1Pn2eDnbyvgB0Ugae0BoZB4f69fKWj8Z9wvTIjk1LZJN1PcL7_zT8Lrlic9a\
PyzT7Q9ovkd1s-4whE7TrnGUzFc5mgWUn_gsOpsP5mIIljoEEv-FqOW2RyNYulOZl0Q\
8EnnDHV_vPzrHlUarbGg4YffgtwkQhdK72-JOxYQ
]]></sourcecode></figure>

<t>When the verifier receives an attached JWS request, it <bcp14>MUST</bcp14> parse and
validate the JWS object. The signature <bcp14>MUST</bcp14> be validated against the
expected key of the signer. All required fields <bcp14>MUST</bcp14> be present
and their values <bcp14>MUST</bcp14> be valid. If the HTTP message request contains
a body, the verifier <bcp14>MUST</bcp14> decode the payload of the JWS object and
treat this as the HTTP message body.</t>

</section>
</section>
</section>
<section anchor="resource-access-rights"><name>Resource Access Rights</name>

<t>GNAP provides a rich structure for describing the protected resources
hosted by RSs and accessed by client software. This structure is used when
the client instance <xref target="request-token">requests an access token</xref> and when
an <xref target="response-token">access token is returned</xref>.</t>

<t>The root of this structure is a JSON array. The elements of the JSON
array represent rights of access that are associated with the
the access token. The resulting access is the union of all elements
within the array.</t>

<t>The access associated with the access token is described
using objects that each contain multiple
dimensions of access. Each object contains a <bcp14>REQUIRED</bcp14> <spanx style="verb">type</spanx>
property that determines the type of API that the token is used for.</t>

<dl>
  <dt>
<spanx style="verb">type</spanx> (string):  </dt>
  <dd>
    <t>The type of resource request as a string. This field <bcp14>MAY</bcp14>
    define which other fields are allowed in the request object.
    <bcp14>REQUIRED</bcp14>.</t>
  </dd>
</dl>

<t>The value of the <spanx style="verb">type</spanx> field is under the control of the AS.
This field <bcp14>MUST</bcp14> be compared using an exact byte match of the string
value against known types by the AS.  The AS <bcp14>MUST</bcp14> ensure that there
is no collision between different authorization data types that it
supports.  The AS <bcp14>MUST NOT</bcp14> do any collation or normalization of data
types during comparison. It is <bcp14>RECOMMENDED</bcp14> that designers of general-purpose
APIs use a URI for this field to avoid collisions between multiple
API types protected by a single AS.</t>

<t>While it is expected that many APIs will have their own properties, a set of
common properties are defined here. Specific API implementations
<bcp14>SHOULD NOT</bcp14> re-use these fields with different semantics or syntax. The
available values for these properties are determined by the API
being protected at the RS. All values are <bcp14>OPTIONAL</bcp14> at the discretion of the
API definition.</t>

<dl>
  <dt>
<spanx style="verb">actions</spanx> (array of strings):  </dt>
  <dd>
    <t>The types of actions the client instance will take at the RS as an array of strings.
  For example, a client instance asking for a combination of "read" and "write" access.</t>
  </dd>
  <dt>
<spanx style="verb">locations</spanx> (array of strings):  </dt>
  <dd>
    <t>The location of the RS as an array of
  strings. These strings are typically URIs identifying the
  location of the RS.</t>
  </dd>
  <dt>
<spanx style="verb">datatypes</spanx> (array of strings):  </dt>
  <dd>
    <t>The kinds of data available to the client instance at the RS's API as an
  array of strings. For example, a client instance asking for access to
  raw "image" data and "metadata" at a photograph API.</t>
  </dd>
  <dt>
<spanx style="verb">identifier</spanx> (string):  </dt>
  <dd>
    <t>A string identifier indicating a specific resource at the RS.
  For example, a patient identifier for a medical API or
  a bank account number for a financial API.</t>
  </dd>
  <dt>
<spanx style="verb">privileges</spanx> (array of strings):  </dt>
  <dd>
    <t>The types or levels of privilege being requested at the resource. For example, a client
  instance asking for administrative level access, or access when the resource owner
  is no longer online.</t>
  </dd>
</dl>

<t>The following non-normative example is describing three kinds of access (read, write, delete) to each of
two different locations and two different data types (metadata, images) for a single access token
using the fictitious <spanx style="verb">photo-api</spanx> type definition.</t>

<figure><artwork><![CDATA[
"access": [
    {
        "type": "photo-api",
        "actions": [
            "read",
            "write",
            "delete"
        ],
        "locations": [
            "https://server.example.net/",
            "https://resource.local/other"
        ],
        "datatypes": [
            "metadata",
            "images"
        ]
    }
]
]]></artwork></figure>

<t>The access requested for a given object when using these fields
is the cross-product of all fields of the object. That is to
say, the object represents a request for all <spanx style="verb">actions</spanx> listed
to be used at all <spanx style="verb">locations</spanx> listed for all possible <spanx style="verb">datatypes</spanx>
listed within the object. Assuming the request above was granted,
the client instance could assume that it
would be able to do a <spanx style="verb">read</spanx> action against the <spanx style="verb">images</spanx> on the first server
as well as a <spanx style="verb">delete</spanx> action on the <spanx style="verb">metadata</spanx> of the second server, or any other
combination of these fields, using the same access token.</t>

<t>To request a different combination of access,
such as requesting one of the possible <spanx style="verb">actions</spanx> against one of the possible <spanx style="verb">locations</spanx>
and a different choice of possible <spanx style="verb">actions</spanx> against a different one of the possible <spanx style="verb">locations</spanx>, the
client instance can include multiple separate objects in the <spanx style="verb">resources</spanx> array.
The following non-normative example uses the same fictitious <spanx style="verb">photo-api</spanx>
type definition to request a single access token with more specifically
targeted access rights by using two discrete objects within the request.</t>

<figure><artwork><![CDATA[
"access": [
    {
        "type": "photo-api",
        "actions": [
            "read"
        ],
        "locations": [
            "https://server.example.net/"
        ],
        "datatypes": [
            "images"
        ]
    },
    {
        "type": "photo-api",
        "actions": [
            "write",
            "delete"
        ],
        "locations": [
            "https://resource.local/other"
        ],
        "datatypes": [
            "metadata"
        ]
    }
]
]]></artwork></figure>

<t>The access requested here is for <spanx style="verb">read</spanx> access to <spanx style="verb">images</spanx> on one server
while simultaneously requesting <spanx style="verb">write</spanx> and <spanx style="verb">delete</spanx> access for <spanx style="verb">metadata</spanx> on a different
server, but importantly without requesting <spanx style="verb">write</spanx> or <spanx style="verb">delete</spanx> access to <spanx style="verb">images</spanx> on the
first server.</t>

<t>It is anticipated that API designers will use a combination
of common fields defined in this specification as well as
fields specific to the API itself. The following non-normative
example shows the use of both common and API-specific fields as
part of two different fictitious API <spanx style="verb">type</spanx> values. The first
access request includes the <spanx style="verb">actions</spanx>, <spanx style="verb">locations</spanx>, and <spanx style="verb">datatypes</spanx>
fields specified here as well as the API-specific <spanx style="verb">geolocation</spanx>
field. The second access request includes the <spanx style="verb">actions</spanx> and
<spanx style="verb">identifier</spanx> fields specified here as well as the API-specific
<spanx style="verb">currency</spanx> field.</t>

<figure><artwork><![CDATA[
"access": [
    {
        "type": "photo-api",
        "actions": [
            "read",
            "write"
        ],
        "locations": [
            "https://server.example.net/",
            "https://resource.local/other"
        ],
        "datatypes": [
            "metadata",
            "images"
        ],
        "geolocation": [
            { lat: -32.364, lng: 153.207 },
            { lat: -35.364, lng: 158.207 }
        ]
    },
    {
        "type": "financial-transaction",
        "actions": [
            "withdraw"
        ],
        "identifier": "account-14-32-32-3",
        "currency": "USD"
    }
]
]]></artwork></figure>

<t>If this request is approved,
the <xref target="response-token-single">resulting access token</xref>'s access rights will be
the union of the requested types of access for each of the two APIs, just as above.</t>

<section anchor="resource-access-reference"><name>Requesting Resources By Reference</name>

<t>Instead of sending an <xref target="resource-access-rights">object describing the requested resource</xref>,
access rights <bcp14>MAY</bcp14> be communicated as a string known to
the AS or RS representing the access being requested. Each string
<bcp14>SHOULD</bcp14> correspond to a specific expanded object representation at
the AS.</t>

<figure><artwork><![CDATA[
"access": [
    "read", "dolphin-metadata", "some other thing"
]
]]></artwork></figure>

<t>This value is opaque to the client instance and <bcp14>MAY</bcp14> be any
valid JSON string, and therefore could include spaces, unicode
characters, and properly escaped string sequences. However, in some
situations the value is intended to be
seen and understood by the client software's developer. In such cases, the
API designer choosing any such human-readable strings <bcp14>SHOULD</bcp14> take steps
to ensure the string values are not easily confused by a developer,
such as by limiting the strings to easily disambiguated characters.</t>

<t>This functionality is similar in practice to OAuth 2.0's <spanx style="verb">scope</spanx> parameter <xref target="RFC6749"/>, where a single string
represents the set of access rights requested by the client instance. As such, the reference
string could contain any valid OAuth 2.0 scope value as in <xref target="example-oauth2"/>. Note that the reference
string here is not bound to the same character restrictions as in OAuth 2.0's <spanx style="verb">scope</spanx> definition.</t>

<t>A single <spanx style="verb">access</spanx> array <bcp14>MAY</bcp14> include both object-type and
string-type resource items. In this non-normative example,
the client instance is requesting access to a <spanx style="verb">photo-api</spanx> and <spanx style="verb">financial-transaction</spanx> API type
as well as the reference values of <spanx style="verb">read</spanx>, <spanx style="verb">dolphin-metadata</spanx>, and <spanx style="verb">some other thing</spanx>.</t>

<figure><artwork><![CDATA[
"access": [
    {
        "type": "photo-api",
        "actions": [
            "read",
            "write",
            "delete"
        ],
        "locations": [
            "https://server.example.net/",
            "https://resource.local/other"
        ],
        "datatypes": [
            "metadata",
            "images"
        ]
    },
    "read",
    "dolphin-metadata",
    {
        "type": "financial-transaction",
        "actions": [
            "withdraw"
        ],
        "identifier": "account-14-32-32-3",
        "currency": "USD"
    },
    "some other thing"
]
]]></artwork></figure>

<t>The requested access is the union of all elements of the array, including both objects and
reference strings.</t>

</section>
</section>
<section anchor="discovery"><name>Discovery</name>

<t>By design, the protocol minimizes the need for any pre-flight
discovery. To begin a request, the client instance only needs to know the endpoint of
the AS and which keys it will use to sign the request. Everything else
can be negotiated dynamically in the course of the protocol.</t>

<t>However, the AS can have limits on its allowed functionality. If the
client instance wants to optimize its calls to the AS before making a request, it <bcp14>MAY</bcp14>
send an HTTP OPTIONS request to the grant request endpoint to retrieve the
server's discovery information. The AS <bcp14>MUST</bcp14> respond with a JSON document with Content-Type
<spanx style="verb">application/json</spanx> containing a single object with the following information:</t>

<dl>
  <dt>
<spanx style="verb">grant_request_endpoint</spanx> (string):  </dt>
  <dd>
    <t>The location of the
  AS's grant request endpoint. The location <bcp14>MUST</bcp14> be a URL <xref target="RFC3986"/>
  with a scheme component that <bcp14>MUST</bcp14> be https, a host component, and optionally,
  port, path and query components and no fragment components. This URL <bcp14>MUST</bcp14>
  match the URL the client instance used to make the discovery request.
  <bcp14>REQUIRED</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">interaction_start_modes_supported</spanx> (array of strings):  </dt>
  <dd>
    <t>A list of the AS's interaction start methods. The values of this list correspond to the
  possible values for the <xref target="request-interact-start">interaction start section</xref> of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">interaction_finish_methods_supported</spanx> (array of strings):  </dt>
  <dd>
    <t>A list of the AS's interaction finish methods. The values of this list correspond to the
  possible values for the method element of the <xref target="request-interact-finish">interaction finish section</xref> of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">key_proofs_supported</spanx> (array of strings):  </dt>
  <dd>
    <t>A list of the AS's supported key
  proofing mechanisms. The values of this list correspond to possible
  values of the <spanx style="verb">proof</spanx> field of the
  <xref target="key-format">key section</xref> of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">sub_id_formats_supported</spanx> (array of strings):  </dt>
  <dd>
    <t>A list of the AS's supported
  subject identifier formats. The values of this list correspond to possible values
  of the <xref target="request-subject">subject identifier section</xref> of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
  <dt>
<spanx style="verb">assertion_formats_supported</spanx> (array of strings):  </dt>
  <dd>
    <t>A list of the AS's supported
  assertion formats. The values of this list correspond to possible
  values of the <xref target="request-subject">subject assertion section</xref> of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
  </dd>
</dl>

<t>The information returned from this method is for optimization
purposes only. The AS <bcp14>MAY</bcp14> deny any request, or any portion of a request,
even if it lists a capability as supported. For example, a given client instance
can be registered with the <spanx style="verb">mtls</spanx> key proofing
mechanism, but the AS also returns other proofing methods from the discovery document, then the AS
will still deny a request from that client instance using a different proofing
mechanism.</t>

<section anchor="rs-request-without-token"><name>RS-first Method of AS Discovery</name>

<t>If the client instance calls an RS without an access token, or with an
invalid access token, the RS <bcp14>MAY</bcp14> respond to the client instance with an
authentication header indicating that GNAP needs to be used
to access the resource. The address of the GNAP
endpoint <bcp14>MUST</bcp14> be sent in the "as_uri" parameter. The RS <bcp14>MAY</bcp14>
additionally return a resource reference that the client instance <bcp14>MAY</bcp14> use in
its access token request. This
resource reference <bcp14>MUST</bcp14> be sufficient for at least the action
the client instance was attempting to take at the RS and <bcp14>MAY</bcp14> be more
powerful.
The means for the RS to determine the resource reference are out of scope
of this specification, but some dynamic methods are discussed in
<xref target="I-D.ietf-gnap-resource-servers"/>.
The content of the resource reference is opaque to the client instance.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

WWW-Authenticate: \
  GNAP as_uri=https://server.example/tx,access=FWWIKYBQ6U56NL1
]]></artwork></figure>

<t>The client instance then makes a request to the "as_uri" as described in
<xref target="request"/>, with the value of "access" as one of the members
of the <spanx style="verb">access</spanx> array in the <spanx style="verb">access_token</spanx> portion of the request. The
client instance <bcp14>MAY</bcp14> request additional resources and other information.
The client instance <bcp14>MAY</bcp14> request multiple access tokens.</t>

<t>In this non-normative example, the client instance is requesting a single access
token using the resource reference <spanx style="verb">FWWIKYBQ6U56NL1</spanx> received from the RS
in addition to the <spanx style="verb">dolphin-metadata</spanx> resource reference that the client instance
has been configured with out of band.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "FWWIKYBQ6U56NL1",
            "dolphin-metadata"
        ]
    },
    "client": "KHRS6X63AJ7C7C4AZ9AO"
}
]]></artwork></figure>

<t>If issued, the resulting access token would contain sufficient access to be used
at both referenced resources.</t>

</section>
</section>
<section anchor="Acknowledgements"><name>Acknowledgements</name>

<t>The editors would like to thank the feedback of the following individuals for their reviews,
implementations, and contributions:
<contact fullname="Åke Axeland" asciiFullname="Ake Axeland"/>,
Aaron Parecki,
Adam Omar Oueidat,
Andrii Deinega,
Annabelle Backman,
Dick Hardt,
Dmitri Zagidulin,
Dmitry Barinov,
Fabien Imbault,
Florian Helmschmidt,
Francis Pouatcha,
George Fletcher,
Haardik Haardik,
Hamid Massaoud,
Jacky Yuan,
Joseph Heenan,
Justin Richer,
Kathleen Moriarty,
Mike Jones,
Mike Varley,
Nat Sakimura,
Takahiko Kawasaki,
Takahiro Tsuchiya.</t>

<t>The editors would also like to thank the GNAP working group design team of
Kathleen Moriarty, Fabien Imbault, Dick Hardt, Mike Jones, and Justin Richer, who incorporated
elements from the XAuth and XYZ proposals to create the first version of this document.</t>

<t>In addition, the editors would like to thank Aaron Parecki and Mike Jones for insights into how
to integrate identity and authentication systems into the core protocol, and Justin Richer and Dick Hardt for
the use cases, diagrams, and insights provided in the XYZ and XAuth proposals that have been
incorporated here. The editors would like to especially thank Mike Varley and the team at SecureKey
for feedback and development of early versions of the XYZ protocol that fed into this standards work.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>[[ TBD: There are a lot of items in the document that are expandable
through the use of value registries. ]]</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<section anchor="security-tls"><name>TLS Protection in Transit</name>

<t>All requests in GNAP have to be made over TLS or equivalent as outlined in <xref target="BCP195"/>
to protect the contents of the request and response from manipulation and interception by an attacker.
This includes all requests from a client instance to the AS, all requests from the client instance to
an RS, any requests back to a client instance such as the push-based interaction finish method, and
any back-end communications such as from an RS to an AS as described in <xref target="I-D.ietf-gnap-resource-servers"/>.
Additionally, all requests between a browser and other components, such as during redirect-based
interaction, need to be made over TLS or use equivalent protection.</t>

<t>Even though requests from the client instance to the AS are signed, the signature method alone does not protect
the request from interception by an attacker. TLS protects the response as well as the request,
preventing an attacker from intercepting requested information as it is returned. This is particularly
important in the core protocol for security artifacts such as nonces and for
personal information such as subject information.</t>

<t>The use of key-bound access tokens does not negate the requirement for protecting calls to the RS with TLS.
While the keys and signatures associated a bound access token will prevent an attacker from using a stolen
token, without TLS an attacker would be able to watch the data being sent to the RS and returned from the RS
during legitimate use of the client instance under attack. Additionally, without TLS an attacker would be
able to profile the calls made between the client instance and RS, possibly gaining information about the functioning
of the API between the client software and RS software that would be otherwise unknown to the attacker.</t>

<t>TLS or equivalent protection also needs to be used between the browser and any other components. This applies during initial
redirects to an AS's components during interaction, during any interaction with the resource owner, and during
any redirect back to the client instance. Without TLS protection on these portions of the process, an
attacker could wait for a valid request to start and then take over the resource owner's interaction session.</t>

</section>
<section anchor="security-signing"><name>Signing Requests from the Client Software</name>

<t>Even though all requests in GNAP need to be transmitted over TLS or its equivalent, the use of TLS
alone is not sufficient to protect all parts of a multi-party and multi-stage protocol like GNAP,
and TLS is not targeted at tying multiple requests to each other over time.
To account for this, GNAP makes use of message-level protection and key presentation mechanisms
that strongly associate a request with a key held by the client instance (see <xref target="secure-requests"/>).</t>

<t>During the initial request from a client instance to the AS, the client instance has to identify and
prove possession of a cryptographic key. If the key is known to the AS, such as if it is previously
registered or dereferenceable to a trusted source, the AS can associate a set of policies to the
client instance identified by the key. Without the requirement that the client instance prove that it holds
that key, the AS could not trust that the connection came from any particular client and could
not apply any associated policies.</t>

<t>Even more importantly, the client instance proving possession of a key on the first request allows
the AS to associate future requests with each other. The access token used for grant continuation
is bound to the same key and proofing mechanism used by the client instance in its initial request,
which means that the client instance needs to prove possession of that same key in future requests
allowing the AS to be sure that the same client instance is executing the follow-ups for a given
ongoing grant request. Therefore, the AS has to ensure that all subsequent requests for a grant are
associated with the same key that started the grant, or the most recent rotation of that key.
This need holds true even if the initial key is previously unknown to the AS, such as would be
the case when a client instance creates an ephemeral key for its request.
Without this ongoing association, an attacker would be able to impersonate a client instance
in the midst of a grant request, potentially stealing access tokens and subject information
with impunity.</t>

<t>Additionally, all access tokens in GNAP default to be associated with the key that was presented
during the grant request that created the access token. This association allows an RS to know that
the presenter of the access token is the same party that the token was issued to, as identified
by their keys. While non-bound bearer tokens are an option in GNAP, these types of tokens
have their own tradeoffs discussed elsewhere in this section.</t>

<t>TLS functions at the socket layer, ensuring that only the parties on either end of that socket
connection can read the information passed along that connection. Each time a new socket connection
is made, such as for a new HTTP request, a new trust is re-established that is unrelated to previous
connections. As such, it is not possible with TLS alone to know that the same party is making
a set of calls, and therefore TLS alone cannot provide the continuity of security needed
for GNAP. However, mutual TLS (MTLS) does provide such security characteristics through the
use of the TLS client certificate, and thus MTLS is acceptable as a key-presentation mechanism
when applied as described in <xref target="mtls"/>.</t>

</section>
<section anchor="security-keys"><name>Protection of Client Instance Key Material</name>

<t>Client instances are identified by their unique keys, and anyone with access to a client instance's key material
will be able to impersonate that client instance to all parties. This is true for both calls to the AS
as well as calls to an RS using a key-bound access token.</t>

<t>Different types of client software have different methods available for creating, managing, and registering
keys. GNAP explicitly allows for ephemeral clients, such as SPAs, and single-user clients, such as
mobile applications, to create and present their own keys during the initial grant request. The client
software can securely generate a keypair on-device and present the public key, along with proof of holding that
public key, to the AS as part of the initial request. To facilitate trust in these ephemeral keys,
GNAP further allows for an extensible set of client information to be passed with the request. This
information can include device posture and third-party attestations of the client software's provenance
and authenticity, depending on the needs and capabilities of the client software and its deployment.</t>

<t>From GNAP's perspective, each distinct key is a different client instance. However, multiple client
instances can be grouped together by an AS policy and treated similarly to each other. For instance,
if an AS knows of several different keys for different servers within a cluster, the AS can
decide that authorization of one of these servers applies to all other servers within the cluster. An AS
that chooses to do this needs to be careful with how it groups different client keys together in its policy,
since the breach of one instance would have direct effects on the others in the cluster.</t>

<t>Additionally, if an end user controls multiple instances of a single type of client software, such as
having an application installed on multiple devices, each of these instances is expected to have a
separate key and be issued separate access tokens. However, if the AS is able to group these separate
instances together as described above, it can streamline the authorization process for new instances
of the same client software. For example, if two client instances can present proof of a valid installation
of a piece of client software, the AS would be able to associate the approval of the first instance of this
software to all related instances. The AS could then choose to bypass an explicit prompt of the resource
owner for approval during authorization, since such approval has already been given. An AS doing such
a process would need to take assurance measures that the different instances are in fact correlated
and authentic, as well as ensuring the expected resource owner is in control of the client instance.</t>

<t>Finally, if multiple instances of client software each have the same key, then from GNAP's perspective,
these are functionally the same client instance as GNAP has no reasonable way to differentiate between
them. This situation could happen if multiple instances within a cluster can securely share secret
information among themselves. Even though there are multiple copies of the software, the shared key
makes these copies all present as a single instance. It is considered bad practice to share keys between
copies of software unless they are very tightly integrated with each other and can be closely managed.
It is particularly bad practice to allow an end user to copy keys between client instances and to
willingly use the same key in multiple instances.</t>

</section>
<section anchor="security-as"><name>Protection of Authorization Server</name>

<t>The AS performs critical functions in GNAP, including authenticating client software, managing interactions
with end users to gather consent and provide notice, and issuing access tokens for client instances
to present to resource servers. As such, protecting the AS is central to any GNAP deployment.</t>

<t>If an attacker is able to gain control over an AS, they would be able to create fraudulent tokens and
manipulate registration information to allow for malicious clients. These tokens and clients would
be trusted by other components in the ecosystem under the protection of the AS.</t>

<t>If the AS is using signed access tokens, an attacker in control of the AS's signing keys would
be able to manufacture fraudulent tokens for use at RS's under the protection of the AS.</t>

<t>If an attacker is able to impersonate an AS, they would be able to trick legitimate client instances
into making signed requests for information which could potentially be proxied to a real AS. To combat
this, all communications to the AS need to be made over TLS or its equivalent, and the software
making the connection has to validate the certificate chain of the host it is connecting to.</t>

<t>Consequently, protecting, monitoring, and auditing the AS is paramount to preserving the security
of a GNAP-protected ecosystem.</t>

</section>
<section anchor="security-symmetric"><name>Symmetric and Asymmetric Client Instance Keys</name>

<t>The cryptographic methods used by GNAP for key-proofing can support both asymmetric and symmetric
cryptography, and can be extended to use a wide variety of mechanisms. While symmetric
cryptographic systems have some benefits in speed and simplicity, they have a distinct drawback
that both parties need access to the same key in order to do both signing and verification of
the message. This means that when the client instance calls the AS to request a token, the
AS needs to know the exact value of the client instance's key (or be able to derive it) in
order to validate the key proof signature. With asymmetric keys, the client needs only to
send its public key to the AS to allow for verification that the client holds the associated
private key, regardless of whether that key was pre-registered or not with the AS.</t>

<t>When used to bind to an access token, a key value must be known by the RS in order
to validate the proof signature on the request. Common methods for communicating these proofing
keys include putting information in a structured access token and allowing the RS to look
up the associated key material against the value of the access token. With symmetric cryptography,
both of these methods would expose the signing key to the RS, and in the case of an structured
access token, potentially to any party that can see the access token itself unless the token's
payload has been encrypted. Any of these parties would then be able to make calls using the
access token by creating a valid signature. With asymmetric cryptography, the RS only needs
to know the public key associated with the token in order to validate, and therefore cannot
create any new calls.</t>

<t>Symmetric keys also have the expected advantage of providing better protection against quantum
threats in the future. Also, these types of keys (and their secure derivations) are widely
supported among many cloud-based key management systems.</t>

<t>While both signing approaches are allowed, GNAP treats these two classes of keys somewhat
differently. Only the public portion of asymmetric keys are allowed to be sent by value
in requests to the AS when establishing a connection. Since sending a symmetric key (or
the private portion of an asymmetric key) would expose the signing material to any parties
on the request path, including any attackers, sending these kinds of keys is prohibited.
Symmetric keys can still be used by client instances, but only a reference to the key and
not its value can be sent. This allows the AS to use pre-registered symmetric keys as well
as key derivation schemes to take advantage of symmetric cryptography but without requiring
key distribution at runtime, which would expose the keys in transit.</t>

<t>Both the AS and client software can use systems such as hardware security modules to strengthen
their key security storage and generation for both asymmetric and symmetric keys (see also <xref target="key-protection"/>).</t>

</section>
<section anchor="security-access-tokens"><name>Generation of Access Tokens</name>

<t>The content of access tokens need to be such that only the generating AS would be able to
create them, and the contents cannot be manipulated by an attacker to gain different or additional
access rights.</t>

<t>One method for accomplishing this is to use a cryptographically random value for the access token,
generated by the AS using a secure randomization function with sufficiently high entropy. The odds of
an attacker guessing the output of the randomization function to collide with a valid access token
are exceedingly small, and even then the attacker would not have any control over what the
access token would represent since that information would be held close by the AS.</t>

<t>Another method for accomplishing this is to use a structured token that is cryptographically signed.
In this case, the payload of the access token declares to the RS what the token is good for, but
the signature applied by the AS during token generation covers this payload. Only the AS can create
such a signature and therefore only the AS can create such a signed token. The odds of an attacker
being able to guess a signature value with a useful payload are exceedingly small. This technique
only works if all targeted RS's check the signature of the access token. Any RS that does not
validate the signature of all presented tokens would be susceptible to injection of a modified
or falsified token. Furthermore, an AS has to carefully protect the keys used to sign access
tokens, since anyone with access to these signing keys would be able to create seemingly-valid
access tokens using them.</t>

</section>
<section anchor="security-bearer-tokens"><name>Bearer Access Tokens</name>

<t>Bearer access tokens can be used by any party that has access to the token itself, without any additional
information. As a natural consequence, any RS that a bearer token is presented to has the technical
capability of presenting that bearer token to another RS, as long as the token is valid. It also
means that any party that is able capture of the token value in storage or in transit is able to
use the access token. While bearer tokens are inherently simpler, this simplicity has been misapplied
and abused in making needlessly insecure systems.</t>

<t>In GNAP, key-bound access tokens are the default due to their higher security properties. While
bearer tokens can be used in GNAP, their use should be limited to cases where the simplicity
benefits outweigh the significant security downsides.</t>

</section>
<section anchor="security-bound-tokens"><name>Key-Bound Access Tokens</name>

<t>Key-bound access tokens, as the name suggests, are bound to a specific key and must be
presented along with proof of that key during use. The key itself is not presented at the same
time as the token, so even if a token value is captured, it cannot be used to make a new request. This
is particularly true for an RS, which will see the token value but will not see the keys used
to make the request.</t>

<t>Key-bound access tokens provide this additional layer of protection only when the RS checks the
signature of the message presented with the token. Acceptance of an invalid presentation signature,
or failure to check the signature entirely, would allow an attacker to make calls with a captured
access token without having access to the related signing key material.</t>

<t>In addition to validating the signature of the presentation message itself,
the RS also needs to ensure that the signing key used is appropriate for the presented token.
If an RS does not ensure that the right keys were used to sign a message with a specific
token, an attacker would be able to capture an access token and sign the request with their own
keys, thereby negating the benefits of using key-bound access tokens.</t>

<t>The RS also needs to ensure that sufficient portions of the message are covered by the
signature. Any items outside the signature could still affect the API's processing decisions,
but these items would not be strongly bound to the token presentation. As such, an attacker
could capture a valid request, then manipulate portions of the request outside of the
signature envelope in order to cause unwanted actions at the protected API.</t>

<t>Some key-bound tokens are susceptible to replay attacks, depending on the details of the signing method
used. If a signature method covers only portions of a given request, that same signature proof can
be used by an attacker to make a similar call, potentially even varying elements that are outside of
the protection of the signature. Key proofing mechanisms used with access tokens therefore need
to use replay protection mechanisms covered under the signature such as a per-message nonce, a
reasonably short time validity window, or other uniqueness constraints. The details of using these
will vary depending on the key proofing mechanism in use, but for example, HTTP Message Signatures
has both a <spanx style="verb">created</spanx> and <spanx style="verb">nonce</spanx> signature parameter as well as the ability to cover significant
portions of the HTTP message.</t>

</section>
<section anchor="security-credentials"><name>Exposure of End-user Credentials to Client Instance</name>

<t>As a delegation protocol, one of the main goals of GNAP is to prevent the client software from being
exposed to any credentials or information about the end user or resource owner as a requirement
of the delegation process. By using the variety of interaction mechanisms, the resource owner can
interact with the AS without ever authenticating to the client software, and without the client
software having to impersonate the resource owner through replay of their credentials.</t>

<t>Consequently, no interaction methods defined in the GNAP core require the end user to enter their
credentials, but it is technologically possible for an extension to be defined to carry such values.
Such an extension would be dangerous as it would allow rogue client software to directly collect, store,
and replay the end user's credentials outside of any legitimate use within a GNAP request.</t>

<t>The concerns of such an extension could be mitigated through use of a challenge and response
unlocked by the end user's credentials. For example, the AS presents a challenge as part of
an interaction start method, and the client instance signs that challenge using a key derived
from a password presented by the end user. It would be possible for the client software to
collect this password in a secure software enclave without exposing the password to the rest
of the client software or putting it across the wire to the AS. The AS can validate this challenge
response against a known password for the identified end user. While an approach such as this does
not remove all of the concerns surrounding such a password-based scheme, it is at least
possible to implement in a more secure fashion than simply collecting and replaying
the password. Even so, such schemes should only ever be used by trusted clients due to
the ease of abusing them.</t>

</section>
<section anchor="security-mixup"><name>Mixing Up Authorization Servers</name>

<t>If a client instance is able to work with multiple AS's simultaneously, it is more possible
for an attacker to add a compromised AS to the client instance's configuration and cause the
client software to start a request at the compromised AS. This AS could then proxy the client's
request to a valid AS in order to attempt to get the resource owner to approve access for
the legitimate client instance.</t>

<t>A client instance needs to always be aware of which AS it is talking to throughout a grant process, and ensure
that any callback for one AS does not get conflated with the callback to different AS. The interaction finish
hash calculate allows a client instance to protect against this kind of substitution, but only if
the client instance validates the hash. If the client instance does not use an interaction finish method
or does not check the interaction finish hash value, the compromised AS can be granted a valid
access token on behalf of the resource owner. See <xref target="AXELAND2021"/> for details
of one such attack, which has been since addressed in this document by including the grant endpoint
in the interaction hash calculation. The client instance still needs to validate the hash for
the attack to be prevented.</t>

</section>
<section anchor="security-client-userinfo"><name>Processing of Client-Presented User Information</name>

<t>GNAP allows the client instance to present assertions and identifiers of the current user to the AS as
part of the initial request. This information should only ever be taken by the AS as a hint, since the
AS has no way to tell if the represented person is present at the client software, without using
an interaction mechanism. This information does not guarantee the given user is there, but it does
constitute a statement by the client software that the AS can take into account.</t>

<t>For example, if a specific user is claimed to be present prior to interaction, but a different user
is shown to be present during interaction, the AS can either determine this to be an error or signal
to the client instance through returned subject information that the current user has changed from
what the client instance thought. This user information can also be used by the AS to streamline the
interaction process when the user is present. For example, instead of having the user type in their
account identifier during interaction at a redirected URI, the AS can immediately challenge the user
for their account credentials. Alternatively, if an existing session is detected, the AS can
determine that it matches the identifier provided by the client and subsequently skip an explicit
authentication event by the resource owner.</t>

<t>In cases where the AS trusts the client software more completely, due to policy
or by previous approval of a given client instance, the AS can take this user information as a
statement that the user is present and could issue access tokens and release subject information
without interaction. The AS should only take such action in very limited circumstances, as a
client instance could assert whatever it likes for the user's identifiers in its request.</t>

<t>When a client instance presents an assertion to the AS, the AS needs to evaluate that assertion. Since
the AS is unlikely to be the intended audience of an assertion held by the client software, the AS will
need to evaluate the assertion in a different context. Even in this case, the AS can still evaluate
that the assertion was generated by a trusted party, was appropriately signed, and is within
any time validity windows stated by the assertion. If the client instance's audience identifier
is known to the AS and can be associated with the client instance's presented key, the AS can also
evaluate that the appropriate client instance is presenting the claimed assertion. All of this
will prevent an attacker from presenting a manufactured assertion, or one captured from an
untrusted system. However, without validating the audience of the assertion, a captured assertion
could be presented by the client instance to impersonate a given end user. In such cases, the assertion
offers little more protection than a simple identifier would.</t>

<t>A special case exists where the AS is the generator of the assertion being presented by the
client instance. In these cases, the AS can validate that it did issue the assertion and
it is associated with the client instance presenting the assertion.</t>

</section>
<section anchor="security-registration"><name>Client Instance Pre-registration</name>

<t>Each client instance is identified by its own unique key, and for some kinds of client software such as a
web server or backend system, this identification can be facilitated by registering a single key for a piece
of client software ahead of time. This registration can be associated with a set of display attributes to
be used during the authorization process, identifying the client software to the user. In these cases,
it can be assumed that only one instance of client software will exist, likely to serve many different
users.</t>

<t>A client's registration record needs to include its identifying key. Furthermore, it is the case that
any clients using symmetric cryptography for key proofing mechanisms need to have their keys pre-registered.
The registration should also include any information that would aid in the authorization process, such as
a display name and logo. The registration record can also limit a given client to ask for certain
kinds of information and access, or be limited to specific interaction mechanisms at runtime.</t>

<t>It also is sensible to pre-register client instances when the software is acting autonomously, without
the need for a runtime approval by a resource owner or any interaction with an end user. In these cases,
an AS needs to rest on the trust decisions that have been determined prior to runtime in determining
what rights and tokens to grant to a given client instance.</t>

<t>However, it does not make sense to pre-register many types of clients. Single-page applications (SPAs) and
mobile/desktop applications in particular present problems with pre-registration. For SPAs, the instances
are ephemeral in nature and long-term registration of a single instance leads to significant storage and
management overhead at the AS. For mobile applications, each installation of the client software is
a separate instance, and sharing a key among all instances would be detrimental to security as the
compromise of any single installation would compromise all copies for all users.</t>

<t>An AS can treat these classes of client software differently from each other, perhaps by allowing access
to certain high-value APIs only to pre-registered known clients, or by requiring an active end user
delegation of authority to any client software not pre-registered.</t>

<t>An AS can also provide warnings and caveats to resource owners during the authorization process, allowing
the user to make an informed decision regarding the software they are authorizing. For example, if the AS
has done vetting of the client software and this specific instance, it can present a different authorization
screen compared to a client instance that is presenting all of its information at runtime.</t>

</section>
<section anchor="security-impersonation"><name>Client Instance Impersonation</name>

<t>If client instances are allowed to set their own user-facing display information, such as a display name and website
URL, a malicious client instance could impersonate legitimate client software for the purposes of tricking
users into authorizing the malicious client.</t>

<t>Requiring clients to pre-register does not fully mitigate this problem since many pre-registration
systems have self-service portals for management of client registration, allowing authenticated developers
to enter self-asserted information into the management portal.</t>

<t>An AS can mitigate this by actively filtering all self-asserted values presented by client software,
both dynamically as part of GNAP and through a registration portal, to limit the kinds of impersonation that
would be done.</t>

<t>An AS can also warn the resource owner about the provenance of the information it is displaying, allowing
the resource owner to make a more informed delegation decision. For example, an AS can visually differentiate
between a client instance that can be traced back to a specific developer's registration and an
instance that has self-asserted its own key and display information.</t>

</section>
<section anchor="security-browser-interception"><name>Interception of Information in the Browser</name>

<t>Most information passed through the web-browser is susceptible to interception and possible manipulation by
elements within the browser such as scripts loaded within pages. Information in the URI is exposed
through browser and server logs, and can also leak to other parties through HTTP <spanx style="verb">Referer</spanx> headers.</t>

<t>GNAP's design limits the information passed directly through the browser, allowing for opaque URIs in most circumstances.
For the redirect-based interaction finish mechanism, named query parameters are used to carry
unguessable opaque values. For these, GNAP requires creation and validation of a cryptographic
hash to protect the query parameters added to the URI and associate them with an ongoing grant
process. The client instance has to properly validate this hash to prevent an attacker from
injecting an interaction reference intended for a different AS or client instance.</t>

<t>Several interaction start mechanisms use URIs created by the AS and passed to the client instance.
While these URIs are opaque to the client instance, it's possible for the AS to include parameters,
paths, and other pieces of information that could leak security data or be manipulated by a party
in the middle of the transaction.</t>

</section>
<section anchor="security-callback-uri"><name>Callback URI Manipulation</name>

<t>The callback URI used in interaction finish mechanisms is defined by the client instance. This URI is
opaque to the AS, but can contain information relevant to the client instance's operations. In
particular, the client instance can include state information to allow the callback request to
be associated with an ongoing grant request.</t>

<t>Since this URI is exposed to the end user's browser, it is susceptible to both logging and manipulation
in transit before the request is made to the client software. As such, a client instance should
never put security-critical or private information into the callback URI in a cleartext form. For example,
if the client software includes a post-redirect target URI in its callback URI to the AS, this target URI
could be manipulated by an attacker, creating an open redirector at the client. Instead,
a client instance can use an unguessable identifier into the URI that can then be used by the client
software to look up the details of the pending request. Since this approach requires some form of statefulness
by the client software during the redirection process, clients that are not capable of holding state
through a redirect should not use redirect-based interaction mechanisms.</t>

</section>
<section anchor="security-redirect-status-codes"><name>Redirection Status Codes</name>

<t>As already described in <xref target="I-D.ietf-oauth-security-topics"/>, a server should never use the HTTP 307
status code to redirect a request that potentially contains user credentials. If an HTTP redirect
is used for such a request, the HTTP status code 303 "See Other" should be used instead.</t>

<t>The status code 307, as defined in the HTTP standard <xref target="RFC7231"/>, requires the user agent
to preserve the method and body of a request, thus submitting the body of the POST
request to the redirect target. In the HTTP standard <xref target="RFC7231"/>, only the status code 303 unambiguously enforces
rewriting the HTTP POST request to an HTTP GET request, which eliminates the POST body from the redirected request. For all other status codes, including
status code 302, user agents are allowed not to rewrite a POST request into a GET request and thus
to resubmit the body.</t>

<t>The use of status code 307 results in a vulnerability when using the
<xref target="response-interact-finish"><spanx style="verb">redirect</spanx> interaction finish method</xref>. With this method, the AS
potentially prompts the RO to enter their credentials in a form that is then submitted back to the
AS (using an HTTP POST request). The AS checks the credentials and, if successful, may directly
redirect the RO to the client instance's redirect URI. Due to the use of status code 307, the RO's
user agent now transmits the RO's credentials to the client instance. A malicious client instance
can then use the obtained credentials to impersonate the RO at the AS.</t>

<t>Redirection away from the initial URI in an interaction session could also leak information found in that
initial URI through the HTTP <spanx style="verb">Referer</spanx> header field, which would be sent by the user agent to the redirect
target. To avoid such leakage, a server can first redirect to an internal interstitial page without any identifying
or sensitive information on the URI before processing the request. When the user agent is ultimately
redirected from this page, no part of the original interaction URI will be found in the Referrer header.</t>

</section>
<section anchor="security-mtls"><name>MTLS Message Integrity</name>

<t>The <xref target="mtls">MTLS key proofing mechanism</xref> provides a means for a client instance to present a key
using a certificate at the TLS layer. Since TLS protects the entire HTTP message in transit,
verification of the TLS client certificate presented with the message provides a sufficient binding
between the two. However, since TLS is functioning at a separate layer from HTTP, there is no
direct connection between the TLS key presentation and the message itself, other than the fact that
the message was presented over the TLS channel. That is to say, any HTTP message can be presented
over the TLS channel in question with the same level of trust. The verifier is responsible for
ensuring the key in the TLS client certificate is the one expected for a particular request. For
example, if the request is a <xref target="request">grant request</xref>, the AS needs to compare the TLS client
certificate presented at the TLS layer to the key identified in the request body itself (either
by value or through a referenced identifier).</t>

<t>Furthermore, the prevalence of the TLS-terminating reverse proxy (TTRP) pattern in deployments adds
a wrinkle to the situation. In this common pattern, the TTRP validates the TLS connection and then forwards the HTTP message contents onward to an internal system for processing. The system
processing the HTTP message no longer has access to the original TLS connection's information and
context. To compensate for this, the TTRP could inject the TLS client certificate into the forwarded
request as a header parameter using <xref target="I-D.ietf-httpbis-client-cert-field"/>, giving the downstream
system access to the certificate information. The TTRP has to be trusted to provide accurate
certificate information, and the connection between the TTRP and the downstream system also has to
be protected. The TTRP could provide some additional assurance, for example, by adding its own
signature to the <spanx style="verb">Client-Cert</spanx> header field using <xref target="I-D.ietf-httpbis-message-signatures"/>. This
signature would be effectively ignored by GNAP but understood by the downstream service as part
of its deployment.</t>

<t>Additional considerations for different types of deployment patterns and key distribution
mechanisms for MTLS are found in <xref target="security-mtls-patterns"/>.</t>

</section>
<section anchor="security-mtls-patterns"><name>MTLS Deployment Patterns</name>

<t>GNAP does not specify how a client instance's keys could be made known to the AS ahead of time.
Public Key Infrastructure (PKI) can be used to manage the keys used by client instances when calling
the AS, allowing the AS to trust a root key from a trusted authority. This method is particularly
relevant to the MTLS key proofing method, where the client instance
presents its certificate to the AS as part of the TLS connection. An AS using PKI to validate the
MTLS connection would need to ensure that the presented certificate was issued by a trusted certificate
authority before allowing the connection to continue. PKI-based certificates would allow a key to be revoked
and rotated through management at the certificate authority without requiring additional registration
or management at the AS. PKI has historically been difficult to deploy, especially at scale, but it
remains an appropriate solution for systems where the required overhead is not an impediment.</t>

<t>MTLS in GNAP need not use a PKI backing, as self-signed certificates and certificates from untrusted
authorities can still be presented as part of a TLS connection. In this case, the verifier would
validate the connection but accept whatever certificate was presented by the client software. This
specific certificate would then be bound to all future connections from that client software by
being bound to the resulting access tokens. See <xref target="security-mtls"/> for more considerations on MTLS
as a key proofing mechanism.</t>

</section>
<section anchor="security-as-response"><name>Interception of Responses from the AS</name>

<t>Responses from the AS contain information vital to both the security and privacy operations of
GNAP. This information includes nonces used in cryptographic calculations, subject identifiers,
assertions, public keys, and information about what client software is requesting and was granted.</t>

<t>In addition, if bearer tokens are used or keys are issued alongside a bound access token, the
response from the AS contains all information necessary for use of the contained access token. Any
party that is capable of viewing such a response, such as an intermediary proxy, would be able
to exfiltrate and use this token. If the access token is instead bound to the client instance's
presented key, intermediaries no longer have sufficient information to use the token. They can
still, however, gain information about the end user as well as the actions of the client software.</t>

</section>
<section anchor="security-key-distribution"><name>Key Distribution</name>

<t>The keys for client instances could be distributed as part of the deployment process of instances
of the client software. For example, an application installation framework could generate
a keypair for each copy of client software, then both install it into the client software
upon installation and registering that instance with the AS.</t>

<t>Additionally, it's possible for the AS to generate keys to be used with access tokens that
are separate from the keys used by the client instance to request tokens. In this method,
the AS would generate the asymmetric keypair or symmetric key and return the entire key,
including all private signing information, to the client instance alongside the access
token itself. This approach would make interception of the return from the token endpoint
equivalent to that of a bearer token, since all information required to use the access token
would be present in the request.</t>

</section>
<section anchor="security-polling"><name>Interaction Finish Modes and Polling</name>

<t>During the interaction process, the client instance usually hands control of the user experience
over to another component, beit the system browser, another application, or some action
the resource owner is instructed to take on another device. By using an interaction finish
method, the client instance can be securely notified by the AS when the interaction is completed
and the next phase of the protocol should occur. This process includes information that the
client instance can use to validate the finish call from the AS and prevent some injection,
session hijacking, and phishing attacks.</t>

<t>Some types of client deployment are unable to receive an interaction finish message.
Without an interaction finish method to notify it, the client instance will need to poll the
grant continuation API while waiting for the resource owner to approve or deny the request.
An attacker could take advantage of this situation by capturing the interaction start
parameters and phishing a legitimate user into authorizing the attacker's waiting
client instance, which would in turn have no way of associating the completed interaction
with the start of the request.</t>

<t>However, it is important to note that this pattern is practically indistinguishable
from some legitimate use cases. For example, a smart device emits a code for
the resource owner to enter on a separate device. The smart device has to poll
because the expected behavior is that the interaction will take place on the separate
device, without a way to return information to the original device's context.</t>

<t>As such, developers need to weigh the risks of forgoing an interaction finish
method against the deployment capabilities of the client software and its
environment. Due to the increased security, an interaction finish method should
be employed whenever possible.</t>

</section>
<section anchor="security-sessions"><name>Session Management for Interaction Finish Methods</name>

<t>When using an interaction finish method such as <spanx style="verb">redirect</spanx> or <spanx style="verb">push</spanx>, the client instance receives
an unsolicited HTTP request from an unknown party. The client
instance needs to be able to successfully associate this incoming request with a specific pending
grant request being managed by the client instance. If the client instance is not careful and precise about
this, an attacker could associate their own session at the client instance with a stolen interaction
response. The means of preventing this varies by the type of client software and interaction methods in use.
Some common patterns are enumerated here.</t>

<t>If the end user interacts with the client instance through a web browser and the <spanx style="verb">redirect</spanx>
interaction finish method is used, the client instance can ensure that the incoming HTTP request
from the finish method is presented in the same browser session that the grant request was
started in. This technique is particularly useful when the <spanx style="verb">redirect</spanx> interaction start mode
is used as well, since in many cases the end user will follow the redirection with the
same browser that they are using to interact with the client instance.
The client instance can then store the relevant pending grant information in the
session, either in the browser storage directly (such as with a single-page application) or
in an associated session store on a back-end server. In both cases, when the incoming request
reaches the client instance, the session information can be used to ensure that the same party
that started the request is present as the request finishes.</t>

<t>Ensuring that the same party that started a request is present when that request finishes can
prevent phishing attacks, where an attacker starts a request at an honest client instance and
tricks an honest RO into authorizing it. For example, if an honest end user (that also acts as the
RO) wants to start a request through a client instance controlled by the attacker, the attacker can
start a request at an honest client instance and then redirect the honest end user to the
interaction URI from the attackers session with the honest client instance. If the honest end user
then fails to realize that it is not authorizing the attacker-controlled client instance (with which
it started its request) but the honest client instance when interacting with the AS, the attacker's
session with the honest client instance would be authorized. This would give the attacker access to
the honest end user's resources that the honest client instance is authorized to access. However,
if after the interaction the AS redirects the honest end user back to the client instance whose
grant request the end user just authorized, the honest end user is redirected to the honest client
instance. The honest client instance can then detect that it is not the party that started the
request that is present, since the request at the honest client instance was started by the
attacker, which can prevent the attack. This is related to <xref target="security-impersonation"/>, because again
the attack can be prevented by the AS informing the user as much as possible about the client
instance that is to be authorized.</t>

<t>If the end user does not interact with the client instance through a web browser or the interaction
start method does not use the same browser or device that the end user is interacting through
(such as the launch of a second device through a scannable code or presentation of a user code) the
client instance will not be able to strongly associate an incoming HTTP request with an established
session with the end user. This is also true when the <spanx style="verb">push</spanx> interaction finish method is used,
since the HTTP request comes directly from the interaction component of the AS. In these
circumstances, the client instance can at least ensure that the incoming HTTP
request can be uniquely associated with an ongoing grant request by making the interaction finish
callback URI unique for the grant when making the <xref target="request-interact-finish">interaction request</xref>.
Mobile applications and other client instances that generally serve only a single end user at a time
can use this unique incoming URL to differentiate between a legitimate incoming request and
an attacker's stolen request.</t>

<t>If the client instance does not have the ability to use an interaction finish method, it can
use polling to continue the request. The tradeoffs of this approach are discussed in
<xref target="security-polling"/>, and if possible, an explicit interaction finish method should be
used instead.</t>

</section>
<section anchor="security-client-storage"><name>Storage of Information During Interaction and Continuation</name>

<t>When starting an interactive grant request, a client application has a number of protocol elements
that it needs to manage, including nonces, references, keys, access tokens, and other elements.
During the interaction process, the client instance usually hands control of the user experience
over to another component, beit the system browser, another application, or some action
the resource owner is instructed to take on another device. In order for the client instance
to make its continuation call, it will need to recall all of these protocol elements. Usually
this means the client instance will need to store these protocol elements in some retrievable
fashion.</t>

<t>If the security protocol elements are stored on the end user's device, such as in browser
storage or in local application data stores, capture and exfiltration of this information could
allow an attacker to continue a pending transaction instead of the client instance. Client
software can make use of secure storage mechanisms, including hardware-based key and data
storage, to prevent such exfiltration.</t>

<t>Note that in GNAP, the client instance has to choose its interaction finish URI prior to making
the first call to the AS. As such, the interaction finish URI will often have a unique identifier
for the ongoing request, allowing the client instance to access the correct portion of its
storage. Since this URI is passed to other parties and often used through a browser,
this URI should not contain any security-sensitive information that would be
valuable to an attacker, such as any token identifier, nonce, or user information. Instead, a
cryptographically random value is suggested.</t>

</section>
<section anchor="security-continuation"><name>Denial of Service (DoS) through Grant Continuation</name>

<t>When a client instance starts off an interactive process, it will eventually need to continue the grant
request in a subsequent message to the AS. It's possible for a naive client implementation to continuously
send continuation requests to the AS while waiting for approval, especially if no interaction
finish method is used. Such constant requests could overwhelm the AS's ability to respond to both
these and other requests.</t>

<t>To mitigate this for well-behaved client software, the continuation response contains a <spanx style="verb">wait</spanx> parameter
that is intended to tell the client instance how long it should wait until making its next request.
This value can be used to back off client software that is checking too quickly by returning increasing
wait times for a single client instance.</t>

<t>If client software ignores the <spanx style="verb">wait</spanx> value and makes its continuation calls too quickly, or if the
client software assumes the absence of the <spanx style="verb">wait</spanx> values means it should poll immediately, the AS
can choose to return errors to the offending client instance, including possibly canceling the
ongoing grant request. With well-meaning client software these errors can indicate a need to change
the client software's programmed behavior.</t>

</section>
<section anchor="security-random-exhaustion"><name>Exhaustion of Random Value Space</name>

<t>Several parts of the GNAP process make use of unguessable randomized values, such as nonces,
tokens, and randomized URIs. Since these values are intended to be unique, a sufficiently
powerful attacker could make a large number of requests to trigger generation of randomized
values in an attempt to exhaust the random number generation space. While this attack is
particularly applicable to the AS, client software could likewise be targeted by an attacker
triggering new grant requests against an AS.</t>

<t>To mitigate this, software can ensure that its random values are chosen from a significantly
large pool that exhaustion of that pool is prohibitive for an attacker. Additionally, the
random values can be time-boxed in such a way as their validity windows are reasonably short.
Since many of the random values used within GNAP are used within limited portions of the protocol,
it is reasonable for a particular random value to be valid for only a small amount of time.
For example, the nonces used for interaction finish hash calculation need only to be valid while
the client instance is waiting for the finish callback and can be functionally expired
when the interaction has completed. Similarly, artifacts like access tokens and the interaction
reference can be limited to have lifetimes tied to their functional utility. Finally, each
different category of artifact (nonce, token, reference, identifier, etc.) can be
generated from a separate random pool of values instead of a single global value space.</t>

</section>
<section anchor="security-front-channel"><name>Front-channel URIs</name>

<t>Some interaction methods in GNAP make use of URIs accessed through the end user's browser,
known collectively as front-channel communication. These URIs are most notably present in
the <spanx style="verb">redirect</spanx> interaction <spanx style="verb">start</spanx> method and the <spanx style="verb">redirect</spanx> interaction <spanx style="verb">finish</spanx> mode. Since
these URIs are intended to be given to the end user, the end user and their browser will be
subjected to anything hosted at that URI including viruses, malware, and phishing scams. This
kind of risk is inherent to all redirection-based protocols, including GNAP when used in this way.</t>

<t>When talking to a new or unknown AS, a client instance might want to check the URI from the
interaction <spanx style="verb">start</spanx> against a blocklist and warn the end user before redirecting them. Many
client instances will provide an interstitial message prior to redirection in order to prepare
the user for control of the user experience being handed to the domain of the AS, and such a
method could be used to warn the user of potential threats. For instance, a rogue AS impersonating
a well-known service provider. Client software can also prevent this by managing an allowlist
of known and trusted AS's.</t>

<t>Alternatively, an attacker could start a GNAP request with a known and trusted AS but include
their own attack site URI as the callback for the redirect <spanx style="verb">finish</spanx> method. The attacker would then send
the interaction <spanx style="verb">start</spanx> URI to the victim and get them to click on it. Since the URI is at
the known AS, the victim is inclined to do so. The victim will then be prompted to approve the
attacker's application, and in most circumstances the victim will then be redirected to the
attacker's site whether or not the user approved the request. The AS could mitigate this partially
by using a blocklist and allowlist of interaction <spanx style="verb">finish</spanx> URIs during the client instance's
initial request, but this approach can be  especially difficult if the URI has any dynamic portion
chosen by the client software. The AS can couple these checks with policies associated with the
client instance that has been authenticated in the request. If the AS has any doubt about the
interaction finish URI, the AS can provide an interstitial warning to the end user before
processing the redirect.</t>

<t>Ultimately, all protocols that use redirect-based communication through the user's browser are
susceptible to having an attacker try to co-opt one or more of those URIs in order to harm the
user. It is the responsibility of the AS and the client software to provide appropriate warnings,
education, and mitigation to protect end users.</t>

</section>
<section anchor="security-assertions"><name>Processing Assertions</name>

<t>Identity assertions can be used in GNAP to convey subject information, both from the AS to the
client instance in a <xref target="response-subject">response</xref> and from the client instance to the AS in
a <xref target="request-subject">request</xref>. In both of these circumstances, when an assertion is passed in
GNAP, the receiver of the assertion needs to parse and process the assertion. As assertions are
complex artifacts with their own syntax and security, special care needs to be taken to prevent the
assertion values from being used as an attack vector.</t>

<t>All assertion processing needs to account for the security aspects of the assertion format in
use. In particular, the processor needs to parse the assertion from a JSON string object,
and apply the appropriate cryptographic processes to ensure the integrity of the assertion.</t>

<t>For example, when SAML 2 assertions are used, the receiver hast to parse an XML document. There are
many well-known security vulnerabilities in XML parsers, and the XML standard itself can be
attacked through the use of processing instructions and entity expansions to cause problems
with the processor. Therefore, any system capable of processing SAML 2 assertions also needs to
have a secure and correct XML parser. In addition to this, the SAML 2 specification uses XML
Signatures, which have their own implementation problems that need to be accounted for. Similar
requirements exist for OpenID Connect's ID token, which is based on the JSON Web Token (JWT) format
and the related JSON Object Signing And Encryption (JOSE) cryptography suite.</t>

</section>
<section anchor="security-cuckoo"><name>Stolen Token Replay</name>

<t>If a client instance can request tokens at multiple AS's, and the client instance uses the same keys
to make its requests across those different AS's, then it is possible for an attacker to replay a
stolen token issued by an honest AS from a compromised AS, thereby binding the stolen token to
the client instance's key in a different context. The attacker can manipulate the client instance
into using the stolen token at an RS, particularly at an RS that is expecting a token from the
honest AS. Since the honest AS issued the token and the client instance presents the token with
its expected bound key, the attack succeeds.</t>

<t>This attack has several preconditions. In this attack, the attacker does not need access to the
client instance's key and cannot use the stolen token directly at the RS, but the attacker is able
to get the access token value in some fashion. The client instance also needs to be configured to
talk to multiple AS's, including the attacker's controlled AS. Finally, the client instance needs
to be able to be manipulated by the attacker to call the RS while using a token issued from the
stolen AS. The RS does not need to be compromised or made to trust the attacker's AS.</t>

<t>To protect against this attack, the client instance can use a different key for each AS that it
talks to. Since the replayed token will be bound to the key used at the honest AS, the
uncompromised RS will reject the call since the client instance will be using the key used at
the attacker's AS instead with the same token.
When the MTLS key proofing method is used, a client instance can use self-signed
certificates to use a different key for each AS that it talks to, as discussed in
<xref target="security-mtls-patterns"/>.</t>

<t>Additionally, the client instance can keep a strong association between the RS and a specific AS
that it trusts to issue tokens for that RS. This strong binding also helps against some forms of
<xref target="security-mixup">AS mix-up attacks</xref>. Managing this binding is outside the scope of GNAP core,
but it can be managed either as a configuration element for the client instance or dynamically
through <xref target="rs-request-without-token">discovering the AS from the RS</xref>.</t>

<t>The details of this attack are available in <xref target="HELMSCHMIDT2022"/> with additional discussion and considerations.</t>

</section>
<section anchor="security-stateless-tokens"><name>Self-contained Stateless Access Tokens</name>

<t>The contents and format of the access token are at the discretion of the AS, and are opaque
to the client instance within GNAP. As discussed in the companion document,
<xref target="I-D.ietf-gnap-resource-servers"/>, the AS and RS can make use of stateless access tokens
with an internal structure and format. These access tokens allow an RS to validate the token without
having to make any external calls at runtime, allowing for benefits in some deployments, the
discussion of which are outside the scope of this specification.</t>

<t>However, the use of such self-contained access tokens has an effect on the ability of the AS to
provide certain functionality defined within this specification. Specifically, since the access
token is self-contained, it is difficult or impossible for an AS to signal to all RS's within an
ecosystem when a specific access token has been revoked. Therefore, an AS in such an ecosystem
should probably not offer token revocation functionality to client instances, since the client
instance's calls to such an endpoint is effectively meaningless. However, a client instance calling
the token revocation function will also throw out its copy of the token, so such a placebo endpoint
might not be completely meaningless. Token rotation similarly difficult because the AS has to
revoke the old access token after a rotation call has been made. If the access tokens are
completely self-contained and non-revocable, this means that there will be a period of time during
which both the old and new access tokens are valid and usable, which is an increased security risk
for the environment.</t>

<t>These problems can be mitigated by keeping the validity time windows of self-contained access tokens
reasonably short, limiting the time after a revocation event that a revoked token could be used.
Additionally, the AS could proactively signal to RS's under its control identifiers for revoked
tokens that have yet to expire. This type of information push would be expected to be relatively
small and infrequent, and its implementation is outside the scope of this specification.</t>

</section>
<section anchor="security-network-management"><name>Network Problems and Token and Grant Management</name>

<t>If a client instance makes a call to rotate an access token but the network connection is dropped
before the client instance receives the response with the new access token, the system as a whole
can end up in an inconsistent state, where the AS has already rotated the old access token and
invalidated it, but the client instance only has access to the invalidated access token and not the
newly rotated token value. If the client instance retries the rotation request, it would fail
because the client is no longer presenting a valid and current access token. A similar situation
can occur during grant continuation, where the same client instance calls to continue or update
a grant request without successfully receiving the results of the update.</t>

<t>To combat this, both
<xref target="continue-request">grant Management</xref> and <xref target="token-management">token management</xref> are designed to be
idempotent, where subsequent calls to the same function with the same credentials are meant to
produce the same results. For example, multiple calls to rotate the same access token need to
result in the same rotated token value.</t>

<t>In practice, an AS can hold on to an old token value for such limited purposes. For example, to
support rotating access tokens over unreliable networks, the AS receives the initial request to
rotate an access token and creates a new token value and returns it. The AS also marks the old
token value as having been used to create the newly-rotated token value. If the AS sees the old
token value within a small enough time window, such as a few seconds since the first rotation
attempt, the AS can return the same rotated access token. Furthermore, once the system has seen the
newly-rotated token in use, the original token can be discarded because the client instance has
proved that it did receive the token. The result of this is a system that is
eventually self-consistent without placing an undue complexity burden on the client instance.</t>

</section>
<section anchor="security-ssrf"><name>Server-side Request Forgery (SSRF)</name>

<t>There are several places within GNAP where a URI can be given to a party causing it to fetch that
URI during normal operation of the protocol. If an attacker is able to control the value of one of
these URIs within the protocol, the attacker could cause the target system to execute a request on
a URI that is within reach of the target system but normally unavailable to the attacker. For
example, an attacker sending a URL of <spanx style="verb">http://localhost/admin</spanx> to cause the server to access an
internal function on itself, or <spanx style="verb">https://192.168.0.14/</spanx> to call a service behind a firewall.
Even if the attacker does not gain access to the results of the call, the side effects of such
requests coming from a trusted host can be problematic to the security and sanctity of such
otherwise unexposed endpoints.</t>

<t>In GNAP, the most vulnerable place in the core protocol is the
<xref target="interaction-pushback">push-based post-interaction finish method</xref>, as the client instance is
less trusted than the AS and can use this method to make the AS call an arbitrary URI. While it is
not required by the protocol, the AS can fetch other client-instance provided URIs such as the logo
image or home page, for verification or privacy-preserving purposes before displaying them to the
resource owner as part of a consent screen. Furthermore, extensions to GNAP that allow or require
URI fetch could also be similarly susceptible, such as a system for having the AS fetch a client
instance's keys from a presented URI instead of the client instance presenting the key by value.
Such extensions are outside the scope of this specification, but any system deploying such an
extension would need to be aware of this issue.</t>

<t>To help mitigate this problem, similar approaches to protecting parties against
<xref target="security-front-channel">malicious redirects</xref> can be used. For example, all URIs that can result
in a direct request being made by a party in the protocol can be filtered through an allowlist or
blocklist. For example, an AS that supports the <spanx style="verb">push</spanx> based interaction <spanx style="verb">finish</spanx> can compare the
callback URI in the interaction request to a known URI for a pre-registered client instance, or it
can ensure that the URI is not on a blocklist of sensitive URLs such as internal network addresses.
However, note that because these types of calls happen outside of the view of human interaction,
it is not usually feasible to provide notification and warning to someone before the request
needs to be executed, as is the case with redirection URLs. As such, SSRF is somewhat more difficult
to manage at runtime, and systems should generally refuse to fetch a URI if unsure.</t>

</section>
</section>
<section anchor="privacy"><name>Privacy Considerations</name>

<t>The privacy considerations in this section are modeled after the list of privacy threats in <xref target="RFC6973"/>, "Privacy Considerations for Internet Protocols", and either explain how these threats are mitigated or advise how the threats relate to GNAP.</t>

<section anchor="surveillance"><name>Surveillance</name>

<t>Surveillance is the observation or monitoring of an individual's communications or activities. Surveillance can be conducted by observers or eavesdroppers at any point along the communications path.</t>

<t>GNAP assumes the TLS protection used throughout the spec is intact. Without the protection of TLS, there are many points throughout the use of GNAP that would lead to possible surveillance.</t>

<section anchor="surveillance-by-the-client"><name>Surveillance by the Client</name>

<t>The purpose of GNAP is to authorize clients to be able to access information on behalf of a user. So while it is expected that the client may be aware of the user's identity as well as data being fetched for that user, in some cases the extent of the client may be beyond what the user is aware of. For example, a client may be implemented as multiple distinct pieces of software, such as a logging service or a mobile app that reports usage data to an external backend service.</t>

</section>
<section anchor="surveillance-by-the-authorization-server"><name>Surveillance by the Authorization Server</name>

<t>The role of the authorization server is to manage the authorization of client instances to protect access to the user's data. In this role, the authorization server is by definition aware of each authorization of a client instance by a user. When the authorization server shares user information with the client instance, it needs to make sure that it has the permission from that user to do so.</t>

<t>Additionally, as part of the authorization grant process, the authorization server may be aware of which resource servers the client intends to use an access token at. However, it is possible to design a system using GNAP in which this knowledge is not made available to the authorization server, such as by avoiding the use of the <spanx style="verb">locations</spanx> object in the authorization request.</t>

<t>If the authorization server's implementation of access tokens is such that it requires a resource server call back to the authorization server to validate them, then the authorization server will be aware of which resource servers are actively in use and by which users and which clients. To avoid this possibility, the authorization server would need to structure access tokens in such a way that they can be validated by the resource server without notifying the authorization server that the token is being validated.</t>

</section>
</section>
<section anchor="stored-data"><name>Stored Data</name>

<t>Several parties in the GNAP process are expected to persist data at least temporarily, if not semi-permanently, for the normal functioning of the system. If compromised, this could lead to exposure of sensitive information. This section documents the potentially sensitive information each party in GNAP is expected to store for normal operation. Naturally it is possible that any party is storing information for longer than technically necessary of the protocol mechanics (such as audit logs, etc).</t>

<t>The authorization server is expected to store subject identifiers for users indefinitely, in order to be able to include them in the responses to clients. The authorization server is also expected to store client key identifiers associated with display information about the client such as its name and logo.</t>

<t>The client is expected to store its client instance key indefinitely, in order to authenticate to the authorization server for the normal functioning of the GNAP flows. Additionally, the client will be temporarily storing artifacts issued by the authorization server during a flow, and these artifacts <bcp14>SHOULD</bcp14> be discarded by the client when the transaction is complete.</t>

<t>The resource server is not required to store any state for its normal operation. Depending on the implementation of access tokens, the resource server may need to cache public keys from the authorization server in order to validate access tokens.</t>

</section>
<section anchor="intrusion"><name>Intrusion</name>

<t>Intrusion refers to the ability of various parties to send unsolicited messages or cause denial of service for unrelated parties.</t>

<t>If the resource owner is different from the end user, there is an opportunity for the end user to cause unsolicited messages to be sent to the resource owner if the system prompts the resource owner for consent when an end user attempts to access their data.</t>

<t>The format and contents of subject identifiers are intentionally not defined by GNAP. If the authorization server uses values for subject identifiers that are also identifiers for communication channels, (e.g. an email address or phone number), this opens up the possibility for a client to learn this information when it was not otherwise authorized to access this kind of data about the user.</t>

</section>
<section anchor="correlation"><name>Correlation</name>

<t>The threat of correlation is the combination of various pieces of information related to an individual in a way that defies their expectations of what others know about them.</t>

<section anchor="correlation-by-clients"><name>Correlation by Clients</name>

<t>The biggest risk of correlation in GNAP is when an authorization server returns stable consistent user identifiers to multiple different applications. In this case, applications created by different parties would be able to correlate these user identifiers out of band in order to know which users they have in common.</t>

<t>The most common example of this in practice is tracking for advertising purposes, such that client A shares their list of user IDs with an ad platform that is then able to retarget ads to applications created by other parties. In contrast, a positive example of correlation is a corporate acquisition where two previously unrelated clients now do need to be able to identify the same user between the two clients.</t>

</section>
<section anchor="correlation-by-resource-servers"><name>Correlation by Resource Servers</name>

<t>Unrelated resource servers also have an opportunity to correlate users if the authorization server includes stable user identifiers in access tokens or in access token introspection responses.</t>

<t>In some cases a resource server may not actually need to be able to identify users, (such as a resource server providing access to a company cafeteria menu which only needs to validate whether the user is a current employee), so authorization servers should be thoughtful of when user identifiers are actually necessary to communicate to resource servers for the functioning of the system.</t>

<t>However, note that the lack of inclusion of a user identifier in an access token may be a risk if there is a concern that two users may voluntarily share access tokens between them in order to access protected resources. For example, if a website wants to limit access to only people over 18, and such does not need to know any user identifiers, an access token may be issued by an AS contains only the claim "over 18". If the user is aware that this access token doesn't reference them individually, they may be willing to share the access token with a user who is under 18 in order to let them get access to the website. (Note that the binding of an access token to a non-extractable client instance key also prevents the access token from being voluntarily shared.)</t>

</section>
<section anchor="correlation-by-authorization-servers"><name>Correlation by Authorization Servers</name>

<t>Clients are expected to be identified by their client instance key. If a particular client instance key is used at more than one authorization server, this could open up the possibility for multiple unrelated authorization servers to correlate client instances. This is especially a problem in the common case where a client instance is used by a single individual, as it would allow the authorization servers to correlate that individual between them. If this is a concern of a client, the client should use distinct keys with each authorization server.</t>

</section>
</section>
<section anchor="disclosure-in-shared-references"><name>Disclosure in Shared References</name>

<t>Throughout many parts of GNAP, the parties pass shared references between each other, sometimes in place of the values themselves. For example the <spanx style="verb">interact_ref</spanx> value used throughout the flow. These references are intended to be random strings and should not contain any private or sensitive data that would potentially leak information between parties.</t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="BCP195" target="https://www.rfc-editor.org/info/bcp195">
  <front>
    <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
    <author initials="Y." surname="Sheffer">
      <organization></organization>
    </author>
    <author initials="R." surname="Holz">
      <organization></organization>
    </author>
    <author initials="P." surname="Saint-Andre">
      <organization></organization>
    </author>
    <date year="2015" month="May"/>
  </front>
</reference>




<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC2397' target='https://www.rfc-editor.org/info/rfc2397'>
<front>
<title>The &quot;data&quot; URL scheme</title>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<date month='August' year='1998'/>
<abstract><t>A new URL scheme, &quot;data&quot;, is defined. It allows inclusion of small data items as &quot;immediate&quot; data, as if it had been included externally. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2397'/>
<seriesInfo name='DOI' value='10.17487/RFC2397'/>
</reference>



<reference anchor='RFC3986' target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'><organization/></author>
<author fullname='R. Fielding' initials='R.' surname='Fielding'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<date month='January' year='2005'/>
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>



<reference anchor='RFC4648' target='https://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<date month='October' year='2006'/>
<abstract><t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4648'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



<reference anchor='RFC5646' target='https://www.rfc-editor.org/info/rfc5646'>
<front>
<title>Tags for Identifying Languages</title>
<author fullname='A. Phillips' initials='A.' role='editor' surname='Phillips'><organization/></author>
<author fullname='M. Davis' initials='M.' role='editor' surname='Davis'><organization/></author>
<date month='September' year='2009'/>
<abstract><t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object.  It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange.  This document  specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='47'/>
<seriesInfo name='RFC' value='5646'/>
<seriesInfo name='DOI' value='10.17487/RFC5646'/>
</reference>



<reference anchor='RFC7231' target='https://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author fullname='R. Fielding' initials='R.' role='editor' surname='Fielding'><organization/></author>
<author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'><organization/></author>
<date month='June' year='2014'/>
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>



<reference anchor='RFC7234' target='https://www.rfc-editor.org/info/rfc7234'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
<author fullname='R. Fielding' initials='R.' role='editor' surname='Fielding'><organization/></author>
<author fullname='M. Nottingham' initials='M.' role='editor' surname='Nottingham'><organization/></author>
<author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'><organization/></author>
<date month='June' year='2014'/>
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t></abstract>
</front>
<seriesInfo name='RFC' value='7234'/>
<seriesInfo name='DOI' value='10.17487/RFC7234'/>
</reference>



<reference anchor='RFC7468' target='https://www.rfc-editor.org/info/rfc7468'>
<front>
<title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<author fullname='S. Leonard' initials='S.' surname='Leonard'><organization/></author>
<date month='April' year='2015'/>
<abstract><t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS).  The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed.  This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t></abstract>
</front>
<seriesInfo name='RFC' value='7468'/>
<seriesInfo name='DOI' value='10.17487/RFC7468'/>
</reference>



<reference anchor='RFC7515' target='https://www.rfc-editor.org/info/rfc7515'>
<front>
<title>JSON Web Signature (JWS)</title>
<author fullname='M. Jones' initials='M.' surname='Jones'><organization/></author>
<author fullname='J. Bradley' initials='J.' surname='Bradley'><organization/></author>
<author fullname='N. Sakimura' initials='N.' surname='Sakimura'><organization/></author>
<date month='May' year='2015'/>
<abstract><t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7515'/>
<seriesInfo name='DOI' value='10.17487/RFC7515'/>
</reference>



<reference anchor='RFC7517' target='https://www.rfc-editor.org/info/rfc7517'>
<front>
<title>JSON Web Key (JWK)</title>
<author fullname='M. Jones' initials='M.' surname='Jones'><organization/></author>
<date month='May' year='2015'/>
<abstract><t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key.  This specification also defines a JWK Set JSON data structure that represents a set of JWKs.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7517'/>
<seriesInfo name='DOI' value='10.17487/RFC7517'/>
</reference>



<reference anchor='RFC6749' target='https://www.rfc-editor.org/info/rfc6749'>
<front>
<title>The OAuth 2.0 Authorization Framework</title>
<author fullname='D. Hardt' initials='D.' role='editor' surname='Hardt'><organization/></author>
<date month='October' year='2012'/>
<abstract><t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.  This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6749'/>
<seriesInfo name='DOI' value='10.17487/RFC6749'/>
</reference>



<reference anchor='RFC6750' target='https://www.rfc-editor.org/info/rfc6750'>
<front>
<title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
<author fullname='M. Jones' initials='M.' surname='Jones'><organization/></author>
<author fullname='D. Hardt' initials='D.' surname='Hardt'><organization/></author>
<date month='October' year='2012'/>
<abstract><t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources.  Any party in possession of a bearer token (a &quot;bearer&quot;) can use it to get access to the associated resources (without demonstrating possession of a cryptographic key).  To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6750'/>
<seriesInfo name='DOI' value='10.17487/RFC6750'/>
</reference>



<reference anchor='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<date month='May' year='2017'/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference anchor='RFC8259' target='https://www.rfc-editor.org/info/rfc8259'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author fullname='T. Bray' initials='T.' role='editor' surname='Bray'><organization/></author>
<date month='December' year='2017'/>
<abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t><t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t></abstract>
</front>
<seriesInfo name='STD' value='90'/>
<seriesInfo name='RFC' value='8259'/>
<seriesInfo name='DOI' value='10.17487/RFC8259'/>
</reference>



<reference anchor='RFC8705' target='https://www.rfc-editor.org/info/rfc8705'>
<front>
<title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
<author fullname='B. Campbell' initials='B.' surname='Campbell'><organization/></author>
<author fullname='J. Bradley' initials='J.' surname='Bradley'><organization/></author>
<author fullname='N. Sakimura' initials='N.' surname='Sakimura'><organization/></author>
<author fullname='T. Lodderstedt' initials='T.' surname='Lodderstedt'><organization/></author>
<date month='February' year='2020'/>
<abstract><t>This document describes OAuth client authentication and certificate-bound access and refresh tokens using mutual Transport Layer Security (TLS) authentication with X.509 certificates.  OAuth clients are provided a mechanism for authentication to the authorization server using mutual TLS, based on either self-signed certificates or public key infrastructure (PKI). OAuth authorization servers are provided a mechanism for binding access tokens to a client's mutual-TLS certificate, and OAuth protected resources are provided a method for ensuring that such an access token presented to it was issued to the client presenting the token.</t></abstract>
</front>
<seriesInfo name='RFC' value='8705'/>
<seriesInfo name='DOI' value='10.17487/RFC8705'/>
</reference>


<reference anchor='I-D.ietf-gnap-resource-servers'>
   <front>
      <title>Grant Negotiation and Authorization Protocol Resource Server Connections</title>
      <author fullname='Justin Richer'>
	 <organization>Bespoke Engineering</organization>
      </author>
      <author fullname='Aaron Parecki'>
	 <organization>Okta</organization>
      </author>
      <author fullname='Fabien Imbault'>
	 <organization>acert.io</organization>
      </author>
      <date day='12' month='July' year='2021'/>
      <abstract>
	 <t>   GNAP defines a mechanism for delegating authorization to a piece of
   software, and conveying that delegation to the software.  This
   extension defines methods for resource servers (RS) to communicate
   with authorization servers (AS) in an interoperable fashion.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-gnap-resource-servers-01'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-gnap-resource-servers-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-httpbis-message-signatures'>
   <front>
      <title>HTTP Message Signatures</title>
      <author fullname='Annabelle Backman'>
	 <organization>Amazon</organization>
      </author>
      <author fullname='Justin Richer'>
	 <organization>Bespoke Engineering</organization>
      </author>
      <author fullname='Manu Sporny'>
	 <organization>Digital Bazaar</organization>
      </author>
      <date day='6' month='March' year='2022'/>
      <abstract>
	 <t>   This document describes a mechanism for creating, encoding, and
   verifying digital signatures or message authentication codes over
   components of an HTTP message.  This mechanism supports use cases
   where the full HTTP message may not be known to the signer, and where
   the message may be transformed (e.g., by intermediaries) before
   reaching the verifier.  This document also describes a means for
   requesting that a signature be applied to a subsequent HTTP message
   in an ongoing HTTP exchange.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-message-signatures-09'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-httpbis-message-signatures-09.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-httpbis-digest-headers'>
   <front>
      <title>Digest Fields</title>
      <author fullname='Roberto Polli'>
	 <organization>Team Digitale, Italian Government</organization>
      </author>
      <author fullname='Lucas Pardue'>
	 <organization>Cloudflare</organization>
      </author>
      <date day='16' month='November' year='2021'/>
      <abstract>
	 <t>   This document defines HTTP fields that support integrity checksums.
   The Digest field can be used for the integrity of HTTP
   representations.  The Content-Digest field can be used for the
   integrity of HTTP message content.  Want-Digest and Want-Content-
   Digest can be used to indicate a sender&#39;s desire to receive integrity
   fields respectively.

   This document obsoletes RFC 3230.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-digest-headers-07'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-httpbis-digest-headers-07.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-secevent-subject-identifiers'>
   <front>
      <title>Subject Identifiers for Security Event Tokens</title>
      <author fullname='Annabelle Backman'>
	 <organization>Amazon</organization>
      </author>
      <author fullname='Marius Scurtescu'>
	 <organization>Coinbase</organization>
      </author>
      <date day='25' month='February' year='2022'/>
      <abstract>
	 <t>   Security events communicated within Security Event Tokens may support
   a variety of identifiers to identify subjects related to the event.
   This specification formalizes the notion of subject identifiers as
   structured information that describe a subject, and named formats
   that define the syntax and semantics for encoding subject identifiers
   as JSON objects.  It also defines a registry for defining and
   allocating names for such formats, as well as the sub_id JSON Web
   Token (JWT) claim.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-secevent-subject-identifiers-09'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-secevent-subject-identifiers-09.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-oauth-rar'>
   <front>
      <title>OAuth 2.0 Rich Authorization Requests</title>
      <author fullname='Torsten Lodderstedt'>
	 <organization>yes.com</organization>
      </author>
      <author fullname='Justin Richer'>
	 <organization>Bespoke Engineering</organization>
      </author>
      <author fullname='Brian Campbell'>
	 <organization>Ping Identity</organization>
      </author>
      <date day='26' month='January' year='2022'/>
      <abstract>
	 <t>   This document specifies a new parameter authorization_details that is
   used to carry fine-grained authorization data in OAuth messages.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-oauth-rar-10'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-oauth-rar-10.txt' type='TXT'/>
</reference>


<reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html">
  <front>
    <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
    <author initials="N." surname="Sakimura">
      <organization></organization>
    </author>
    <author initials="J." surname="Bradley">
      <organization></organization>
    </author>
    <author initials="M." surname="Jones">
      <organization></organization>
    </author>
    <author initials="B." surname="de Medeiros">
      <organization></organization>
    </author>
    <author initials="C." surname="Mortimore">
      <organization></organization>
    </author>
    <date year="2014" month="November"/>
  </front>
</reference>




<reference anchor='RFC8792' target='https://www.rfc-editor.org/info/rfc8792'>
<front>
<title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<author fullname='E. Auerswald' initials='E.' surname='Auerswald'><organization/></author>
<author fullname='A. Farrel' initials='A.' surname='Farrel'><organization/></author>
<author fullname='Q. Wu' initials='Q.' surname='Wu'><organization/></author>
<date month='June' year='2020'/>
<abstract><t>This document defines two strategies for handling long lines in width-bounded text content.  One strategy, called the &quot;single backslash&quot; strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line.  The second strategy, called the &quot;double backslash&quot; strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy.  Both strategies use a self-describing header enabling automated reconstitution of the original content.</t></abstract>
</front>
<seriesInfo name='RFC' value='8792'/>
<seriesInfo name='DOI' value='10.17487/RFC8792'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC6973' target='https://www.rfc-editor.org/info/rfc6973'>
<front>
<title>Privacy Considerations for Internet Protocols</title>
<author fullname='A. Cooper' initials='A.' surname='Cooper'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='B. Aboba' initials='B.' surname='Aboba'><organization/></author>
<author fullname='J. Peterson' initials='J.' surname='Peterson'><organization/></author>
<author fullname='J. Morris' initials='J.' surname='Morris'><organization/></author>
<author fullname='M. Hansen' initials='M.' surname='Hansen'><organization/></author>
<author fullname='R. Smith' initials='R.' surname='Smith'><organization/></author>
<date month='July' year='2013'/>
<abstract><t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications.  It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices.  It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t></abstract>
</front>
<seriesInfo name='RFC' value='6973'/>
<seriesInfo name='DOI' value='10.17487/RFC6973'/>
</reference>


<reference anchor='I-D.ietf-httpbis-client-cert-field'>
   <front>
      <title>Client-Cert HTTP Header Field</title>
      <author fullname='Brian Campbell'>
	 <organization>Ping Identity</organization>
      </author>
      <author fullname='Mike Bishop'>
	 <organization>Akamai</organization>
      </author>
      <date day='25' month='January' year='2022'/>
      <abstract>
	 <t>   This document defines HTTP extension header fields that allow a TLS
   terminating reverse proxy to convey the client certificate
   information of a mutually-authenticated TLS connection to the origin
   server in a common and predictable manner.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-client-cert-field-01'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-httpbis-client-cert-field-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-oauth-security-topics'>
   <front>
      <title>OAuth 2.0 Security Best Current Practice</title>
      <author fullname='Torsten Lodderstedt'>
	 <organization>yes.com</organization>
      </author>
      <author fullname='John Bradley'>
	 <organization>Yubico</organization>
      </author>
      <author fullname='Andrey Labunets'>
	 <organization>Independent Researcher</organization>
      </author>
      <author fullname='Daniel Fett'>
	 <organization>yes.com</organization>
      </author>
      <date day='16' month='December' year='2021'/>
      <abstract>
	 <t>   This document describes best current security practice for OAuth 2.0.
   It updates and extends the OAuth 2.0 Security Threat Model to
   incorporate practical experiences gathered since OAuth 2.0 was
   published and covers new threats relevant due to the broader
   application of OAuth 2.0.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-oauth-security-topics-19'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-oauth-security-topics-19.txt' type='TXT'/>
</reference>


<reference anchor="promise-theory" target="http://markburgess.org/promises.html">
  <front>
    <title>Promise theory</title>
    <author initials="M." surname="Burgess">
      <organization></organization>
    </author>
    <author initials="J." surname="Bergstra">
      <organization></organization>
    </author>
    <date year="2014" month="January"/>
  </front>
</reference>
<reference anchor="AXELAND2021" target="https://odr.chalmers.se/handle/20.500.12380/304105">
  <front>
    <title>Security Analysis of Attack Surfaces on the Grant Negotiation and Authorization Protocol</title>
    <author initials="Å." surname="Axeland">
      <organization></organization>
    </author>
    <author initials="O." surname="Oueidat">
      <organization></organization>
    </author>
    <date year="2021"/>
  </front>
</reference>
<reference anchor="HELMSCHMIDT2022" target="tbd">
  <front>
    <title>tbd</title>
    <author initials="F." surname="Helmschmidt">
      <organization></organization>
    </author>
    <date year="2022"/>
  </front>
</reference>


    </references>


<section anchor="history"><name>Document History</name>

<t><list style="symbols">
  <t>-09
  <list style="symbols">
      <t>Added security considerations on redirection status codes.</t>
      <t>Added security considerations on cuckoo token attack.</t>
      <t>Made token management URL required on token rotation.</t>
      <t>Added considerations on token rotation and self-contained tokens.</t>
      <t>Added security considerations for SSRF.</t>
      <t>Moved normative requirements about end user presence to security considerations.</t>
      <t>Clarified default wait times for continuation requests (including polling).</t>
      <t>Clarified URI vs. URL.</t>
      <t>Added "user_code_uri" mode, removed "uri" from "user_code" mode.</t>
      <t>Consistently formatted all parameter lists.</t>
      <t>Updated examples for HTTP Signatures.</t>
    </list></t>
  <t>-08
  <list style="symbols">
      <t>Update definition for "Client" to account for the case of no end user.</t>
      <t>Change definition for "Subject".</t>
      <t>Expanded security and privacy considerations for more situations.</t>
      <t>Added cross-links from security and privacy considerations.</t>
      <t>Editorial updates.</t>
    </list></t>
  <t>-07
  <list style="symbols">
      <t>Replace user handle by opaque identifier</t>
      <t>Added trust relationships</t>
      <t>Added privacy considerations section</t>
      <t>Added security considerations.</t>
    </list></t>
  <t>-06
  <list style="symbols">
      <t>Removed "capabilities" and "existing_grant" protocol fields.</t>
      <t>Removed separate "instance_id" field.</t>
      <t>Split "interaction_methods_supported" into "interaction_start_modes_supported" and "interaction_finish_methods_supported".</t>
      <t>Added AS endpoint to hash calculation to fix mix-up attack.</t>
      <t>Added "privileges" field to resource access request object.</t>
      <t>Moved client-facing RS response back from GNAP-RS document.</t>
      <t>Removed oauthpop key binding.</t>
      <t>Removed dpop key binding.</t>
      <t>Added example DID identifier.</t>
      <t>Changed token response booleans to flag structure to match request.</t>
      <t>Updated signature examples to use HTTP Message Signatures.</t>
    </list></t>
  <t>-05
  <list style="symbols">
      <t>Changed "interaction_methods" to "interaction_methods_supported".</t>
      <t>Changed "key_proofs" to "key_proofs_supported".</t>
      <t>Changed "assertions" to "assertions_supported".</t>
      <t>Updated discovery and field names for subject formats.</t>
      <t>Add an appendix to provide protocol rationale, compared to OAuth2.</t>
      <t>Updated subject information definition.</t>
      <t>Refactored the RS-centric components into a new document.</t>
      <t>Updated cryptographic proof of possession methods to match current reference syntax.</t>
      <t>Updated proofing language to use "signer" and "verifier" generically.</t>
      <t>Updated cryptographic proof of possession examples.</t>
      <t>Editorial cleanup and fixes.</t>
      <t>Diagram cleanup and fixes.</t>
    </list></t>
  <t>-04
  <list style="symbols">
      <t>Updated terminology.</t>
      <t>Refactored key presentation and binding.</t>
      <t>Refactored "interact" request to group start and end modes.</t>
      <t>Changed access token request and response syntax.</t>
      <t>Changed DPoP digest field to 'htd' to match proposed FAPI profile.</t>
      <t>Include the access token hash in the DPoP message.</t>
      <t>Removed closed issue links.</t>
      <t>Removed function to read state of grant request by client.</t>
      <t>Closed issues related to reading and updating access tokens.</t>
    </list></t>
  <t>-03
  <list style="symbols">
      <t>Changed "resource client" terminology to separate "client instance" and "client software".</t>
      <t>Removed OpenID Connect "claims" parameter.</t>
      <t>Dropped "short URI" redirect.</t>
      <t>Access token is mandatory for continuation.</t>
      <t>Removed closed issue links.</t>
      <t>Editorial fixes.</t>
    </list></t>
  <t>-02
  <list style="symbols">
      <t>Moved all "editor's note" items to GitHub Issues.</t>
      <t>Added JSON types to fields.</t>
      <t>Changed "GNAP Protocol" to "GNAP".</t>
      <t>Editorial fixes.</t>
    </list></t>
  <t>-01
  <list style="symbols">
      <t>"updated_at" subject info timestamp now in ISO 8601 string format.</t>
      <t>Editorial fixes.</t>
      <t>Added Aaron and Fabien as document authors.</t>
    </list></t>
  <t>-00
  <list style="symbols">
      <t>Initial working group draft.</t>
    </list></t>
</list></t>

</section>
<section anchor="vs-oauth2"><name>Compared to OAuth 2.0</name>

<t>GNAP's protocol design differs from OAuth 2.0's in several fundamental ways:</t>

<t><list style="numbers">
  <t><strong>Consent and authorization flexibility:</strong>  <vspace blankLines='1'/>
OAuth 2.0 generally assumes the user has access to the a web browser. The type of interaction available is fixed by the grant type, and the most common interactive grant types start in the browser. OAuth 2.0 assumes that the user using the client software is the same user that will interact with the AS to approve access.  <vspace blankLines='1'/>
GNAP allows various patterns to manage authorizations and consents required to fulfill this requested delegation, including information sent by the client instance, information supplied by external parties, and information gathered through the interaction process. GNAP allows a client instance to list different ways that it can start and finish an interaction, and these can be mixed together as needed for different use cases. GNAP interactions can use a browser, but don’t have to. Methods can use inter-application messaging protocols, out-of-band data transfer, or anything else. GNAP allows extensions to define new ways to start and finish an interaction, as new methods and platforms are expected to become available over time. GNAP is designed to allow the end user and the resource owner to be two different people, but still works in the optimized case of them being the same party.</t>
  <t><strong>Intent registration and inline negotiation:</strong>  <vspace blankLines='1'/>
OAuth 2.0 uses different “grant types” that start at different endpoints for different purposes. Many of these require discovery of several interrelated parameters.  <vspace blankLines='1'/>
GNAP requests all start with the same type of request to the same endpoint at the AS. Next steps are negotiated between the client instance and AS based on software capabilities, policies surrounding requested access, and the overall context of the ongoing request. GNAP defines a continuation API that allows the client instance and AS to request and send additional information from each other over multiple steps. This continuation API uses the same access token protection that other GNAP-protected APIs use. GNAP allows discovery to optimize the requests but it isn’t required thanks to the negotiation capabilities.</t>
  <t><strong>Client instances:</strong>  <vspace blankLines='1'/>
OAuth 2.0 requires all clients to be registered at the AS and to use a client_id known to the AS as part of the protocol. This client_id is generally assumed to be assigned by a trusted authority during a registration process, and OAuth places a lot of trust on the client_id as a result. Dynamic registration allows different classes of clients to get a client_id at runtime, even if they only ever use it for one request.  <vspace blankLines='1'/>
GNAP allows the client instance to present an unknown key to the AS and use that key to protect the ongoing request. GNAP’s client instance identifier mechanism allows for pre-registered clients and dynamically registered clients to exist as an optimized case without requiring the identifier as part of the protocol at all times.</t>
  <t><strong>Expanded delegation:</strong>  <vspace blankLines='1'/>
OAuth 2.0 defines the “scope” parameter for controlling access to APIs. This parameter has been coopted to mean a number of different things in different protocols, including flags for turning special behavior on and off, including the return of data apart from the access token. The “resource” parameter and RAR extensions (as defined in <xref target="I-D.ietf-oauth-rar"/>) expand on the “scope” concept in similar but different ways.  <vspace blankLines='1'/>
GNAP defines a rich structure for requesting access, with string references as an optimization. GNAP defines methods for requesting directly-returned user information, separate from API access. This information includes identifiers for the current user and structured assertions. The core GNAP protocol makes no assumptions or demands on the format or contents of the access token, but the RS extension allows a negotiation of token formats between the AS and RS.</t>
  <t><strong>Cryptography-based security:</strong>  <vspace blankLines='1'/>
OAuth 2.0 uses shared bearer secrets, including the client_secret and access token, and advanced authentication and sender constraint have been built on after the fact in inconsistent ways.  <vspace blankLines='1'/>
In GNAP, all communication between the client instance and AS is bound to a key held by the client instance. GNAP uses the same cryptographic mechanisms for both authenticating the client (to the AS) and binding the access token (to the RS and the AS). GNAP allows extensions to define new cryptographic protection mechanisms, as new methods are expected to become available over time. GNAP does not have a notion of “public clients” because key information can always be sent and used dynamically.</t>
  <t><strong>Privacy and usable security:</strong>  <vspace blankLines='1'/>
OAuth 2.0's deployment model assumes a strong binding between the AS and the RS.  <vspace blankLines='1'/>
GNAP is designed to be interoperable with decentralized identity standards and to provide a human-centric authorization layer. In addition to the core protocol, GNAP supports various patterns of communication between RSs and ASs through extensions. GNAP tries to limit the odds of a consolidation to just a handful of super-popular AS services.</t>
</list></t>

</section>
<section anchor="data-models"><name>Component Data Models</name>

<t>While different implementations of this protocol will have different
realizations of all the components and artifacts enumerated here, the
nature of the protocol implies some common structures and elements for
certain components. This appendix seeks to enumerate those common
elements.</t>

<t>TBD: Client has keys, allowed requested resources, identifier(s),
allowed requested subjects, allowed</t>

<t>TBD: AS has "grant endpoint", interaction endpoints, store of trusted
client keys, policies</t>

<t>TBD: Token has RO, user, client, resource list, RS list,</t>

</section>
<section anchor="examples"><name>Example Protocol Flows</name>

<t>The protocol defined in this specification provides a number of
features that can be combined to solve many different kinds of
authentication scenarios. This section seeks to show examples of how the
protocol would be applied for different situations.</t>

<t>Some longer fields, particularly cryptographic information, have been
truncated for display purposes in these examples.</t>

<section anchor="example-auth-code"><name>Redirect-Based User Interaction</name>

<t>In this scenario, the user is the RO and has access to a web
browser, and the client instance can take front-channel callbacks on the same
device as the user. This combination is analogous to the OAuth 2.0
Authorization Code grant type.</t>

<t>The client instance initiates the request to the AS. Here the client instance
identifies itself using its public key.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            {
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            }
        ],
    },
    "client": {
      "key": {
        "proof": "httpsig",
        "jwk": {
            "kty": "RSA",
            "e": "AQAB",
            "kid": "xyz-1",
            "alg": "RS256",
            "n": "kOB5rR4Jv0GMeLaY6_It_r3ORwdf8ci_JtffXyaSx8..."
        }
      }
    },
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return/123455",
            "nonce": "LKLTI25DK82FX4T4QFZC"
        }
    }
}
]]></artwork></figure>

<t>The AS processes the request and determines that the RO needs to
interact. The AS returns the following response giving the client instance the
information it needs to connect. The AS has also indicated to the
client instance that it can use the given instance identifier to identify itself in
<xref target="request-instance">future requests</xref>.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "interact": {
      "redirect":
        "https://server.example.com/interact/4CF492MLVMSW9MKM",
      "finish": "MBDOFXG4Y5CVJCX821LH"
    }
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue"
    },
    "instance_id": "7C7C4AZ9KHRS6X63AJAO"
}
]]></artwork></figure>

<t>The client instance saves the response and redirects the user to the
interaction_url by sending the following HTTP message to the user's
browser.</t>

<figure><artwork><![CDATA[
HTTP 302 Found
Location: https://server.example.com/interact/4CF492MLVMSW9MKM
]]></artwork></figure>

<t>The user's browser fetches the AS's interaction URI. The user logs
in, is identified as the RO for the resource being requested, and
approves the request. Since the AS has a callback parameter, the AS
generates the interaction reference, calculates the hash, and
redirects the user back to the client instance with these additional values
added as query parameters.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP 302 Found
Location: https://client.example.net/return/123455\
  ?hash=p28jsq0Y2KK3WS__a42tavNC64ldGTBroywsWxT4md_jZQ1R2\
    HZT8BOWYHcLmObM7XHPAdJzTZMtKBsaraJ64A\
  &interact_ref=4IFWWIKYBC2PQ6U56NL1
]]></artwork></figure>

<t>The client instance receives this request from the user's browser. The
client instance ensures that this is the same user that was sent out by
validating session information and retrieves the stored pending
request. The client instance uses the values in this to validate the hash
parameter. The client instance then calls the continuation URI and presents the
handle and interaction reference in the request body. The client instance signs
the request as above.</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "interact_ref": "4IFWWIKYBC2PQ6U56NL1"
}
]]></artwork></figure>

<t>The AS retrieves the pending request based on the handle and issues
an access token and returns this to the client instance.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "access": [{
            "actions": [
                "read",
                "write",
                "dolphin"
            ],
            "locations": [
                "https://server.example.net/",
                "https://resource.local/other"
            ],
            "datatypes": [
                "metadata",
                "images"
            ]
        }]
    },
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue"
    }
}
]]></artwork></figure>

</section>
<section anchor="example-device"><name>Secondary Device Interaction</name>

<t>In this scenario, the user does not have access to a web browser on
the device and must use a secondary device to interact with the AS.
The client instance can display a user code or a printable QR code.
The client instance is not able to accept callbacks from the AS and needs to poll
for updates while waiting for the user to authorize the request.</t>

<t>The client instance initiates the request to the AS.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "dolphin-metadata", "some other thing"
        ],
    },
    "client": "7C7C4AZ9KHRS6X63AJAO",
    "interact": {
        "start": ["redirect", "user_code"]
    }
}
]]></artwork></figure>

<t>The AS processes this and determines that the RO needs to interact.
The AS supports both redirect URIs and user codes for interaction, so
it includes both. Since there is no interaction finish mode, the AS does not include
a nonce, but does include a "wait" parameter on the continuation
section because it expects the client instance to poll for results.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "interact": {
        "redirect": "https://srv.ex/MXKHQ",
        "user_code": {
            "code": "A1BC-3DFF"
        }
    },
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue/VGJKPTKC50",
        "wait": 60
    }
}
]]></artwork></figure>

<t>The client instance saves the response and displays the user code visually
on its screen along with the static device URI. The client instance also
displays the short interaction URI as a QR code to be scanned.</t>

<t>If the user scans the code, they are taken to the interaction
endpoint and the AS looks up the current pending request based on the
incoming URI. If the user instead goes to the static page and enters
the code manually, the AS looks up the current pending request based
on the value of the user code. In both cases, the user logs in, is
identified as the RO for the resource being requested, and approves
the request. Once the request has been approved, the AS displays to
the user a message to return to their device.</t>

<t>Meanwhile, the client instance periodically polls the AS every 60 seconds at
the continuation URI. The client instance signs the request using the
same key and method that it did in the first request.</t>

<figure><artwork><![CDATA[
POST /continue/VGJKPTKC50 HTTP/1.1
Host: server.example.com
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...
]]></artwork></figure>

<t>The AS retrieves the pending request based on the handle and
determines that it has not yet been authorized. The AS indicates to
the client instance that no access token has yet been issued but it can
continue to call after another 60 second timeout.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "continue": {
        "access_token": {
            "value": "G7YQT4KQQ5TZY9SLSS5E"
        },
        "uri": "https://server.example.com/continue/ATWHO4Q1WV",
        "wait": 60
    }
}
]]></artwork></figure>

<t>Note that the continuation URI and access token have been rotated since they were
used by the client instance to make this call. The client instance polls the
continuation URI after a 60 second timeout using this new information.</t>

<figure><artwork><![CDATA[
POST /continue/ATWHO4Q1WV HTTP/1.1
Host: server.example.com
Authorization: GNAP G7YQT4KQQ5TZY9SLSS5E
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...
]]></artwork></figure>

<t>The AS retrieves the pending request based on the URI and access token,
determines that it has been approved, and issues an access
token for the client to use at the RS.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "access": [
            "dolphin-metadata", "some other thing"
        ]
    }
}
]]></artwork></figure>

</section>
<section anchor="example-no-user"><name>No User Involvement</name>

<t>In this scenario, the client instance is requesting access on its own
behalf, with no user to interact with.</t>

<t>The client instance creates a request to the AS, identifying itself with its
public key and using MTLS to make the request.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json

{
    "access_token": {
        "access": [
            "backend service", "nightly-routine-3"
        ],
    },
    "client": {
      "key": {
        "proof": "mtls",
        "cert#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
      }
    }
}
]]></artwork></figure>

<t>The AS processes this and determines that the client instance can ask for
the requested resources and issues an access token.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token",
        "access": [
            "backend service", "nightly-routine-3"
        ]
    }
}
]]></artwork></figure>

</section>
<section anchor="example-async"><name>Asynchronous Authorization</name>

<t>In this scenario, the client instance is requesting on behalf of a specific
RO, but has no way to interact with the user. The AS can
asynchronously reach out to the RO for approval in this scenario.</t>

<t>The client instance starts the request at the AS by requesting a set of
resources. The client instance also identifies a particular user.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            {
                "type": "photo-api",
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "read", "dolphin-metadata",
            {
                "type": "financial-transaction",
                "actions": [
                    "withdraw"
                ],
                "identifier": "account-14-32-32-3",
                "currency": "USD"
            },
            "some other thing"
        ],
    },
    "client": "7C7C4AZ9KHRS6X63AJAO",
    "user": {
        "sub_ids": [ {
            "format": "opaque",
            "id": "J2G8G8O4AZ"
        } ]
  }
}
]]></artwork></figure>

<t>The AS processes this and determines that the RO needs to interact.
The AS determines that it can reach the identified user asynchronously
and that the identified user does have the ability to approve this
request. The AS indicates to the client instance that it can poll for
continuation.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "continue": {
        "access_token": {
            "value": "80UPRY5NM33OMUKMKSKU"
        },
        "uri": "https://server.example.com/continue",
        "wait": 60
    }
}
]]></artwork></figure>

<t>The AS reaches out to the RO and prompts them for consent. In this
example, the AS has an application that it can push notifications in
to for the specified account.</t>

<t>Meanwhile, the client instance periodically polls the AS every 60 seconds at
the continuation URI.</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>The AS retrieves the pending request based on the handle and
determines that it has not yet been authorized. The AS indicates to
the client instance that no access token has yet been issued but it can
continue to call after another 60 second timeout.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "continue": {
        "access_token": {
            "value": "BI9QNW6V9W3XFJK4R02D"
        },
        "uri": "https://server.example.com/continue",
        "wait": 60
    }
}
]]></artwork></figure>

<t>Note that the continuation handle has been rotated since it was
used by the client instance to make this call. The client instance polls the
continuation URI after a 60 second timeout using the new handle.</t>

<figure><artwork><![CDATA[
POST /continue HTTP/1.1
Host: server.example.com
Authorization: GNAP BI9QNW6V9W3XFJK4R02D
Signature-Input: sig1=...
Signature: sig1=...
]]></artwork></figure>

<t>The AS retrieves the pending request based on the handle and
determines that it has been approved and it issues an access
token.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "access_token": {
        "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
        "manage": "https://server.example.com/token/PRY5NM33O\
            M4TB8N6BW7OZB8CDFONP219RP1L",
        "access": [
            "dolphin-metadata", "some other thing"
        ]
    }
}
]]></artwork></figure>

</section>
<section anchor="example-oauth2"><name>Applying OAuth 2.0 Scopes and Client IDs</name>

<t>While GNAP is not designed to be directly compatible with
OAuth 2.0 <xref target="RFC6749"/>, considerations have been made to enable the use of
OAuth 2.0 concepts and constructs more smoothly within GNAP.</t>

<t>In this scenario, the client developer has a <spanx style="verb">client_id</spanx> and set of
<spanx style="verb">scope</spanx> values from their OAuth 2.0 system and wants to apply them to the
new protocol. Traditionally, the OAuth 2.0 client developer would put
their <spanx style="verb">client_id</spanx> and <spanx style="verb">scope</spanx> values as parameters into a redirect request
to the authorization endpoint.</t>

<figure><artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP 302 Found
Location: https://server.example.com/authorize\
  ?client_id=7C7C4AZ9KHRS6X63AJAO\
  &scope=read%20write%20dolphin\
  &redirect_uri=https://client.example.net/return\
  &response_type=code\
  &state=123455
]]></artwork></figure>

<t>Now the developer wants to make an analogous request to the AS
using GNAP. To do so, the client instance makes an HTTP POST and
places the OAuth 2.0 values in the appropriate places.</t>

<figure><artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Content-Digest: sha-256=...

{
    "access_token": {
        "access": [
            "read", "write", "dolphin"
        ],
        "flags": [ "bearer" ]
    },
    "client": "7C7C4AZ9KHRS6X63AJAO",
    "interact": {
        "start": ["redirect"],
        "finish": {
            "method": "redirect",
            "uri": "https://client.example.net/return?state=123455",
            "nonce": "LKLTI25DK82FX4T4QFZC"
        }
    }
}
]]></artwork></figure>

<t>The <spanx style="verb">client_id</spanx> can be used to identify the client instance's keys that it
uses for authentication, the scopes represent resources that the
client instance is requesting, and the <spanx style="verb">redirect_uri</spanx> and <spanx style="verb">state</spanx> value are
pre-combined into a <spanx style="verb">finish</spanx> URI that can be unique per request. The
client instance additionally creates a nonce to protect the callback, separate
from the state parameter that it has added to its return URI.</t>

<t>From here, the protocol continues as above.</t>

</section>
</section>
<section anchor="polymorphism"><name>JSON Structures and Polymorphism</name>

<t>GNAP makes use of polymorphism within the <xref target="RFC8259">JSON</xref> structures used for
the protocol. Each portion of this protocol is defined in terms of the JSON data type
that its values can take, whether it's a string, object, array, boolean, or number. For some
fields, different data types offer different descriptive capabilities and are used in different
situations for the same field. Each data type provides a different syntax to express
the same underlying semantic protocol element, which allows for optimization and
simplification in many common cases.</t>

<t>Even though JSON is often used to describe strongly typed structures, JSON on its own is naturally polymorphic.
In JSON, the named members of an object have no type associated with them, and any
data type can be used as the value for any member. In practice, each member
has a semantic type that needs to make sense to the parties creating and
consuming the object. Within this protocol, each object member is defined in terms
of its semantic content, and this semantic content might have expressions in
different concrete data types for different specific purposes. Since each object
member has exactly one value in JSON, each data type for an object member field
is naturally mutually exclusive with other data types within a single JSON object.</t>

<t>For example, a resource request for a single access token is composed of an array
of resource request descriptions while a request for multiple access tokens is
composed of an object whose member values are all arrays. Both of these represent requests
for access, but the difference in syntax allows the client instance and AS to differentiate
between the two request types in the same request.</t>

<t>Another form of polymorphism in JSON comes from the fact that the values within JSON
arrays need not all be of the same JSON data type. However, within this protocol,
each element within the array needs to be of the same kind of semantic element for
the collection to make sense, even when the data types are different from each other.</t>

<t>For example, each aspect of a resource request can be described using an object with multiple
dimensional components, or the aspect can be requested using a string. In both cases, the resource
request is being described in a way that the AS needs to interpret, but with different
levels of specificity and complexity for the client instance to deal with. An API designer
can provide a set of common access scopes as simple strings but still allow
client software developers to specify custom access when needed for more complex APIs.</t>

<t>Extensions to this specification can use different data types for defined fields, but
each extension needs to not only declare what the data type means, but also provide
justification for the data type representing the same basic kind of thing it extends.
For example, an extension declaring an "array" representation for a field would need
to explain how the array represents something akin to the non-array element that it
is replacing.</t>

</section>


  </back>

<!-- ##markdown-source:
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
b4mXqzqr69UuxVVSakOvdQAnPLDLvpPggofdUmArmiiP8eqeYYGrjpcj84OU
zLKIjfoe40GR5Vir5t76aTwunS6XuFtVqND+KJLjGiQfa97MUAjn5ijJ0ndO
yyJtcZ0JUzrGpN3WIn3jp1KTTZGSYKPPH6df/+Vr9I0h+LLlkgR8AAhIVOnD
B4+2kkTkp55ERd86U5bRhTudDcnUKC/fvPv0xd1HW7sv/2L6GfzX7sEfHu3+
sPvHH777vdWTnUK+sfvk2d6LP35790/3nv7X90//+HDr9svvOm0IZGvh6qJ9
p92vrijMw1tvX+//6d6r3Tt39nbf/rD7w8EPb81CPg+r/ZGtth8H8rnWI0nK
XfFAGup2So10q91UXusbXLgcO0CEfgmEWKsn5bGUYFgdJRT+ShUegjq5l0WU
X2TyoFN45Bz9Ge4dPNrder373Q9v9+/fffPk4av7T/7wYO/PTx4+ffZi79Xr
rduP9l/ffvnm1kasJ6G2JLQNCxm0Fx02ruimQ56/BAi2O7wOWYVib9gnTRbQ
L5Wky44XTJJfY2WTBI/TrkpzGcwUfho51yZ2sKOkKTDlOStzyoKTvKbe4Y6I
Mi9Qd85mMximUTo2o3bSNVaZQkHQcyiMFLrxbOeZkq9PvyrwRkPj0CbCYfir
x5yL+J8GYS4z3qwIG9UCzZnL949lqMdkVLy/5mh9d8r0qWULn/rc4HNQtMPG
jmdhgSWpd+N7SZFKa3KXfTeQou2oBaTne9G9V25ZG1IO1BKIm59IH+iFBb2R
YKCsHY6RdzF4khEVFfODkJ9TTGGCeW1EwMjUXJccL1M3HR+MRam5SBUXYMBG
czhbMnKjNEOKvZGwIux9sHNYP3IKa1kAjJAJH+e1A1K2qFZl62pxFuyJPJY9
cuJuvLgVbYEqZLDz2IeyBRZeu+IgYkeSwdmAShPYvVG22RvVcjsNHeZcbgSO
74jLadMqfcunSts6ik7CY4RyHSx5WefckDP9e15XAJtJPhlhQOYsn2fnotu0
Z7lvdN44wAa1t6M6mShgElIS6EDiYsLd6uYdNiFEOKbPCTTSBNaMsOExy7R8
p+pxdC/OnVvAsFiUl12AJb4eBlla2YKDK9EUbZetY4IK42PT6e5EW6yYoKBe
eJxrzaEiD81ANVgzMsVLhfSRRGph2CEy6vdez23j6zMhc+IhIPvOe57nvfrk
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
e06/sd4d9oqDo8Pk07CQHTzY9ZEurHB3VlfLUr1xfrXbfNrdHWdPqvOzZL7z
cDctnD7P705yNdvxi+7FNH0xXa9Wpf4gU306zFanST2I446Hj9d1+yq5OK2U
zh+KJ8u7/uQ07ziTk+pteXcnPchPr3vHL8W2l073nm68597e8blcSyQK+e4R
QVzavW7zbrlOFoqp40r77HhWOq7X90e7p7W95mjRPTgvnYwKe9Xy0bU7HN3t
PeXKtcJLobinJ3Z27j2du9PajSCt+rRX8Y6b1d5p/2pcPCo2ujn/oJCdptc7
jWbh8qL+7E7yN8nOKnOYtG8f9SCn1+fPtbP1xcPLsj1wm7VCvvx0VtxLHiQn
T0cP17ejO8fpF1P2Ym9ymX1sZ1o7D7eLgwO5Fjy+o5PxsNc8SnkvzbFbfD7P
9/vNPfu0XbmtTDqdo9Nauyrk0mE3M76u5DPL50w117krpnt5PY19dzo7LLXT
Ge9qXvRnR4unwlPxsHc7vx7UK+cnXn9Umnl3jcZT/rY/WJwka81R5+au+bi4
ONKDHJ1dVHKr1Ol1tnt0MZ3uXqafS7vTZO9yX2xQoTLOHj7dnp3k5yeN4fww
9fL4cjRL5SrXrWz/QQ/S2RkUDs8uVv5RLn3U269cT8o7vfnlZan9eFhPejsH
MHL++LJ6WX2o3bVH3dOmm5+Uyu3mnR6kclq/6M3ap7lJZzC9ubL7Z3fDXN/p
3PUqB7OD7Ho5L7WPDqaFStarZUoX88f8fvlst/Vol6Z6kGxjnFmmHg6es948
+Tyf57zqS3LQqz3t16r925u96pFnJzP9g8fDVT530lpeykMJh7jfPSIwkDeY
VUujYmWQTtcfDrvF9l3y4jR/a1+fj/b2jmbZ7H69ubOw++Xl42n9pLTsN2o3
grl5xt5cXZymBifPTzuD9ukqM5gkX26e2slV87w6mKdXbT/fcF4apw8XjYfn
q9vFpJl+2Tu42ikunyp6kNHteif79LJ/2jvIDifF8dw97l5XC95RqeUfn12N
Zicnh/XVRfllsGydXE2ai4N1yrtelxXJIXfoPRUqx+X08X79bJi5Wj94p3fF
+d7wNnM2vF45+cxN9ybz2Cse5qfPt/s7k/mZe3452O0aZ1TKT1ePhVKzepf1
G4tpulvvpk+vp09nF5njg8V++agiVJ07967ZaNrd0/1lM7V73rBT2cxNRg9S
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
93uSg94QrvpXSA7KWKZ4+jPhrE+HneOuW3NPG62X8k7VLfvlSXV9e3WUur26
dGsPpfR5c7BbK16mqi8t8dsw1aEAw155nL9o7Vy6Z4XTuQ3PuqfTzuRodXZ9
+nLTEONM69luQTw36S1vrsVtm4yXt8fi/9eLxx6WE1VHZXfl9q5PZ+UHz7VP
6qnuyfne2frw5fb6NH17XV7eXg+Hneu8f9vIPnTSqafbdHbYLZwebtMxwiBv
Osrtfusx2WgnczvuUTV9virUr+7W3ri9aKbxCjVvc+lh9sa5bnlu9ih9mXab
XiHV7O725jdHtcZJ+XrvYDTt7R3UW7n99cljoX2RvL0s9fbss0z6ZO/QwWDY
y/LcXe3V7vzdZr6SzzwVa0+r+fBmUTzZ61+nhxf7qe6lV0vu7tdWnceLpNsf
zZ/KmWF7cH592Ow/oA/ZqVRX06FXna4yT53lfqNacR5PS53O6rY/KzXsY2fW
yKafq/lxsXp+k7+8vH4+P6w9Vk7t637/5eyohM605LWTak37sMD83H7J2Bfz
i/VOYc/eXTb3V2c9O3NhN2vtxWDtP7+4bsY7vZotX1JXF9lRffnwUsT6wtX1
Xan2cpV68B8KjdFZ8uLarjRmt4PSQ/WhUjwfHLrzxnOr3FjsFHaae4+Zxkt9
0F9e/op+/JLHv+Txf5Y8Vma9csoSjjJ7pAMmkfTwuAxUJswaauxoBZo4aatU
58EEa2cMkCmdoWO95rfOmTlBaI5p7xYbfRJry52HWyrg51Q7ybiMYGW4Wfam
pKhA+Zd2TKA59ADeZWHpGhVjYBpvqd4ziIQ+lgVR6CW2p75GGQ0BEpHrNoDt
9OW3AJzTt123/xzPraKKTaYv+Wm3f/lpf/lpN/lp//gBR+32+19e2V9e2R/0
yv7z3bLoHjOam6DUCIPWSSBe/Sp7MAGXfY6LFYcKg2OjSj0aVkuZzk2TvW9v
9I/iSL5y9IaBHk3MX4vrPhS44304DfM+NtX3eQG6fmLDHqHABsoHjYJnYroZ
Eb2vv5xjLFb3+dF+9X9NlzSBP9u+UYZ/b+pR95ZZvB5AEIhAPW72OL8udv+n
eZy3VPMweSQXtNlbv3zR/1627y/T95fpq4no3zWR69/awRxbNZHa3besH3Iq
Bx3Kn60fcCmH3cmfre9wKBemfqVcyA3KhdPhTbo67maq/d7x4fyzdXu1KyaS
3y+48Cv//+To4SbdfumuxWSO5Jvm7/Wnzknes692F52r9mcrdXNVH/aOS645
yvWlh//db6zkt2edaX3cFaP3YJkn5sifrZzbzdSH3SlsTL5Tnp6OxeLFtlZT
5XHKD87vdtaZjF/s8CifLfXEzrh3PHy6hScKp2KU+qw7acN3gyPRvHa6k5H4
ag699J8t3taHzrGQAdPL5e3k8OksXRXH/uzeXFXn4iBi9iT71JlUx+JwBuXx
7Wer0iwdpC+b9eJle3x+OR6W20flVWPn9KI88PRbJ6kK/7ecl3uTfp7dXmVT
5YfPljdwVuppt3ty+tRJ39BMp72XwDwmi7HTCO+qeO6zNe3NYVbGSPrX9HiE
M2aS606rw7jVfbbE+CkcvyDIPlVyz3LR0W7p93yrdVSIGeWzBZTl3655FL48
MeexpDkNb5spb3FVOjxrtKujZmunaQuJkO3XX+rXtavU+vx4p3V+dHvdOzoq
dNM7hcvJ4vR8Ul20ppepy6vR7uXk9va2NHypT2f53tH4rJmerS7H5eeW2JP8
Wbc0W7RHi91Gq1dzmvlpdey93Fxdrq+OBGUVh2edTM932rfZWmk8v3oY1prX
vWZ3Um03Wqd2fWd889myR8NVLz3b601uT3rihK9f2meNyfOy9SBuV/u03S3W
7epR+9F+OXUv00dnt1e9Uueh9Nx+OE07pVbq/Gr42Xq+aefbncmwcTUdjs+P
Z416uz66PZm91JvVRa951Gy8DEftUrUhZp9pX62eq8c77ebkYNdu19ft41Sq
I+gk/1w/Pho5D8OCvZN/Ortup6ul0+L58elOZyyk6UvVvWwfvLSvelfdYm/v
cvJcr08Ojzuj51bz5XSnncn3O5+t6/Z5vd076RRvMrep0+daa+fiPH26buwM
J/X0cHaeXlw403HGmfYu2yft57Or6lWrVc/WW7uZm9Zq1coMi5+tm4dq+eal
fnp7clS6ae1MaydH5fb1+OJmmr+0r+ulVqNs0EX+UJ2+vAlMJ+K+ZvL+zfUo
hjtlh52rFt6C5vVocCnvS0m9M2hOPltHC0GPQeqattc20ajXO6mvui8e3Gvf
vmove4XspJM+eNK3M394JphShIe99K5OH5ErRe7U6aSTOV3cXNdf4Ler9ekM
+KzgJ5m2K+6DmPnh6ub6aOe2cdqjeYn1T1OV7fNV1WufX86yw/ZzOTUp+Idn
41qrd7QYFa/t3M6d0/xsPdWuH/eLteP5olg52X/cfbpIP7ceM/2T9EM9d/s4
9Tpe6qp3cZFxzjPVk+xl6+HqYGbv3V3OVr3y1aiyP09+tpZ32fRsWUqNL/Kz
/dPdVnq1Oz4clDuDA3c09SdXk2vnJnu0t3KPmwezRX9ZujkeTMZe7rR3eFZ2
qk/FjLg7Z1fpYbr3snMxTTvFaWf9NMinWgPbSeW92/xuf++wX7l6OLg9XD01
yw+jnbPb0+rORfds/+6leXA2FzL2UDCli/VLc//y0Hsa9Xb85O5qWNpvzqfH
rZejbnYyuGpN7wZ+beZfZCfl8vjBK5WekkePtat0fV29WY5rt+PU5WfroDSd
Fk/ad08XL/OTccued44Huzf9/mCxGl0Oe5X9dPK09nxz+U0/PriBTFeydoD9
R/rxew6kFmzyScheUOCLQdcEmt9sd0bg+sFTn6gz2rnsg1Z3B0NsUK5g0BnD
bI4/COURuwhxm1wEz4N+Gv5ivuzi9hJGODoGJLoxe+CxVzsN6ltDofqRv7/e
IC8lfYf+Fmpwwq3N9EdkR3fswwyfCMOFf1Jw1SE/ogGsjf+mLsU4jg19YUN9
buaO+N7U6UW6mb3n3D1hHC5Ug+fABLmNsj2f29wU2hlzvYE8MvG7hb/rZsQJ
2mfsmsJzkU0RYyD9rXgnJjks0TlMv7GbYTmVDVkEJcvZWEa3LppsoFHXNxsJ
uIYjiCGtiQ556tjHWnY2Uz1ye+5EYvarpW4nSvAsU7GBz6gCKxAZcO4t7l3N
zRxUT1RapPTy5S7KCVWnr6Yq3ekcZnA2xBnE+5JWtU+RCifI79/UgIiy23SC
0Ry5xQxVYTCbwPMD60q71eSwsjsaDWF4erU7WsaDaMKqEc9y2mNw9RD+PbQ5
NCeoujpguU6PEauwZyV4OCFtFhrHdpVfnFZpMTwks8fRFEDbqZ+oalS6nSDQ
RG7CE8JHmDsWtlMWnx6PXWwH1HEWK+jW0XP72PdzEWraBj4o/giV4Sxkv3o/
9C0IIUHtzXSNw6vwZChe2cchLRqSsQpoJ1wfEuTLixAGpaQqYvtIn9i8wR4n
Z8v5DAxQQVtIStQ8VIdnaL8hevHkuT29al8tW10AJE+ck2aPYldVT1psVXk1
dMX/dHGGSjJRsAmWjdPAOiR0GJPcgUPSzd2h26fvAIuyutiB1mz8braogMPa
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
gwBzYD/yuOxf3tt/yTDe8/+RIrT7vISiyb82IBXxn/h9mxM3kq1fLt9mF/Md
VnSHrf2DvWLQWzX9+973ew/LP7xt5vSnd1f/sn2n/Fu1OOHbxQVa/o0W5tbb
Fw8/7fbvfXNx+6vn9bfVT/dfP1297u6+2L+cHz+YNa+/WR0f/3hVHbx7EJd3
mimdk/fZhBj2IpsD5MLpI21pYX3Lfc8trpAMZ4K9fBqj/ax4AcKDfpGWkoAW
/OrjOP2TO7t373366eD9KftAN/j22beHT3c/ffzswe6TH+8d3vv+yZ8ela/6
PryH0Qls8vYOvISns3LIhNWMZvAVz2jzTUtSp8nIm7UhkiNyFYExyMlJIhof
CjCT7p5LKThyHGHIt6cwDz0140Y3baYYjtUmWWep/CkrLPP1jiUKfT+YWO1m
GX4+XsPf1KS3E8jVm9wSQ672e7J7+/bkxbMPWetH1Nq+/YgTc1/EIG4brprZ
3pFVmJbQF2nhbbBa8bz4RG/xyb1HT+59vvv82z8+P/jh8+fPntsaSst26/nD
xy+e/PjVvZ8+ffTHbx79+GD3zrdfb4W0dLaU3H3sIBg5IvBXwP/p7g9uv3q5
/9On3z2/e/fF81fPnj87ePbKLU63kYrtMPJaNpBi1ybYavz9Z48+e3Rv70+f
P/t6/+D+j/fv7n2z92IrX/3leumrga4CY6aEKDN5QLLgPFhx3S0olaFkxfke
ADpSEE/qQTCjlbpKbg1N7t7enTyhTEn4Vg6tLyZ/zVf271qIejMTWi+uzI0+
ix5Af6s/ArdJfNMpeOpSl1JlTqCm+ixA4CKqhTLwAoMgGzIz43X9dGebD5iS
tsqwG7gKox5ZzsgpWdGpIYHlKgKe8QhGvqNnUxrT+RJ/2tXsuAMmVAD2xPHG
9+iu8lIqzfp3Lw6//GJy459uTFAbvox+PTRkYig+2X/yaPLgs893w4e/9ofO
gn+KS/9/0Rv+4Xz3wS/9P9/+affZs7s/HLx+Xd3bXVUX3z26f28x/+rwYdde
XfY/vDu8dzZ//cufvr+zv/tP2DVf/+nwwcMXP/z09ezbsxdHzz/78euXe/Nv
/uXwT89Xzx728a2+uX9vjy79n76t5w/3nj754Yenz356+Gj35ff3X316/7tv
71y3s5yEQMKcpPx9vjix9gbGnMlS7Shq+k3wGjDjE3nfmsAqQfpumTOPwaAZ
Rw3rEHRNrWuzZwSmMJkEW6pj72XpSWmM0nC2IOHCIgwJtDd6LwpPVWLitM7L
vNRqwj0NSfQ1SFcCQxBGtkKiAhJAZDu/Gn80pdX6kJ3/aLq5qLMYxURG/sOR
ShaOfcF5rrET4m8Q0vh1TOfE2FLeGnhJ+RJRlhubWa8u7T8LUI1hTBkj+UpN
v8EC/WpT8hs6H5sDPzvRXxx8/nz35fOvn73av3/v8OGD7+4//OGzF396+ODR
4ycvvnu5e+fz/Zd3vj287WMFRqp94HjHQz+xtfBPmUfxfPOj/INSeFo4JNdF
o5si0Y1R6HgEWkR5H4g8f2XU+SsiznIc10ea10WZoxFmii7f/zmPJ/9B/cS0
qVklhFiAiQnhMaeXxlNinHu6Ph9W1GPyXJi5XHHX0S80mUXQfcrVM0ilt9HI
30HrNsSI7owerxTgaDZQGu0pizcRPnJiF6YSyff7+OfxewjxlyftPV+5hJwd
1lKhsfiMGiQhrieNdELiS32Wyvri/ebEFuwdwb8uA/dfMIGmJmU7bcfJFooa
jN0C3CJtiE2pnPHw59fmN6a+Q/XPH5FAaPqPyRzYyt7Re1jtDEVcfT4LDFQK
/kR3NLPPeQxq34KHXkEIdAcXV3SysjMXSSVH0Jcra9o2sdwpgD1iVitWF94d
N7dU8USIq9u1YRhQyzltQUsKWn+No+Qy72aEVNxKAtZgIbK/V2IhSy04m9pd
xO3zyfMfn339vT9d06IYGHL51629Ow8fbd99/OTJIAP1j3pKfPLHr7559vLw
2aNPM5cFX/qLyf3bY8v/IzMIYptd4AnzfNGwakJAxqsX7RUhmk+gWyqyzvRc
sNh8ALJYxI2QPYhbgYrAnhGEchJIIb2fUfVlnngIMUT6Vw1FZJ9cAatAdRur
hLvbh4T+NdzEZNG2b43bTsFA1/nPgcAnEDjCq2bcNaLrctLW5jPL7JyjAQIt
cRSFBx02lQMTac2vG1CQTW0qW9nXAy4A5gq4f+cOUMJkwgmT8NcnTLQVJIvL
diYvNF+iQzW4nlw/TxbNFkMbbHCVT0OpEB2mkpgYayGDf15XSxzj01FTxRq+
ApIko6WJJABFr+JmMWG8ahXGotlr4tDs7ay5JiDMB18PeU4i5OQU6STYFfk9
cyuG0avb5x/hMfwnRKq/QeQZyhNYKOXpfCPpXl4wRg5puXVNqduaGU2pL9tB
b2e6q/JTrTX1HixtsFIVNZY6XrJHY4sFEKd2vfrbnHr/ofPmq89++v7w3rPv
v//08E8/fX7w7cHBp1/+h8+bvcMfvn5x7/s7P/zxY86bnPhqNDtUfBQF+qkw
pGlUXsW4JM6MkidtcEZEIq1h0fXxDWt7PwwHJHrWg89re7phGJxnFB/dr2me
/sr9Ovb1/hH269h3m27auoWNT+mlxHwWDLHqv6k2Qijy9b/TSr9FWuk/FLQV
W5skylvF5VwQiklkyDUJEeeRDu+NWYiRWH6AIhelS+qYC6y9I7jyZWuxeZZx
2BCTJ0nfQTxuqLYrAbtQDRXPiP87JOCLhHR00XMSSVo5Pcaxk/u3CO3/+oC8
kMqhT7tsTk6Bn4/mLG6e7bsfDsg/AltxtiL5rfQHgij+DoiH+Mejy9mz23U/
u7v36NHdxw93f/r09eLLg/7HLx+0ny9Ws9ufvnjw+S/z77bnJ7s6mI+p+F8T
sI8lmar+LdCT7kt5WOOoVZK2jL/Jof6fbk8+xjj8ygU0NA57/dVydtq1S4K2
5Ug2h92ji/5KC9HmclwKxgwEAiVHjl1HJuYey0sqJE9lUEPlRow+KjQ2rs1W
SBDExxnzfmeD3mB7kKIqgCrW9Hd0lRm9ON3UZhUcneumsHni8HoZt+Y6Feb/
SyUZR1B6VBigBX9+2q7a7eq8GSsD/DeU79px/f2gfEVlh6d9zA352M9+3Czj
dmiqxbaTC/mrlgAZhXlXXX7clCX8FY1CCAe379zbvruL/z82BE7azAAwfHXw
eOvaqfmNU+dkEYq0+frodTPHhJThI8c1dEumDSyRewxU+mb3qwdfPXgRn+gi
Snzwv02ufSS+YPneaibUGylnxSmjzJgHTu7Jk8prkSdnQovTpKDiiE1o3Dmm
okg7bMAHpoFqkjwLOf8BcwZ/k0rmhxMFFoayHHR+6DKGxPRbzrxiiylQBKM8
97ispZ++/IOs+9NM5Jeyn6Ssq4Go+BPMx0Ab/O+SYfwrkSt/o4Tffyf1/uE2
6MOnn3//3Q/3//j5D3d/fPLNs3v7t3cf/x026DWJPPnWlu7JM3es8POfnrbj
Rlce6m+5ycY+xz/OJsvSbxznrjYk4P47wfaPlmDjKDrOJRJTqRH/gBgc2I2S
7k0SF0oxtVHpcf+r9iGz0FjWi6yUCszgumq0Izk4cj6Isn9273MSZS8YoFOy
/oyZ2ycxDj4SRn1Wp3V3Er6JRPGGPtdeyLLP2jgncST0eJGy2vlAWmAed8mC
OqkFgv3GeGHeCI0AQuk3YLx4Y5JpgghqOjelIhIHGVjVSKFVfMX+hgDnyYI4
up2uKiUV3cuWQxQS/zWO/fjscrDFKCvHbWKct4YwEWsQVmPykFrP/m0x3SM7
xw5t4Lntff4wFokAjI1X/AOFff9j9zYC6/h/ZY/gAn1BIqD/wwfR5PITRiy8
ppjwD1Ti5kfREfQHhpvrdvpOeNncR9FvjeOHDKL1Yg7SxCGJO0McGDLW424g
03/E22FWccyQjRaypHyheAh2zab6vCP0mHAr/VdM5FjkL8mVkURK1qNGFDyI
VLeYd2RrUkA3f1v82N+3P+5/+aX623TJkSfh7Yt0nbOcSaHNVqzdG0wDoE5E
QKsAkp5ZIzqv+54Poq5WjqyUUldPcdAQkaVwU6f1G7/11SLSxKgWS/zugfiv
rHVebOIb/kJv4Ab6Hvv1siHNg/O6m/jAfTCgygnjujIRZr6k8lJcaSIaCgYw
ZT7nhK3zbhj33dDUg9QU8BUO9p7Qz40mIjENqFfa+56G3zG58EFOEPGyXVzF
MzTun/4segHn7j+FTlcMkujF+wv0uKVn/0w3//PN38VD4cHup5/f8kQUWDpa
QklH4JcQw2474x7K2DSajKCK/FPjN8J7MOtntFJB5spkTbXPfmqyc83qhlCw
YNmwtkFcPl1XxbNXtAHAHMrUC6zwQ75WUOKCxHFgD6bxHNee/iA6SLOuOQfJ
rqf9E44P2USeNiwkxoSUOiDUD2tQ8BzZEz1JhCNdAK05s7TRXmL0FLcIERUS
e4A9sUethKAHMyxkHlOR7nNUcZ5eC4dPD6oR46polkw54RSr6Kj58gKENqB0
wTcindcYWy3NePAEEfwObDjkIV0RhXdaLFP+ZSrcwvk04fO0/GY75N/Rxbz4
SZaAQFL0/XoRR+MPzZ5mjPUxhaWIN7loAj5bXoU01d7sVa7hie1ZfHl+FDJI
Kv05ZTZL/ktgv9LmHXfltIPmKeE4kGiTNUiqchVMifCzU8Dar880EhVljskP
uvncrpEByHvzOMZ2UiBeaUJf6uCEQkxNajP80+SM6nc8l7LONO3leBej3YsW
qvabpGAIkTqb43Jl3LIbeJCB0wTGIw8xBrEv8vw3+tXrfG/wdyneHdsoZEvo
bC26kPU76DReSNsjR1Vu4GLdTGeNF6boooRMJ9FpZ1qjHxoR5Ke5vicLkoNe
XkT8yBAF8MsWdzGLQlPNTQZV9gijS82lH5s+FM+QebkEnY/MjoYLkHpe8DDi
B3lICE9HrpsOaO4HR+eD8vQpvZx+Yu7BE5v0UXSxtjhoV4ZS5NVcaXyTJlGk
ONjEnmTgoIlbHlKyXmjOXQDHvG+WkpKZkE9O1weeDVatRJcIK92rGCiNID+I
diYmDHo5tjcDFqxYXX924knJKhQPUdVq25B6Bz1R470XtclDJJsipKZQSMUX
Sku76jyzVcHDWy5uVuyDIC3XygerVGylWncFurhVRxtMl2q0F2dM91UtHBcV
zl9MBz9KbpogF3JTOcZHscg6Mq22gH8PQOM0tlxvWzLseekoLvgVr2xmWLPT
ekHBH8uzix1T5S16D5IDcFL0I4nKeU3iAgQ0muwxkbHkVLqAqoJRtHH2QQ9Y
2dviMVOzL8jITB0w8X1jw6mXavzRFrMyyxOGHk/vdb+KH15ujmXieN6RWJG3
YtLUeMBnFIAjJFbKOjHqLeEgkINI3ao4ctkWRk1pnwKy7sTEO69nC3qNS/1g
yegTSasYIdE0xQwGooRLw9Ivkn5nRi2jPj+qekJryYZjCnl0sJA0Y5yA3OYv
3aB5iLLot7Cht9JD0igqkZjhhA69amC/bUHEbKeq1wmDYD9nhjceTvW2sT4E
UnrlS9UkaOCFOIlSAFDa+X9AYTB1zbsEAA==

-->

</rfc>

