<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.22 (Ruby 2.6.10) -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-gnap-resource-servers-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.8.0 -->
  <front>
    <title>Grant Negotiation and Authorization Protocol Resource Server Connections</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-gnap-resource-servers-04"/>
    <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="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="2023" month="October" day="23"/>
    <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 extension defines methods for resource servers (RS) to connect
with authorization servers (AS) in an interoperable fashion.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The core GNAP specification (<xref target="GNAP"/>) defines distinct roles for the authorization
server (AS) and the resource server (RS). However, the core specification
does not define how the RS answers important questions, such as whether
a given access token is still valid or what set of access rights the access
token is approved for.</t>
      <t>While it's possible for the AS and RS to be tightly coupled, such as a single
deployed server with a shared storage system, GNAP does not presume or require
such a tight coupling. It is increasingly common for the AS and RS to be run
and managed separately, particularly in cases where a single AS protects multiple
RS's simultaneously.</t>
      <t>This specification defines a set of RS-facing APIs that an AS can make
available for advanced loosely-coupled deployments. Additionally, this document
defines a general-purpose model for access tokens, which can be used in
structured, formatted access tokens or in the API. This specification also defines a method
for an RS to derive a downstream token for calling another chained RS.</t>
      <t>The means of the authorization server issuing
the access token to the client instance and the means of the client instance
presenting the access token to the resource server are the subject of the
core GNAP specification <xref target="GNAP"/>.</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&nbsp;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, URLs, query components, keys, and other elements. Some examples use a single trailing backslash <tt>\</tt> to indicate line wrapping for long values, as per <xref target="RFC8792"/>. The <tt>\</tt> character and leading spaces on wrapped lines are not part of the value.</t>
        <t>Terminology specific to GNAP is defined in the terminology section of the core specification <xref target="GNAP"/>, and provides definitions for the protocol roles: authorization server (AS), client, resource server (RS), resource owner (RO), end user; as well as the protocol elements: attribute, access token, grant, privilege, protected resource, right, subject, subject information. The same definitions are used in this document.</t>
      </section>
    </section>
    <section anchor="structure">
      <name>Access Tokens</name>
      <t>Access tokens are a mechanism for an AS to provide a client instance limited access to an RS.
These access tokens are artifacts representing a particular set of access rights granted to
the client instance to act on behalf of the RO. While the format of access tokens varies in
different systems (see discussion in <xref target="token-format"/>), the concept of an access token is
consistent across all GNAP systems.</t>
      <section anchor="general-purpose-access-token-model">
        <name>General-purpose Access Token Model</name>
        <t>Access tokens represent a common set of aspects across different GNAP deployments. This is not intended to be
a universal or comprehensive list, but instead to provide guidance to implementors when developing
data structures and associated systems across a GNAP deployment. These data structures are communicated
between the AS and RS either by using a structured token or an API-like mechanism like token introspection.
This general-purpose data model does not assume either approach, and in fact both can be used together
to convey different pieces of information. Where possible, mappings to concrete data fields in common standards
understood by the RS are provided for each item in the model.</t>
        <section anchor="value">
          <name>Value</name>
          <t>All access tokens have a unique value. This is the string that is passed on the wire between parties.
The AS chooses the value, which can be structured as in <xref target="token-format"/> or unstructured. When the token is
structured, the token value also has a <em>format</em> known to the AS and RS, and the other items
in this token model are contained within the token's value in some fashion.
When the token is unstructured, the values are usually retrieved by the RS using a service
like token introspection described in <xref target="introspection"/>.</t>
          <t>The access token value is conveyed the <tt>value</tt> field of an <tt>access_token</tt> response from <xref section="3.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>The format and content of the access token value is opaque to the client software.
While the client software needs to be able to carry and present the access token
value, the client software is never expected nor intended to be able to understand
the token value itself.</t>
        </section>
        <section anchor="issuer">
          <name>Issuer</name>
          <t>The access token is issued by the AS in a standard GNAP transaction. The AS will often
need to identify itself in order to recognize tokens that it has issued, particularly
in cases where tokens from multiple different AS's could be presented.</t>
          <t>This information is not usually conveyed directly to the client instance, since the client
instance should know this information based on where it receives the token from.</t>
          <t>In a <xref target="JWT"/> formatted token or a token introspection response, this corresponds to the <tt>iss</tt> claim.</t>
        </section>
        <section anchor="audience">
          <name>Audience</name>
          <t>The access token is intended for use at one or more RS's. The AS can identify those RS's
to allow each RS to ensure that the token is not receiving a token intended for someone else.
The AS and RS have to agree on the nature of any audience identifiers represented by the token,
but the URIs of the RS are a common pattern.</t>
          <t>In a <xref target="JWT"/> formatted token or token introspection response, this corresponds to the <tt>aud</tt> claim.</t>
          <t>In cases where more complex access is required, the <tt>location</tt> field of objects in the <tt>access</tt>
array can also convey audience information.
In such cases, the client instance might need to know the audience information in order to differentiate between
possible RS's to present the token to.</t>
        </section>
        <section anchor="key-binding">
          <name>Key Binding</name>
          <t>Access tokens in GNAP are bound to the client instance's registered or presented key, except in
cases where the access token is a bearer token. For all tokens bound to a key, the AS and RS need to
be able to identify which key the token is bound to, otherwise an attacker could substitute their
own key during presentation of the token. In the case of an asymmetric algorithm, the model for the
AS and RS need only contain the public key, while the client instance will also need to know the private
key in order to present the token appropriately. In the case of a symmetric algorithm, all parties
will need to either know or be able to derive the shared key.</t>
          <t>The source of this key information can vary depending on circumstance and deployment. For example, an AS
could decide that all tokens issued to a client instance are always bound to that client instance's current key.
When the key needs to be dereferenced, the AS looks up the client instance to which the token was issued
and finds the key information there.
The AS could alternatively bind each token to a specific key that is managed separately from client instance
information. In such a case, the AS determines the key information directly. This approach allows the client
instance to use a different key for each request, or allows the AS to issue a key for the client instance
to use with the particular token.</t>
          <t>In all cases, the key binding also includes a proofing mechanism, along with any parameters needed for that
mechanism such as a signing or digest algorithm. If such information is not stored, an attacker could
present a token with a seemingly-valid key using an insecure and incorrect proofing mechanism.</t>
          <t>This value is conveyed to the client instance in the <tt>key</tt> field of the <tt>access_token</tt> response in <xref section="3.2" sectionFormat="of" target="GNAP"/>.
Since the common case is that the token is bound to the client instance's registered key, this field can be omitted in this case
since the client will be aware of its own key.</t>
          <t>In a <xref target="JWT"/> formatted token, this corresponds to the <tt>cnf</tt> (confirmation) claim. In a token introspection response, this corresponds to the <tt>key</tt> claim.</t>
          <t>In the case of a bearer token, all parties need to know that a token has no key bound to it, and will therefore
reject any attempts to use the bearer token with a key in an undefined way.</t>
        </section>
        <section anchor="flags">
          <name>Flags</name>
          <t>GNAP access tokens can have multiple data flags associated with them that indicate special
processing or considerations for the token. For example, whether the token is a bearer token,
or should be expected to be durable across grant updates.</t>
          <t>The client can request a set of flags in the <tt>access_token</tt> request in <xref target="GNAP"/>.</t>
          <t>These flags are conveyed from the AS to the client in the <tt>flags</tt> field of the <tt>access_token</tt> response in <xref section="3.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>For token introspection, flags are returned in the <tt>flags</tt> field of the response.</t>
        </section>
        <section anchor="access-rights">
          <name>Access Rights</name>
          <t>Access tokens are tied to a limited set of access rights. These rights specify in some detail what the token
can be used for, how, and where. The internal structure of access rights are detailed in <xref section="8" sectionFormat="of" target="GNAP"/>.</t>
          <t>The access rights associated with an access token are calculated from the rights available to the client
instance making the request, the rights available to be approved by the RO, the rights actually approved
by the RO, and the rights corresponding to the RS in question. The rights for a specific access token
are a subset of the overall rights in a grant request.</t>
          <t>These rights are requested by the client instance in the <tt>access</tt> field of the <tt>access_token</tt> request in <xref section="2.1" sectionFormat="of" target="GNAP"/>.</t>
          <t>The rights associated with an issued access token are conveyed to the client instance in the <tt>access</tt> field of the <tt>access_token</tt> response in <xref section="3.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>In token introspection responses, this corresponds to the <tt>access</tt> claim.</t>
        </section>
        <section anchor="time-validity-window">
          <name>Time Validity Window</name>
          <t>The access token can be limited to a certain time window outside of which it is no longer
valid for use at an RS. This window can be explicitly bounded by an expiration time and a
not-before time, or it could be calculated based on the issuance time of the token. For example,
an RS could decide that it will accept tokens for most calls within an hour of a token's
issuance, but only within five minutes of the token's issuance for certain high-value calls.</t>
          <t>Since access tokens could be revoked at any time for any reason outside of a client instance's control,
the client instance often does not know or concern itself with the validity time window of
an access token. However, this information can be made available to it using the <tt>expires_in</tt> field
of an access token response in <xref section="3.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>The issuance time of the token is conveyed in the <tt>iat</tt> claim of a <xref target="JWT"/> formatted token or a token introspection response.</t>
          <t>The expiration time of a token, after which it is to be rejected, is conveyed in the <tt>exp</tt> claim of a <xref target="JWT"/> formatted token or a token introspection response.</t>
          <t>The starting time of a token's validity window, before which it is to be rejected, is conveyed in the <tt>nbf</tt> claim of a <xref target="JWT"/> formatted token or a token introspection response.</t>
        </section>
        <section anchor="token-identifier">
          <name>Token Identifier</name>
          <t>Individual access tokens often need a unique internal identifier to allow the AS to differentiate
between multiple separate tokens. This value of the token can often be used as the
identifier, but in some cases a separate identifier is used.</t>
          <t>This separate identifier can be conveyed in the <tt>jti</tt> claim of a <xref target="JWT"/> formatted token or a token introspection response.</t>
          <t>This identifier is not usually exposed to the client instance using the token, since the client
instance only needs to use the token by value.</t>
        </section>
        <section anchor="authorizing-resource-owner">
          <name>Authorizing Resource Owner</name>
          <t>Access tokens are approved on behalf of a resource owner (RO). The identity of this RO can be used by
the RS to determine exactly which resource to access, or which kinds of access to allow. For example,
an access token used to access identity information can hold a user identifier to allow the RS to
determine which profile information to return. The nature of this information is subject to agreement
by the AS and RS.</t>
          <t>This corresponds to the <tt>sub</tt> claim of a <xref target="JWT"/> formatted token or a token introspection response.</t>
          <t>Detailed RO information is not returned to the client instance
when an access token is requested alone, and in many cases returning
this information to the client instance would be a privacy violation on the part of the AS. Since the
access token represents a specific delegated access, the client instance needs only to use the token
at its target RS. Following the profile example, the client instance does not need to know
the account identifier to get specific attributes about the account represented by the token.</t>
          <t>GNAP does allow for the return of subject information separately from the access token, in the form
of identifiers and assertions. These values are returned directly to the client separately from any
access tokens that are requested, though it's common that they represent the same party.</t>
        </section>
        <section anchor="end-user">
          <name>End User</name>
          <t>The end user is the party operating the client software. The client instance can facilitate the end user
interacting with the AS in order to determine the end user's identity, gather authorization, and provide
the results of that information back to the client instance.</t>
          <t>In many instances, the end user is the same party as the resource owner. However, in some cases,
the two roles can be fulfilled by different people, where the RO is consulted asynchronously.
The token model should be able to reflect these kinds of situations by representing the end user
and RO separately.
For example, an end user can request a financial payment, but the RO is the holder of the account
that the payment would be withdrawn from. The RO would be consulted for approval by the AS outside
of the flow of the GNAP request. A token in such circumstances would need to show both the
RO and end user as separate entities.</t>
        </section>
        <section anchor="client-instance">
          <name>Client Instance</name>
          <t>Access tokens are issued to a specific client instance by the AS. The identity of this instance can
be used by the RS to allow specific kinds of access, or other attributes about the access token.
For example, an AS that binds all access tokens issued to a particular client instance to that
client instance's most recent key rotation would need to be able to look up the client instance
in order to find the key binding detail.</t>
          <t>This corresponds to the <tt>client_id</tt> claim of a <xref target="JWT"/> formatted token or the <tt>instance_id</tt> field of a token introspection response.</t>
          <t>The client is not normally informed of this information separately, since a client instance can
usually correctly assume that it is the client instance to which a token that
it receives was issued.</t>
        </section>
        <section anchor="label">
          <name>Label</name>
          <t>When multiple access tokens are requested or a client instance uses token labels, the parties
will need to keep track of which labels were applied to each individual token. Since labels can
be re-used across different grant requests, the token label alone is not sufficient to
uniquely identify a given access token in a system. However, within the context of a grant
request, these labels are required to be unique.</t>
          <t>A client instance can request a specific label using the <tt>label</tt> field of an <tt>access_token</tt> request in <xref section="2.1" sectionFormat="of" target="GNAP"/>.</t>
          <t>The AS can inform the client instance of a token's label using the <tt>label</tt> field of an <tt>access_token</tt> response in <xref section="3.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>This corresponds to the <tt>label</tt> field of a token introspection response.</t>
        </section>
        <section anchor="parent-grant-request">
          <name>Parent Grant Request</name>
          <t>All access tokens are issued in the context of a specific grant request from a client instance. The
grant request itself represents a unique tuple of:</t>
          <ul spacing="normal">
            <li>The AS processing the grant request</li>
            <li>The client instance making the grant request</li>
            <li>The RO (or set of RO's) approving the grant request (or needing to approve it)</li>
            <li>The access rights granted by the RO</li>
            <li>The current state of the grant request, as defined in <xref section="1.5" sectionFormat="of" target="GNAP"/></li>
          </ul>
          <t>The AS can use this information to tie common information to a specific token. For instance,
instead of specifying a client instance for every issued access token for a grant, the AS
can store the client information in the grant itself and look it up by reference from the
access token.</t>
          <t>The AS can also use this information when a grant request is updated. For example, if the client
instance asks for a new access token from an existing grant, the AS can use this link to revoke
older non-durable access tokens that had been previously issued under the grant.</t>
          <t>A client instance will have its own model of an ongoing grant request, especially if that
grant request can be continued using the API defined in <xref section="5" sectionFormat="of" target="GNAP"/> where several
pieces of statefulness need to be kept in hand. The client instance might need to keep an
association with the grant request that issued the token in case the access token expires or
does not have sufficient access rights, so that the client instance can get a new access
token without having to restart the grant request process from scratch.</t>
          <t>Since the grant itself does not need to be identified in any of the protocol messages, GNAP
does not define a specific grant identifier to be conveyed between any parties in the protocol.
Only the AS needs to keep an explicit connection between an issued access token and the
parent grant that issued it.</t>
        </section>
        <section anchor="as-specific-access-tokens">
          <name>AS-Specific Access Tokens</name>
          <t>When an access token is used for the grant continuation API defined in <xref section="5" sectionFormat="of" target="GNAP"/> (the continuation access token)
or the token management API defined in <xref section="6" sectionFormat="of" target="GNAP"/> (the token management access token),
the AS needs to be able to separate these access tokens from others usable at RS's. The AS can
do this through the use of a flag on the access token data structure, by using a special internal
access right, or any other means at its disposal. Just like other access tokens in GNAP,
the contents of these AS-specific access tokens are opaque to the client. Unlike other access tokens,
the contents of these AS-specific access tokens are also opaque to the RS.</t>
          <t>A client instance <bcp14>MUST</bcp14> take steps to differentiate these special-purpose access tokens from
access tokens used at RS's.
To facilitate this, a client instance can store AS-specific access tokens separately from
other access tokens in order to keep them from being confused with each other and used at the
wrong endpoints.</t>
          <t>The client instance is given continuation access tokens only as part of the <tt>continue</tt> field
of the grant response in <xref section="3.1" sectionFormat="of" target="GNAP"/>.
The client instance is given token management access tokens only as part of the <tt>manage</tt> field
of the grant response in <xref section="3.1.2" sectionFormat="of" target="GNAP"/>.</t>
          <t>An RS should never see an AS-specific access token, so any attempts to process one <bcp14>MUST</bcp14>
fail. When introspection is used, the AS <bcp14>MUST NOT</bcp14> return an <tt>active</tt> value of <tt>true</tt> for
AS-specific access tokens to the RS.</t>
        </section>
      </section>
      <section anchor="token-format">
        <name>Access Token Formats</name>
        <t>When the AS issues an access token for use at an RS, the RS
needs to have some means of understanding what the access token is for
in order to determine how to respond to the request. The core GNAP
protocol makes neither assumptions nor demands on the format or contents
of the access token, and in fact, the token format and contents are opaque
to the client instance. However, such token formats can be the topic of agreements
between the AS and RS.</t>
        <t>Self-contained structured token formats allow for the conveyance
of information between the AS and RS without requiring the RS to
call the AS at runtime as described in <xref target="introspection"/>. Structured tokens
can also be used in combination with introspection, allowing the token itself
to carry one class of information and the introspection response to carry
another.</t>
        <t>Some token formats, such as Macaroons <xref target="MACAROON"/> and Biscuits <xref target="BISCUIT"/>, allow for
the RS to derive sub-tokens without having to call the AS
as described in <xref target="token-chaining"/>.</t>
        <t>The supported token formats can be communicated dynamically at runtime
between the AS and RS in several places.</t>
        <ul spacing="normal">
          <li>The AS can declare its supported token formats as part of RS-facing discovery <xref target="discovery"/></li>
          <li>The RS can require a specific token format be used to access a registered resource set <xref target="rs-register-resource-handle"/></li>
          <li>The AS can return the token's format in an introspection response <xref target="introspection"/></li>
        </ul>
        <t>In all places where the token format is listed explicitly, it <bcp14>MUST</bcp14> be one of the registered
values in the GNAP Token Formats Registry <xref target="IANA-token-format"/>.</t>
      </section>
    </section>
    <section anchor="resource-server-facing-api">
      <name>Resource-Server-Facing API</name>
      <t>To facilitate runtime and dynamic connections, the AS can offer an
RS-Facing API consisting of one or more of the following optional
pieces.</t>
      <ul spacing="normal">
        <li>Discovery</li>
        <li>Introspection</li>
        <li>Token chaining</li>
        <li>Resource reference registration</li>
      </ul>
      <section anchor="discovery">
        <name>RS-facing AS Discovery</name>
        <t>A GNAP AS offering RS-facing services can publish its features on
a well-known discovery document using the URL <tt>.well-known/gnap-as-rs</tt> appended
to the grant request endpoint URL.</t>
        <t>The discovery response is a JSON document <xref target="RFC8259"/> consisting of a single JSON
object with the following fields:</t>
        <dl>
          <dt>grant_request_endpoint (string):</dt>
          <dd>
            <t>The location of the AS's grant request endpoint defined by <xref section="9" sectionFormat="of" target="GNAP"/>.
  This URL <bcp14>MUST</bcp14> be the same URL used by client instances in support of GNAP requests.
  The RS can use this to derive downstream access tokens, if supported by the AS.
  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.
  <bcp14>REQUIRED</bcp14>.
  See <xref target="token-chaining"/>.</t>
          </dd>
          <dt>introspection_endpoint (string):</dt>
          <dd>
            <t>The URL of the endpoint offering introspection.
  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.
  <bcp14>REQUIRED</bcp14> if the AS supports introspection. An absent value indicates that the AS does not support introspection.
  See <xref target="introspection"/>.</t>
          </dd>
          <dt>token_formats_supported (array of strings):</dt>
          <dd>
            <t>A list of token formats supported by this AS. The values in this list
  <bcp14>MUST</bcp14> be registered in the GNAP Token Format Registry in <xref target="IANA-token-format"/>.
  <bcp14>OPTIONAL</bcp14>.</t>
          </dd>
          <dt>resource_registration_endpoint (string):</dt>
          <dd>
            <t>The URL of the endpoint offering resource registration.
  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.
  <bcp14>REQUIRED</bcp14> if the AS supports dynamic resource registration. An absent value indicates that the AS does not support this feature.
  See <xref target="rs-register-resource-handle"/>.</t>
          </dd>
          <dt>key_proofs_supported (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 <tt>proof</tt> field of the key section of the request.
  <bcp14>OPTIONAL</bcp14>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="authentication">
        <name>Protecting RS requests to the AS</name>
        <t>Unless otherwise specified, the RS <bcp14>MUST</bcp14> protect its calls to the AS using any of the signature
methods defined by GNAP. This signing method <bcp14>MUST</bcp14> cover all of the appropriate
portions of the HTTP request message, including any body elements, tokens, or
headers required for functionality.</t>
        <t>The RS <bcp14>MAY</bcp14> present its keys by reference or by value in
a similar fashion to a client instance calling the AS in the core protocol
of GNAP, described in <xref target="GNAP"/>. In the protocols defined here,
this takes the form of the resource server identifying itself using a <tt>key</tt> field or
by passing an instance identifier directly.</t>
        <sourcecode type="http-message">
POST /continue HTTP/1.1
Host: server.example.com
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Type: application/json

"resource_server": {
    "key": {
        "proof": "httpsig",
        "jwk": {
            "kty": "EC",
            "crv": "secp256k1",
            "kid": "2021-07-06T20:22:03Z",
            "x": "-J9OJIZj4nmopZbQN7T8xv3sbeS5-f_vBNSy_EHnBZc",
            "y": "sjrS51pLtu3P4LUTVvyAIxRfDV_be2RYpI5_f-Yjivw"
        }
    }
}
</sourcecode>
        <t>or by reference:</t>
        <sourcecode type="http-message">
POST /continue HTTP/1.1
Host: server.example.com
Signature-Input: sig1=...
Signature: sig1=...
Content-Type: application/json

{
    "resource_server": "7C7C4AZ9KHRS6X63AJAO"
}
</sourcecode>
        <t>The AS <bcp14>MAY</bcp14> require an RS to pre-register its keys
or could allow calls from arbitrary keys in a trust-on-first-use
model.</t>
        <t>The AS <bcp14>MAY</bcp14> issue access tokens to the RS for protecting the RS-facing
API endpoints. If such tokens are issued, the RS <bcp14>MUST</bcp14> present them
to the RS-facing API endpoints along with the RS authentication.</t>
        <sourcecode type="http-message">
POST /continue HTTP/1.1
Host: server.example.com
Authorization: GNAP 80UPRY5NM33OMUKMKSKU
Signature-Input: sig1=...
Signature: sig1=...
Content-Type: application/json

{
    "resource_server": "7C7C4AZ9KHRS6X63AJAO"
}
</sourcecode>
      </section>
      <section anchor="introspection">
        <name>Token Introspection</name>
        <t>The AS issues access tokens representing a set of delegated access rights
to be used at one or more RSs. The AS can offer an introspection service
to allow an RS to validate that a given access token:</t>
        <ul spacing="normal">
          <li>has been issued by the AS</li>
          <li>has not expired</li>
          <li>has not been revoked</li>
          <li>is appropriate for the RS identified in the call</li>
        </ul>
        <t>When the RS receives an access token, it can call the introspection
endpoint at the AS to get token information.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="328" viewBox="0 0 328 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,144" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,144" fill="none" stroke="black"/>
              <path d="M 144,32 L 144,144" fill="none" stroke="black"/>
              <path d="M 200,32 L 200,144" fill="none" stroke="black"/>
              <path d="M 264,32 L 264,112" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,112" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 144,32 L 200,32" fill="none" stroke="black"/>
              <path d="M 264,32 L 320,32" fill="none" stroke="black"/>
              <path d="M 80,48 L 104,48" fill="none" stroke="black"/>
              <path d="M 120,48 L 136,48" fill="none" stroke="black"/>
              <path d="M 200,64 L 224,64" fill="none" stroke="black"/>
              <path d="M 240,64 L 256,64" fill="none" stroke="black"/>
              <path d="M 208,96 L 224,96" fill="none" stroke="black"/>
              <path d="M 240,96 L 264,96" fill="none" stroke="black"/>
              <path d="M 264,112 L 320,112" fill="none" stroke="black"/>
              <path d="M 88,128 L 104,128" fill="none" stroke="black"/>
              <path d="M 120,128 L 144,128" fill="none" stroke="black"/>
              <path d="M 8,144 L 80,144" fill="none" stroke="black"/>
              <path d="M 144,144 L 200,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="264,64 252,58.4 252,69.6 " fill="black" transform="rotate(0,256,64)"/>
              <polygon class="arrowhead" points="216,96 204,90.4 204,101.6 " fill="black" transform="rotate(180,208,96)"/>
              <polygon class="arrowhead" points="144,48 132,42.4 132,53.6 " fill="black" transform="rotate(0,136,48)"/>
              <polygon class="arrowhead" points="96,128 84,122.4 84,133.6 " fill="black" transform="rotate(180,88,128)"/>
              <g class="text">
                <text x="44" y="52">Client</text>
                <text x="112" y="52">1</text>
                <text x="172" y="52">RS</text>
                <text x="292" y="52">AS</text>
                <text x="44" y="68">Instance</text>
                <text x="232" y="68">2</text>
                <text x="232" y="100">3</text>
                <text x="112" y="132">4</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+       +------+       +------+
| Client +--(1)->|  RS  |       |  AS  |
|Instance|       |      +--(2)->|      |
|        |       |      |       |      |
|        |       |      |<-(3)--+      |
|        |       |      |       +------+
|        |<-(4)--+      |
+--------+       +------+
]]></artwork>
        </artset>
        <ol spacing="normal" type="1"><li>The client instance calls the RS with its access token.</li>
          <li>The RS introspects the access token value at the AS.
 The RS signs the request with its own key (not the client instance's
 key or the token's key).</li>
          <li>The AS validates the access token value and the Resource Server's request
 and returns the introspection response for the token.</li>
          <li>The RS fulfills the request from the client instance.</li>
        </ol>
        <t>The RS signs the request with its own key and sends the value of the access
token as the body of the request as a JSON object with the following members:</t>
        <dl>
          <dt>access_token (string):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The access token value presented to the RS by the client instance.</t>
          </dd>
          <dt>proof (string):</dt>
          <dd>
            <t><bcp14>RECOMMENDED</bcp14>. The proofing method used by the client instance to bind the token to the RS request.</t>
          </dd>
          <dt>resource_server (string or object):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The identification used to authenticate the resource server making this call, either
  by value or by reference as described in <xref target="authentication"/>.</t>
          </dd>
          <dt>access (array of strings/objects):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The minimum access rights required to fulfill the request. This <bcp14>MUST</bcp14> be in the
  format described in <xref section="8" sectionFormat="of" target="GNAP"/>.</t>
          </dd>
        </dl>
        <artwork><![CDATA[
POST /introspect HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Digest: sha256=...

{
    "access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0",
    "proof": "httpsig",
    "resource_server": "7C7C4AZ9KHRS6X63AJAO"
}
]]></artwork>
        <t>The AS <bcp14>MUST</bcp14> validate the access token value and determine if the token is active.
The parameters of the request provide a context for the AS to evaluate the access token,
and the AS <bcp14>MUST</bcp14> take all provided parameters into account when evaluating if the token is active.
If the AS is unable to process part of the request, such as not understanding part of
the <tt>access</tt> field presented, the AS <bcp14>MUST NOT</bcp14> indicate the token as active.</t>
        <t>An active access token is defined as a token that</t>
        <ul spacing="normal">
          <li>was issued by the processing AS,</li>
          <li>has not been revoked,</li>
          <li>has not expired,</li>
          <li>is bound using the <tt>proof</tt> method indicated,</li>
          <li>is appropriate for presentation at the identified RS, and</li>
          <li>is appropriate for the <tt>access</tt> indicated (if present),</li>
        </ul>
        <t>The AS responds with a data structure describing the token's
current state and any information the RS would need to validate the
token's presentation, such as its intended proofing mechanism and key
material.</t>
        <dl>
          <dt>active (boolean):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. If <tt>true</tt>, the access token presented is active,
  as defined above. If any of the criteria for an active token
  are not true, or if the AS is unable to make a
  determination (such as the token is not found), the value is
  set to <tt>false</tt> and other fields are omitted.</t>
          </dd>
        </dl>
        <t>If the access token is active, additional fields from the single access token
response structure defined in <xref section="3.2.1" sectionFormat="of" target="GNAP"/> are included. In
particular, these include the following:</t>
        <dl>
          <dt>access (array of strings/objects):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The access rights associated with this access token. This <bcp14>MUST</bcp14> be in the
  format described in the <xref section="8" sectionFormat="of" target="GNAP"/>.
  This array <bcp14>MAY</bcp14> be filtered or otherwise limited for consumption by the identified RS, including
  being an empty array, indicating that the token has no explicit access rights that
  can be disclosed to the RS.</t>
          </dd>
          <dt>key (object/string):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> if the token is bound. The key bound to the access token, to allow the RS
  to validate the signature of the request from the client instance. If the access
  token is a bearer token, this <bcp14>MUST NOT</bcp14> be included.</t>
          </dd>
          <dt>flags (array of strings):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The set of flags associated with the access token.</t>
          </dd>
          <dt>exp (integer):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The timestamp after which this token is no longer valid.
  Expressed as a integer seconds from UNIX Epoch.</t>
          </dd>
          <dt>iat (integer):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The timestamp at which this token was issued by the AS.
  Expressed as a integer seconds from UNIX Epoch.</t>
          </dd>
          <dt>nbf (integer):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The timestamp before which this token is not valid.
  Expressed as a integer seconds from UNIX Epoch.</t>
          </dd>
          <dt>aud (string or array of strings):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. Identifiers for the resource servers this token can be accepted at.</t>
          </dd>
          <dt>sub (string):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. Identifier of the resource owner who authorized this token.</t>
          </dd>
          <dt>iss (string):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. Grant endpoint URL of the AS that issued this token.</t>
          </dd>
          <dt>instance_id (string):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The instance identifier of the client instance that the token was issued to.</t>
          </dd>
        </dl>
        <t>The response <bcp14>MAY</bcp14> include any additional fields defined in an access
token response and <bcp14>MUST NOT</bcp14> include the access token <tt>value</tt> itself.</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "active": true,
    "access": [
        "dolphin-metadata", "some other thing"
    ],
    "key": {
        "proof": "httpsig",
        "jwk": {
                "kty": "RSA",
                "e": "AQAB",
                "kid": "xyz-1",
                "alg": "RS256",
                "n": "kOB5rR4Jv0GMeL...."
        }
    }
}
]]></artwork>
        <t>When processing the results of the introspection response, the RS <bcp14>MUST</bcp14> determine the
appropriate course of action. For instance, if the RS determines that the access token's
access rights are not sufficient for the request to which the token was attached, the RS
can return an error or a public resource, as appropriate for the RS.
In all cases, the final determination of the response is at the discretion of the RS.</t>
      </section>
      <section anchor="rs-register-resource-handle">
        <name>Registering a Resource Set</name>
        <t>If the RS needs to, it can post a set of resources as described in the Resource Access Rights section of
<xref target="GNAP"/> to the AS's resource registration endpoint along with information about
what the RS will need to validate the request.</t>
        <dl>
          <dt>access (array of objects/strings):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The list of access rights associated with the request in the format described
  in the "Resource Access Rights" section of <xref target="GNAP"/>.</t>
          </dd>
          <dt>resource_server (string or object):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The identification used to authenticate the resource server making this call, either
  by value or by reference as described in <xref target="authentication"/>.</t>
          </dd>
          <dt>token_formats_supported (array of strings):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The token formats the RS is able to process for accessing the resource.
  The values in this array <bcp14>MUST</bcp14> be registered in the GNAP Token Formats Registry in <xref target="IANA-token-format"/>.
  If the field is omitted, the token format is at the discretion of the AS.
  If the AS does not support any of the requested
  token formats, the AS <bcp14>MUST</bcp14> return an error to the RS.</t>
          </dd>
          <dt>token_introspection_required (boolean):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. If present and set to <tt>true</tt>, the RS expects to make a token introspection request as
  described in <xref target="introspection"/>. If absent or set to <tt>false</tt>, the RS does not anticipate needing
  to make an introspection request for tokens relating to this resource set. If the AS does not
  support token introspection for this RS, the AS <bcp14>MUST</bcp14> return an error to the RS.</t>
          </dd>
        </dl>
        <t>The RS <bcp14>MUST</bcp14> identify itself with its own key and sign the
request.</t>
        <artwork><![CDATA[
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/json
Signature-Input: sig1=...
Signature: sig1=...
Digest: ...

{
    "access": [
        {
            "actions": [
                "read",
                "write",
                "dolphin"
            ],
            "locations": [
                "https://server.example.net/",
                "https://resource.local/other"
            ],
            "datatypes": [
                "metadata",
                "images"
            ]
        },
        "dolphin-metadata"
    ],
    "resource_server": "7C7C4AZ9KHRS6X63AJAO"

}
]]></artwork>
        <t>The AS responds with a reference appropriate to represent the
resources list that the RS presented in its request as well as
any additional information the RS might need in future requests.</t>
        <dl>
          <dt>resource_reference (string):</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. A single string representing the list of resources registered in the request.
  The RS <bcp14>MAY</bcp14> make this handle available to a client instance as part of a
  discovery response as described in <xref section="9.1" sectionFormat="of" target="GNAP"/> or as
  documentation to client software developers.</t>
          </dd>
          <dt>instance_id (string):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. An instance identifier that the RS can use to refer to itself in future calls to
  the AS, in lieu of sending its key by value. See <xref target="authentication"/>.</t>
          </dd>
          <dt>introspection_endpoint (string):</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The introspection endpoint of this AS, used to allow the RS to perform
  token introspection. See <xref target="introspection"/>.</t>
          </dd>
        </dl>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
    "resource_reference": "FWWIKYBQ6U56NL1"
}
]]></artwork>
        <t>If a resource was previously registered, the AS <bcp14>MAY</bcp14> return the same resource reference
value as in previous responses.</t>
        <t>If the registration fails, the AS returns an HTTP 400 Bad Request error to the
RS indicating that the registration was not successful.</t>
        <t>The client instance can then use the <tt>resource_reference</tt> value as a string-type access
reference as defined in <xref section="8.1" sectionFormat="of" target="GNAP"/>. This value <bcp14>MAY</bcp14> be combined with any other
additional access rights requested by the client instance.</t>
        <sourcecode type="json">
{
    "access_token": {
        "access": [
            "FWWIKYBQ6U56NL1",
            {
                "type": "photo-api",
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "dolphin-metadata"
        ]
    },
    "client": "client-12351.bdxqf"
}
</sourcecode>
      </section>
    </section>
    <section anchor="token-chaining">
      <name>Deriving a downstream token</name>
      <t>Some architectures require an RS to act as a client instance and use a derived access
token for a secondary RS. Since the RS is not the same entity that made the initial grant
request, the RS is not capable of referencing or modifying the existing grant. As such,
the RS needs to request or generate a new token access token for its use at the secondary RS.
This internal secondary token is issued in the context of the incoming access token.</t>
      <t>While it is possible to use a <xref target="structure">token format</xref> that allows for the
RS to generate its own secondary token,
the AS can allow the RS to request this secondary access token using the same
process used by the original client instance to request the primary access token. Since the
RS is acting as its own client instance from the perspective of GNAP, this process
uses the same grant endpoint, request structure, and response structure as a client
instance's request.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="464" viewBox="0 0 464 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
            <path d="M 8,32 L 8,176" fill="none" stroke="black"/>
            <path d="M 80,32 L 80,176" fill="none" stroke="black"/>
            <path d="M 144,32 L 144,176" fill="none" stroke="black"/>
            <path d="M 208,32 L 208,176" fill="none" stroke="black"/>
            <path d="M 272,32 L 272,96" fill="none" stroke="black"/>
            <path d="M 328,32 L 328,96" fill="none" stroke="black"/>
            <path d="M 392,32 L 392,176" fill="none" stroke="black"/>
            <path d="M 456,32 L 456,176" fill="none" stroke="black"/>
            <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
            <path d="M 144,32 L 208,32" fill="none" stroke="black"/>
            <path d="M 272,32 L 328,32" fill="none" stroke="black"/>
            <path d="M 392,32 L 456,32" fill="none" stroke="black"/>
            <path d="M 80,48 L 104,48" fill="none" stroke="black"/>
            <path d="M 120,48 L 136,48" fill="none" stroke="black"/>
            <path d="M 208,64 L 232,64" fill="none" stroke="black"/>
            <path d="M 248,64 L 264,64" fill="none" stroke="black"/>
            <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
            <path d="M 248,80 L 272,80" fill="none" stroke="black"/>
            <path d="M 272,96 L 328,96" fill="none" stroke="black"/>
            <path d="M 208,128 L 304,128" fill="none" stroke="black"/>
            <path d="M 320,128 L 384,128" fill="none" stroke="black"/>
            <path d="M 216,144 L 304,144" fill="none" stroke="black"/>
            <path d="M 320,144 L 392,144" fill="none" stroke="black"/>
            <path d="M 88,160 L 104,160" fill="none" stroke="black"/>
            <path d="M 120,160 L 144,160" fill="none" stroke="black"/>
            <path d="M 8,176 L 80,176" fill="none" stroke="black"/>
            <path d="M 144,176 L 208,176" fill="none" stroke="black"/>
            <path d="M 392,176 L 456,176" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="392,128 380,122.4 380,133.6 " fill="black" transform="rotate(0,384,128)"/>
            <polygon class="arrowhead" points="272,64 260,58.4 260,69.6 " fill="black" transform="rotate(0,264,64)"/>
            <polygon class="arrowhead" points="224,144 212,138.4 212,149.6 " fill="black" transform="rotate(180,216,144)"/>
            <polygon class="arrowhead" points="224,80 212,74.4 212,85.6 " fill="black" transform="rotate(180,216,80)"/>
            <polygon class="arrowhead" points="144,48 132,42.4 132,53.6 " fill="black" transform="rotate(0,136,48)"/>
            <polygon class="arrowhead" points="96,160 84,154.4 84,165.6 " fill="black" transform="rotate(180,88,160)"/>
            <g class="text">
              <text x="44" y="52">Client</text>
              <text x="112" y="52">1</text>
              <text x="176" y="52">RS1</text>
              <text x="300" y="52">AS</text>
              <text x="424" y="52">RS2</text>
              <text x="44" y="68">Instance</text>
              <text x="240" y="68">2</text>
              <text x="240" y="84">3</text>
              <text x="312" y="132">4</text>
              <text x="312" y="148">5</text>
              <text x="112" y="164">6</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+--------+       +-------+       +------+       +-------+
| Client +--(1)->|  RS1  |       |  AS  |       |  RS2  |
|Instance|       |       +--(2)->|      |       |       |
|        |       |       |<-(3)--+      |       |       |
|        |       |       |       +------+       |       |
|        |       |       |                      |       |
|        |       |       +-----------(4)------->|       |
|        |       |       |<----------(5)--------+       |
|        |<-(6)--+       |                      |       |
+--------+       +-------+                      +-------+
]]></artwork>
      </artset>
      <ol spacing="normal" type="1"><li>The client instance calls RS1 with an access token.</li>
        <li>RS1 presents that token to the AS to get a derived token
 for use at RS2. RS1 indicates that it has no ability
 to interact with the RO. Note that
 RS1 signs its request with its own key, not the token's
 key or the client instance's key.</li>
        <li>The AS returns a derived token to RS1 for use at RS2.</li>
        <li>RS1 calls RS2 with the token from (3).</li>
        <li>RS2 fulfills the call from RS1.</li>
        <li>RS1 fulfills the call from the original client instance.</li>
      </ol>
      <t>If the RS needs to derive a token from one presented to it, it can
request one from the AS by making a token request as described in
<xref target="GNAP"/> and presenting the existing access token's
value in the "existing_access_token" field.</t>
      <t>Since the RS is acting as a client instance,
the RS <bcp14>MUST</bcp14> identify itself with its own key in the <tt>client</tt> field and sign the
request just as any client instance would, as described in <xref target="authentication"/>.
The AS <bcp14>MUST</bcp14> determine that the token being presented is appropriate for use
at the RS making the token chaining request.</t>
      <artwork><![CDATA[
POST /tx HTTP/1.1
Host: server.example.com
Content-Type: application/json
Detached-JWS: ejy0...

{
    "access_token": {
        "access": [
            {
                "actions": [
                    "read",
                    "write",
                    "dolphin"
                ],
                "locations": [
                    "https://server.example.net/",
                    "https://resource.local/other"
                ],
                "datatypes": [
                    "metadata",
                    "images"
                ]
            },
            "dolphin-metadata"
        ]
    },
    "client": "7C7C4AZ9KHRS6X63AJAO",
    "existing_access_token": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0"
}
]]></artwork>
      <t>The AS responds with a token for the downstream RS2 as described in
<xref target="GNAP"/>. The downstream RS2 could
repeat this process as necessary for calling further RS's.</t>
    </section>
    <section anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>(TODO: the ACK section should probably be split between the documents)</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>IANA is requested to perform the following actions.</t>
      <section anchor="IANA-well-known">
        <name>Well-Known URI</name>
        <t>The "gnap" URI suffix is registered into the Well-Known URIs Registry.</t>
        <dl>
          <dt>URI Suffix:</dt>
          <dd>
            <t>gnap</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document:</dt>
          <dd>
            <t><xref target="discovery"/> of RFC xxxx</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>Permanent</t>
          </dd>
        </dl>
      </section>
      <section anchor="IANA-token-format">
        <name>Token Formats Registry</name>
        <t>This document defines a GNAP token format, for which IANA is asked to create and maintain a new registry titled "GNAP Token Formats". Initial values for this registry are given in <xref target="IANA-token-format-contents"/>. Future assignments and modifications to existing assignment are to be made through the Specification Required registration policy <xref target="RFC8126"/>.</t>
        <t>The Designated Expert (DE) is expected to ensure that all registrations follow the template presented in <xref target="IANA-token-format-template"/>.
The DE is expected to ensure that the format's definition is sufficiently unique from other formats provided by existing parameters.
The DE is expected to ensure that the format's definition specifies the format of the access token in sufficient detail to allow for the AS and RS to be able to communicate the token information.</t>
        <section anchor="IANA-token-format-template">
          <name>Registry Template</name>
          <dl>
            <dt>Name</dt>
            <dd>
              <t>The name of the format.</t>
            </dd>
            <dt>Status</dt>
            <dd>
              <t>Whether or not the format is in active use. Possible values are Active and Deprecated.</t>
            </dd>
            <dt>Description</dt>
            <dd>
              <t>Human-readable description of the access token format.</t>
            </dd>
            <dt>Reference</dt>
            <dd>
              <t>The specification that defines the token.</t>
            </dd>
          </dl>
        </section>
        <section anchor="IANA-token-format-contents">
          <name>Initial Registry Contents</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Status</th>
                <th align="left">Description</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>jwt-signed</tt></td>
                <td align="left">Active</td>
                <td align="left">JSON Web Token, signed with JWS</td>
                <td align="left">
                  <xref target="JWT"/></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>jwt-encrypted</tt></td>
                <td align="left">Active</td>
                <td align="left">JSON Web Token, encrypted with JWE</td>
                <td align="left">
                  <xref target="JWT"/></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>macaroon</tt></td>
                <td align="left">Active</td>
                <td align="left">Macaroon</td>
                <td align="left">
                  <xref target="MACAROON"/></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>biscuit</tt></td>
                <td align="left">Active</td>
                <td align="left">Biscuit</td>
                <td align="left">
                  <xref target="BISCUIT"/></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>zcap</tt></td>
                <td align="left">Active</td>
                <td align="left">ZCAP</td>
                <td align="left">
                  <xref target="ZCAPLD"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="IANA-token-introspection">
        <name>Token Introspection Registry</name>
        <t>This document defines GNAP token introspection, for which IANA is asked to create and maintain a new registry titled "GNAP Token Introspection". Initial values for this registry are given in <xref target="IANA-token-introspection-contents"/>. Future assignments and modifications to existing assignment are to be made through the Specification Required registration policy <xref target="RFC8126"/>.</t>
        <t>The Designated Expert (DE) is expected to ensure that all registrations follow the template presented in <xref target="IANA-token-introspection-template"/>.
The DE is expected to ensure that the claim's definition is sufficiently orthogonal to other claims defined in the registry so as avoid overlapping functionality.
The DE is expected to ensure that the claim's definition specifies the syntax and semantics of the claim in sufficient detail to allow for the AS and RS to be able to communicate the token values.</t>
        <section anchor="IANA-token-introspection-template">
          <name>Registry Template</name>
          <dl>
            <dt>Name</dt>
            <dd>
              <t>The name of the claim.</t>
            </dd>
            <dt>Type</dt>
            <dd>
              <t>The JSON data type of the claim value.</t>
            </dd>
            <dt>Reference</dt>
            <dd>
              <t>The specification that defines the token.</t>
            </dd>
          </dl>
        </section>
        <section anchor="IANA-token-introspection-contents">
          <name>Initial Registry Contents</name>
          <t>The table below contains the initial contents of the GNAP Token Introspection Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">active</td>
                <td align="left">boolean</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">access</td>
                <td align="left">array of strings/objects</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">key</td>
                <td align="left">object/string</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">flags</td>
                <td align="left">array of strings</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">exp</td>
                <td align="left">integer</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">iat</td>
                <td align="left">integer</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">nbf</td>
                <td align="left">integer</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">aud</td>
                <td align="left">string or array of strings</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">sub</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">iss</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">instance_id</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="introspection"/> of RFC xxxx</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="IANA-resource-registration-request">
        <name>Resource Set Registration Request Parameters</name>
        <t>This document defines a means to register a resource set for a GNAP AS, for which IANA is asked to create and maintain a new registry titled "GNAP Resource Set Registration Request Parameters". Initial values for this registry are given in <xref target="IANA-resource-registration-request-contents"/>. Future assignments and modifications to existing assignment are to be made through the Expert Review registration policy <xref target="RFC8126"/>.</t>
        <t>The Designated Expert (DE) is expected to ensure that all registrations follow the template presented in <xref target="IANA-resource-registration-request-template"/>.
The DE is expected to ensure that the parameter's definition is sufficiently orthogonal to other claims defined in the registry so as avoid overlapping functionality.
The DE is expected to ensure that the parameter's definition specifies the syntax and semantics of the claim in sufficient detail to allow for the AS and RS to be able to communicate the resource set.</t>
        <section anchor="IANA-resource-registration-request-template">
          <name>Registry Template</name>
          <dl>
            <dt>Name</dt>
            <dd>
              <t>The name of the parameter.</t>
            </dd>
            <dt>Type</dt>
            <dd>
              <t>The JSON data type of the parameter value.</t>
            </dd>
            <dt>Reference</dt>
            <dd>
              <t>The specification that defines the token.</t>
            </dd>
          </dl>
        </section>
        <section anchor="IANA-resource-registration-request-contents">
          <name>Initial Registry Contents</name>
          <t>The table below contains the initial contents of the GNAP Resource Set Registration Request Parameters Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">access</td>
                <td align="left">array of strings/objects</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">resource_server</td>
                <td align="left">string or object</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">token_formats_supported</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">token_introspection_required</td>
                <td align="left">boolean</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="IANA-resource-registration-response">
        <name>Resource Set Registration Response Parameters</name>
        <t>This document defines a means to register a resource set for a GNAP AS, for which IANA is asked to create and maintain a new registry titled "GNAP Resource Set Registration Response Parameters". Initial values for this registry are given in <xref target="IANA-resource-registration-response-contents"/>. Future assignments and modifications to existing assignment are to be made through the Expert Review registration policy <xref target="RFC8126"/>.</t>
        <t>The Designated Expert (DE) is expected to ensure that all registrations follow the template presented in <xref target="IANA-resource-registration-response-template"/>.
The DE is expected to ensure that the parameter's definition is sufficiently orthogonal to other claims defined in the registry so as avoid overlapping functionality.
The DE is expected to ensure that the parameter's definition specifies the syntax and semantics of the claim in sufficient detail to allow for the AS and RS to be able to communicate the resource set.</t>
        <section anchor="IANA-resource-registration-response-template">
          <name>Registry Template</name>
          <dl>
            <dt>Name</dt>
            <dd>
              <t>The name of the parameter.</t>
            </dd>
            <dt>Type</dt>
            <dd>
              <t>The JSON data type of the parameter value.</t>
            </dd>
            <dt>Reference</dt>
            <dd>
              <t>The specification that defines the token.</t>
            </dd>
          </dl>
        </section>
        <section anchor="IANA-resource-registration-response-contents">
          <name>Initial Registry Contents</name>
          <t>The table below contains the initial contents of the GNAP Resource Set Registration Response Parameters Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">resource_reference</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">instance_id</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">introspection_endpoint</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="rs-register-resource-handle"/> of RFC xxxx</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="IANA-rs-discovery">
        <name>RS-Facing Discovery</name>
        <t>This document defines a means to for a GNAP AS to be discovered by a GNAP RS, for which IANA is asked to create and maintain a new registry titled "GNAP RS-Facing Discovery". Initial values for this registry are given in <xref target="IANA-rs-discovery-contents"/>. Future assignments and modifications to existing assignment are to be made through the Expert Review registration policy <xref target="RFC8126"/>.</t>
        <t>The Designated Expert (DE) is expected to ensure that all registrations follow the template presented in <xref target="IANA-rs-discovery-template"/>.
The DE is expected to ensure that the claim's definition is sufficiently orthogonal to other claims defined in the registry so as avoid overlapping functionality.
The DE is expected to ensure that the claim's definition specifies the syntax and semantics of the claim in sufficient detail to allow for RS to be able to communicate with the AS.</t>
        <section anchor="IANA-rs-discovery-template">
          <name>Registry Template</name>
          <dl>
            <dt>Name</dt>
            <dd>
              <t>The name of the parameter.</t>
            </dd>
            <dt>Type</dt>
            <dd>
              <t>The JSON data type of the parameter value.</t>
            </dd>
            <dt>Reference</dt>
            <dd>
              <t>The specification that defines the token.</t>
            </dd>
          </dl>
        </section>
        <section anchor="IANA-rs-discovery-contents">
          <name>Initial Registry Contents</name>
          <t>The table below contains the initial contents of the GNAP RS-Facing Discovery Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">introspection_endpoint</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="discovery"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">token_formats_supported</td>
                <td align="left">array of strings</td>
                <td align="left">
                  <xref target="discovery"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">resource_registration_endpoint</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="discovery"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">grant_request_endpoint</td>
                <td align="left">string</td>
                <td align="left">
                  <xref target="discovery"/> of RFC xxxx</td>
              </tr>
              <tr>
                <td align="left">key_proofs_supported</td>
                <td align="left">array of strings</td>
                <td align="left">
                  <xref target="discovery"/> of RFC xxxx</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>In addition to the normative requirements in this document and in <xref target="GNAP"/>, implementors are
strongly encouraged to consider these additional security considerations in implementations
and deployments of GNAP.</t>
      <section anchor="security-tls">
        <name>TLS Protection in Transit</name>
        <t>All requests in GNAP made over untrusted network connections have to be made over TLS 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 RS and all requests from the RS to an AS.</t>
      </section>
      <section anchor="security-token-validation">
        <name>Token Validation</name>
        <t>The RS has a responsibility to validate the incoming access token in a manner consistent with its deployment.
For self-contained stateless tokens such as those described in <xref target="token-format"/>, this consists of actions such
as validating the token's signature and ensuring the relevant fields and results are appropriate for the
request being made. For reference-style tokens or tokens that are otherwise opaque to the RS, the token introspection
RS-facing API can be used to provide updated information about the state of the token, as described in <xref target="introspection"/>.</t>
        <t>The RS needs to validate that a token:</t>
        <ul spacing="normal">
          <li>Is intended for this RS (audience restriction)</li>
          <li>Is presented using the appropriate key for the token (see also <xref target="security-key-proof"/>)
  Subject identification (the RS knows who authorized the token)
  Issuer restriction (the RS knows who created the token, including signing a structure or providing introspection to prove this)</li>
        </ul>
        <t>Even though key proofing mechanisms have to cover the value of the token, validating the key proofing alone
is not sufficient to protect a request to an RS.
If an RS validates only the presentation method as described in <xref target="security-key-proof"/> without validating the
token itself, an attacker could use a compromised key or a confused deputy to make arbitrary calls to the RS
beyond what has been authorized by the RO.</t>
      </section>
      <section anchor="security-token-cache">
        <name>Cacheing Token Validation Result</name>
        <t>Since token validation can be an expensive process, requiring either cryptographic operations or network calls to an introspection
service as described in <xref target="introspection"/>, an RS could cache the results of token validation for a particular token.
The trade offs of using a cached validation for a token present an important decision space for implementors: relying on a cached validation result
increases performance and lowers processing overhead, but it comes at the expense of the liveness and accuracy of the information
in the cache. While a cached value is in use at the RS, an attacker could present a revoked token and have it accepted by the RS.</t>
        <t>As with any cache, the consistency of this cache can be managed in a variety of ways. One of the most simple
methods is managing the lifetime of the cache in order to balance the performance and security properties.
Too long of a cache, and an attacker has a larger window in which to use a revoked token. Too short of a window and
the benefits of using the cache are diminished.
It is also possible that an AS could send a proactive signal to the RS to invalidate revoked access tokens, though such a mechanism
is outside the scope of this specification.</t>
      </section>
      <section anchor="security-key-proof">
        <name>Key Proof Validation</name>
        <t>For key-bound access tokens, the proofing method needs to be validated alongside the value of the token itself as described in <xref target="security-token-validation"/>.
The process of validation is defined by the key proofing method, as described in <xref section="7.3" sectionFormat="of" target="GNAP"/>.</t>
        <t>If the proofing method is not validated, an attacker could use a compromised token without access to the token's bound key.</t>
        <t>The RS also needs to ensure that the proofing method is appropriate for the key associated with the token, including any choice of
algorithm or identifiers.</t>
        <t>The proofing should be validated independently on each request to the RS, particularly as aspects of the call could vary.
As such, the RS should never cache the results of a proof validation from one message and apply it to a subsequent message.</t>
      </section>
      <section anchor="token-exfiltration">
        <name>Token Exfiltration</name>
        <t>Since the RS sees the token value, it is possible for a compromised RS to leak that value to an attacker.
As such, the RS needs to protect token values as sensitive information and protect them from exfiltration.</t>
        <t>This is especially problematic with bearer tokens and tokens bound to a shared key, since an RS has access
to all information necessary to create a new, valid request using the token in question.</t>
      </section>
      <section anchor="security-token-reuse-by-rs">
        <name>Token Re-Use by an RS</name>
        <t>If the access token is a bearer token, or the RS has access to the key material needed to present the token,
the RS could be tricked into re-using an access token presented to it by a client. While it is possible to build
a system that makes use of this artifact as a feature, it is safer to exchange the incoming access token for
another contextual token for use by the RS, as described in <xref target="token-chaining"/>. This access token can be bound
to the RS's own keys and limited to access needed by the RS, instead of the full set of rights associated with
the token issued to the client instance.</t>
      </section>
      <section anchor="token-format-considerations">
        <name>Token Format Considerations</name>
        <t>With formatted tokens, the format of the token is likely to have its own considerations, and the RS needs
to follow any such considerations during the token validation process. The application and scope of
these considerations is specific to the format and outside the scope of this specification.</t>
      </section>
      <section anchor="over-sharing-token-contents">
        <name>Over-sharing Token Contents</name>
        <t>The contents of the access token model divulge to the RS information about the access token's context and rights.
This is true whether the contents are parsed from the token itself or sent in an introspection response.</t>
        <t>It's likely that every RS does not need to know all details of the token model, especially in systems where
a single access token is usable across multiple RS's. An attacker could use this to gain information about
the larger system by compromising only one RS. By limiting the information available to only
that which is relevant to a specific RS, such as using a limited introspection reply as defined in <xref target="introspection"/>,
a system can follow a principle of least disclosure to each RS.</t>
      </section>
      <section anchor="resource-references">
        <name>Resource References</name>
        <t>Resource references, as returned by the protocol in <xref target="rs-register-resource-handle"/>, are intended to be opaque to
both the RS and the client. However, since they are under the control of the AS, the AS can put whatever content
it wants into the reference value. This value could unintentionally disclose system structure or other internal
details if it processed by an unintended party. Furthermore, such patterns could lead to the client software and
RS depending on certain structures being present in the reference value, which diminishes the separation of concerns
of the different roles in a GNAP system.</t>
        <t>To mitigate this, the AS should only use fully random or encrypted values for resource references.</t>
      </section>
      <section anchor="token-re-issuance-from-an-untrusted-as">
        <name>Token Re-Issuance From an Untrusted AS</name>
        <t>It is possible for an attacker's client instance to issue its own tokens to another client instance, acting as
an AS that the second client instance has chosen to trust. If the token is a bearer token or the re-issuance
is bound using an AS-provided key, the target client instance will not be able to tell that the token was originally
issued by the valid AS. This process allows an attacker to insert their own session and rights into an unsuspecting
client instance, in the guise of a token valid for the attacker that appears to have been issued to the target
client instance on behalf of its own RO.</t>
        <t>This attack is predicated on a misconfiguration with the targeted client, as it has been configured to get tokens
from the attacker's AS and use those tokens with the target RS, which has no association with the attacker's AS.
However, since the token is ultimately coming from the trusted AS, and is being presented with a valid key,
the RS has no way of telling that the token was passed through an intermediary.</t>
        <t>To mitigate this, the RS can publish its association with the trusted AS through either discovery or documentation.
Therefore, a client properly following this association would only go directly to the trusted RS directly for
access tokens for the RS.</t>
        <t>Furthermore, limiting the use of bearer tokens and AS-provided keys to only highly trusted AS's and limited circumstances
prevents the attacker from being able to willingly exfiltrate their token to an unsuspecting client instance.</t>
      </section>
      <section anchor="introspection-of-token-keys">
        <name>Introspection of Token Keys</name>
        <t>The introspection response defined in <xref target="introspection"/> provides a means for the AS to tell the RS the key
material needed to validate the key proof of the request. Capture of the introspection response can expose
these security keys to an attacker. In the case of asymmetric cryptography, only the public key is exposed,
and the token cannot be re-used by the attacker based on this result alone. This could potentially divulge
information about the client instance that was unknown otherwise.</t>
        <t>If an access token is bound to a symmetric key, the RS will need access to the full key value in order to validate
the key proof of the request, as described in <xref target="security-key-proof"/>. However, divulging the key
material to the RS also gives the RS the ability to create a new request with the token.
In this circumstance, the RS is under similar risk of token exfiltration and
re-use as a bearer token, as described in <xref target="security-token-reuse-by-rs"/>. Consequently, symmetric
keys should only be used in systems where the RS can be fully trusted to not create a new request with
tokens presented to it.</t>
      </section>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <section anchor="token-contents">
        <name>Token Contents</name>
        <t>The contents of the access token could potentially contain personal information about the end-user, RO, or other parties.
This is true whether the contents are parsed from the token itself or sent in an introspection response.</t>
        <t>While an RS will sometimes need this information for processing, it's often the case that an RS is exposed to these
details only in passing, and not intentionally. For example, disclosure of a medical record number in the contents
of an access token usable for both medial and non-medical APIs.</t>
        <t>To mitigate this, the a limited token introspection response can be used, as defined in <xref target="introspection"/>.</t>
      </section>
      <section anchor="token-use-disclosure-through-introspection">
        <name>Token Use Disclosure through Introspection</name>
        <t>When introspection is used by an RS, the AS is made aware of a particular token being used at a particular RS.
When the RS is a separate system, the AS would not otherwise have insight into this action. This can potentially
lead to the AS learning about patterns and actions of particular end users by watching which RS's are accessed
and when.</t>
      </section>
      <section anchor="mapping-a-user-to-an-as">
        <name>Mapping a User to an AS</name>
        <t>When the client instance receives information about the protecting AS from an RS, this can be used to
derive information about the resources being protected without releasing the resources themselves. For example,
if a medical record is protected by a personal AS, an untrusted client could call an RS to discover the location
of the AS protecting the record. Since the AS is tied strongly to a single RO, the untrusted and unauthorized client
software can gain information about the resource being protected without accessing the record itself.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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/>
            </author>
            <author initials="R." surname="Holz">
              <organization/>
            </author>
            <author initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <date year="2015" month="May"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <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="JWT">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <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="GNAP">
          <front>
            <title>Grant Negotiation and Authorization Protocol</title>
            <author fullname="Justin Richer" initials="J." surname="Richer">
              <organization>Bespoke Engineering</organization>
            </author>
            <author fullname="Fabien Imbault" initials="F." surname="Imbault">
              <organization>acert.io</organization>
            </author>
            <date day="26" month="June" year="2023"/>
            <abstract>
              <t>   GNAP defines a mechanism for delegating authorization to a piece of
   software, and conveying the results and artifacts of that delegation
   to the software.  This delegation can include access to a set of APIs
   as well as subject information passed directly to the software.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-gnap-core-protocol-15"/>
        </reference>
        <reference anchor="RFC8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <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 "single backslash" 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 "double backslash" 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>
        <name>Informative References</name>
        <reference anchor="MACAROON" target="https://research.google/pubs/pub41892/">
          <front>
            <title>Macaroons: Cookies with Contextual Caveats for Decentralized Authorization in the Cloud</title>
            <author>
              <organization/>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="BISCUIT" target="https://www.biscuitsec.org/">
          <front>
            <title>Biscuit Authorization</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ZCAPLD" target="https://w3c-ccg.github.io/zcap-spec/">
          <front>
            <title>Authorization Capabilities for Linked Data</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
    </references>
    <section anchor="history">
      <name>Document History</name>
      <ul spacing="normal">
        <li>
          <t>-04
          </t>
          <ul spacing="normal">
            <li>Editorial cleanup.</li>
            <li>Updated IANA requirements, including "specification required" registration.</li>
            <li>Added privacy and security considerations.</li>
            <li>Clarified and expanded token introspection request and response.</li>
            <li>Clarified and expanded resource set registration request and response, include example of use of resource reference.</li>
            <li>Updated discovery.</li>
            <li>Allow optional tokens on RS-facing API requests.</li>
            <li>Tighter controls over derived tokens.</li>
          </ul>
        </li>
        <li>
          <t>-03
          </t>
          <ul spacing="normal">
            <li>Added token model.</li>
            <li>Added IANA sections.</li>
          </ul>
        </li>
        <li>
          <t>-02
          </t>
          <ul spacing="normal">
            <li>Editorial and formatting fixes.</li>
          </ul>
        </li>
        <li>
          <t>-01
          </t>
          <ul spacing="normal">
            <li>Better described RS authentication.</li>
            <li>Added access token format registry.</li>
            <li>Filled out introspection protocol.</li>
            <li>Filled out resource registration protocol.</li>
            <li>Expanded RS-facing discovery mechanisms.</li>
            <li>Moved client-facing RS response back to GNAP core document.</li>
          </ul>
        </li>
        <li>
          <t>-00
          </t>
          <ul spacing="normal">
            <li>Extracted resource server section.</li>
          </ul>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
BMaqXtTzsKe7Y9vYg+MApg1saW6rnuEwvQT2slxFDYiC2y7CrmAMLcbA5x+Q
39UqCGUGDMGQICCIvX199G/J81VJBQiwzBsupOmuoitZ1SD94nUU49nN1hH1
N2pDpPmLYJGup6F1cs2xHwU9I3xbitZlqMEChcK4zxk5sWDKej2O7LG+4Tux
Dm57c7koXd8EqozJPHplyDR7zUguOwxTZHywMIkrbcLxfOnyluWS1dYTRFFh
2jYdYyYVIBL1oT9b+A6a7B8WAUF5yR2xFYgh5xcz2lJFRkFRGaiZXt5E0lHv
UnE3gKCZoHZTsnf/fnL8w3VW0mE6WdjhIXd22wesHFIefWD8oPjd2WfFITSI
4Lc/+qDLtMxXi6wYglqZouqG9y1SEjJLfKz4nXO84k+D3yimw6NwXOfk9KAV
TaGnuPCdg98fPO17KJGdD5tfh+2oD28zn/PQYBD2PSdj8Pz46aPq5OH3F/d/
98q+BLNxtDUqQ67RVmVq1Cxkm1spDgZEjUpMqHODBVVJ/YtkpERFmir5Tlqt
yXuywUGz7nZTbZWBezYilW/9Ldyp2fbCRzRMkKiJikFVobaBtZByJ4C/Vy/d
5n0e9XQhxxYfeUtnbbW3JYnKm0XVARYRvKSZ+icSQmI3f+AVbJKPt67KfXAa
7IkveXKe7lUZdhvWT+uONyfyREZ9eIPMBKPBaJ8VQO7KnuwPzzyDuFCUb419
M4wrCTiR6376DKXATdZRdUXFvRdKn1jV1VSP61Rej1BZVBjgwEREJc92+mG1
E6ZxBD2b/068e1+WBdbSTaJMMDlypIuWA2Xm7lYOWBVt0DvxW9liYkvcPFWs
vmmumBAWO2TwFi82GnvqP66icFX3vOuok/MUWNSur0egkbv6gtAT1OZloS3C
JxWnVTqXauQfCHQp5x0R1z4b0YHLAE6Mu5/X3mJ3obFYgKh/Xwz6q6s/0KXA
iWLS6cAb725if+0h4mS2QvSXPgdqD/GCtq1lpj3LkWPlYgVKJWeY+T/qOSf2
Kmh+Ws+GWURgL8XTmx/SWSBc2xeb9UdbwMYj4esZondhuz38Jzmwu57rSFFr
pcWwohC/4h5WNp32KT6X6GzqeyBK4E705E+tLBdNwdwyKSl/+/futeBV2OZe
35T6uuNOOHx+j7TOq9eBWmoDkN+yDq/Idp9lS6xcbw3v1b5Ab+2oxZEKfOMI
gKqQW72lgQQJNCYq2QuSR4xXPEgcN4HYD1yPVK4VBgfl+mTTMmh63KxB3wQs
0luTJ8Qn54epvrrgftPvQL16IqI7XeFUn/Bb6kqcKHtTyRwMNOJQxCdYd4vb
R/dckOQDCuIa7ZZodCW3K3uIHIwoV4UdSymHa7LSviFSbtgF0/xGVu1Bf2Zg
eMiuIqJkjEmoW7Ze4SjHpQmnzM8J36iTIKxuTcqFXFElOVa+ba4kCPdoLDco
LGhb5yFbD9K8E8lXH3hNLG42i1eoU6dMWn1XRoy2Jtf/FaznLrojjb/48cej
H356+vvHbx89fv1y1wX4jqJ+wWg8BU1aPHZ7yUZpcK7kjQpnAitAZjQSESRF
TQd0eFt7z3tkN2DJtFd0NPUB0IeSgB8CdJ6mU+0IFQlVQ0khXQ9vNPxlqooX
iajZWlPs+ir7EZ1ck9j3XZhqbTbfD0UoNUTOrs6VlnrdEwX4NqqNDztvi2uc
S16tuyVC2kCYgBt2A+dX3WohiUuERf1x5sAz0iPH6fc2IsWiqsdbglBBDFwt
yqYcpqus1+9xhU4gWN2rF9CzbbpBKA13Ok//1LOMq/UEeuXLdIXok+v1hW3r
ulpvoFeu0B3oeZ/+QNNFv3xuKyy9uoT/Tt7fYUzDY+a/hrt7Dx7tjsbTD3+e
+ZzI5BlWw7GXI6iIY46pnQlcdZiUWafVZJFhZivVSHZScPGqcyLCjgDl7hg4
FdXgTWO/p9wzQ75uTMg9CbtOi4GqqWDE5aSlKPEWuv+BnWdAikCI3T6CwRCT
dEVynjQHZgviAViWU8nFxy/i/lsgXGuKCA+0Lty1W1A1CUbg2+IxDk3tlyQj
oN29AcWmdHCg/YS71iuM9Xoj98yFDbY22WMIAJ+iI40DOHytNXfHdLerNnqZ
4B9D4/ZPd265iOndRG+RxJsE9WrPE8nGlL2qcdRaq+v+ww0EYhHtm2XRlQP6
YasLvR4FnrjeLBaleJXAa8nr15Pr5aegu0KX7fHDtubiAeF8bQn545Y6zes0
hIcqGWkOF1bFhsTmZJlmrZfVE7rOozjGwC0uaEPECYadmHVATcZnPyaR4XlN
9us12bBb02F3u/mw/p8np3tX5cd2EmRbj7ent3YSYb/gy/59fsGXrf9u8KUD
OvxHybf037/cbJ/+y0f6pV91nNf7+G53Q1tXey0mtP7zmHB9XjDiRd+taJwT
jE9dh07W/MJUS5/I7QWBT1EJWtsAevFgrVpFuUW+AFEzxgYHG/U5aYf3oPDh
eJS8LiVNnksoYTzOpw3N27aHZ+AkjUZC8Nsg1bjb8plvrvQ5x05bjjeJ68Q1
tPZJWcL4uwJ4z29CODPyHSAKePXRiF6Isokpi57egVHgncc83JZ3rmKc2PW1
G8TQuvk0XA6WNETpvHiJJQc7jBOJhY1uQwS2LV5xHSrwMYTGsw9wcHP9uB28
SuZWwEprATkwoG+9i7RqdiFHrQzbzL+jvDiRfzMHod6Ow6NoFmGf2zD5ZS25
10WnyQHnqw1uFA84C/ycYXAwClpzJk6cX9aKrWG1k3cVBP1wm6hJR9Ln9Ww+
/OX+TrxHBSOFw+9/PN1P7C+b+1dk4V5vHfWYP/+wbK5c19+QZdPrJpW3+kn/
SxK3WxnXbWer1+Up0OSNJ2TN21gZS4fWy3wBdWVXNm0iBZLSlLGDTo2KK6Xe
SenybF1RRgW3R0RD7mCCTWdyO+VefdhXrv0T2G93zo6fHe8zKz78wQVIpdke
TDsGu2iDvo4a6LKJ2o6pp7K+i/NhmC45jO/2/XgLf8UYOD6Mbi/yLjkJ52pF
iVAjh91/xOY5P1CrnbcnRzLe0LfUkeq8Heyss0OvUCrCB54rcPyKqhGP5yON
MBt+fEofo98RBzTmcJEWc5uIJy+3FT46en72AkSF9LBix9UzAQU+j1pgcaj5
v58+f/kCG0idAimta3zrDTDkFDs5mKASsdvq6VY3+ind3F3LH3ZdoYiiUGpo
tg0IRzj/Qo8grc8Z/BPAN8mOXgIPp9sj2UStdHowp/EGmJ1ujHYHs2DZsJZ4
rwuyua/RWc1liP1x3KG25EMyeLEWywbl4dI1vyDzW6BMWoeX8+5Nvny4dLc+
hp1f42M60SBr5HVclSBxsCPR/8beSbt7j10rtmeWEzfhi+cfAF2b5M6z53cR
iuE907ao15UWXuI9t8HgtWA2S0wL7BphHkVV+iCjb6ogf/b8qkl9PsRt8WRm
2sfSZ+YAFUtrfN9I10X8XQHGeOMh7Isx/pJFaC+LOngjrkRz/vgwj0jugXae
/KDIRNrZxa2Dg7Z4gXYS14Tecok8gJ1nehg9NObhb8xr9DPsy+1zy6C5Gb44
UpKGN36Uy8qxxX8ZwoMcNC75HvSpUfJG3S3BnVwHUhUCu3uGYS0qi6CL5FBu
UHY1zPLdGtjGEDUS2vnUP+wFqlvmiXP8817qiDDoBJWROPAJyJTQHegOtZVm
H+gcURvzCWH3iQH0KdjGJ7cYsGfBwkza/2M+vf/lshki8dnp+08CGTRmqRzx
RztmbjRI+BUWwaAgwht6hY0OAtNUG8xWvXIc95YO9bw11FJ6RkajaCNJejfo
JIkfjLmTZPS+dJek1117SXr710m6il79+RBYLr6Hf7x8Rq9tK1nvFxfdMvY+
qRHIjPZt8b+16IgW/ZcJkGip/5AjXTkSA+jLxQndCXW1NClB4yznFOSCAVie
0GdRNC2I8W2oKzNeZV9mU7oVPgdrj7XXqN/PVy8xljX1BjDzg6RLLSkzqfbJ
3Hjn1V9D5DA230zabDmlrUJH721HU1kec/tHrIqj2Ga0Pb229q/P+7fQI2N/
QwAbW+q0wh2QtVyeB291o0+28YxQXWfZgoCIpAkL2U+SQ/epG9GPFHL6AKXl
p23VWTcY4dxuPkWFRZ+S6z+iKpvOrDeYDSjik5SB3ODtLG2+4O1iPPuCt9P1
9NP2SpMbDFCvx58UYtfvBA7p5i/7rJgbf8RZ3kFe90nI2zWl4Y0vUBYCcAnf
IbseiqF7hbHGbdgpJiXdiYIsD0yz5PCntKv9TcXxl2zza+X0lWD5j5DYImhP
7EXmAfFfSVBfDaEvF9nOXPuvLba3LPM/V3RHKcbXiO4bnttWIe4AcBNB7l7+
DxHmNyTav0SsfxGLvYm8v1Z8X9mZtC05Wrm3n5K6VQvyxSNuKcsI5NJXDNdf
OxCqPV8y6HWiT/IPbi77+IO/PeHX2ehvLf14gn+Iv+tB9A/597cm/9oH9/ck
ANt0+9eSgF1Oe70I7GY+f61sCc2m5KvH6Mvp/8oVybUeculIeKcHn1Y9DO/2
uFbYREJFKEIH4NiHPD35jUVOdwtfLViCLf9DjLQB8g8/59cKiyslhEs8Ozi9
Vjj0HsffpCjopbS/iPH3cLLr2fu1DHVbtsEVtkefs+6KYa6+ieNmS+m/Tehm
3/bdHfGFezC3QNxO1hXWB3SSVPSJ3PAlxTuanlpwBPnCamUDc1etb3cCR64g
1MyeQZJhchY+KiuK8BpYaVnMgaXA0QJA07mIE1kPzoYJoL54qNYlT+IlYy2m
Ds4/GW7tuMrLzVIRjy554KDhy1N3MQXfjX4Gx1Fn2LxC5xg2OaL3AXFiubVC
bqZlsUB3QqwLaoZusWlec1lW5+GtYXzJZCBJ6BOcHLhhuW5yX2L19PDN7pNH
nz8bbi5A11oQv2oRjksFDRPhKYEBGF22Wuf+fkBK9sXGRBm3IcNUZOwyco7c
RSooqGVOLeJGNslt3/uqBSTnkfoHdr6Qh8hFC2WMErT4A7fHyKibuIcvRUou
3LPPrsZ8kfJdd7S9jFOYO202eqs4uD89gAK7Kcl9X7gLl3/qUWJkXlD9fusa
Srz6NrwO17Xzw1t5ey8s1CYMUtsgs9a+wQyPghce6mbj9oxBNzQELck7304i
txdYFqHNAPncqRsOXUTc7fziEmc5mRURj1vcOH14WDeb3OoWfacBVj0qG7S1
a99xHDaTiNuRx532pTOWVp9qk9T1apqyvtLqrcKCm9pTlkHnub7U3m5JqqCN
y8Ru93737d6Pgi6VQReE5E66nmZyjR7yTxr7Ln/gtSxfbBOCHdOZo47WyR26
jhevA/340aE7vDYkpv35813KwDxdcxfpVuuUO0JImM9XdzuCyRw8xBGWOVXh
mns+Z+18GgLVX0ajt92ETUT5ZgY4r85FZXqUXBZ+1xjznO5BXpB+jIDouYfI
cUG+RQeXEbXfljW1aCMaDLvyWJPV7eZKAbNMww5LVGpH3W+56M63Ny/1gvuo
Y6t0ee3iWt/puXtN4xVLkR4nvA9CbitXa3AZGd5YBewyq/nyJu7p5O7LBva0
Zl7H7UHc5RvR9UYnp2ZsN3h9E3UkcncYBIgitV8nx8yHqQIbF9phyCfETLp8
eYJffHYlABrK18+0811BqjpwvAvXgneQ+Nt25VJjyiUqQeVZLfCC4JUT3Jgb
pnJTd9juiWLkkofrWcFAjpvhTTtQb45rH9beCNvAvn2pKsWk1lYktGczvh5a
Lh2icafdMaLetLSLJapmKVkYk6xmQyWdMKMOlaF9ZPNUU4nssGcC3oCBowBa
xpo5SRV2VaOgeKNzJGibhrSGd0kNkvGaKoIA8axr+8OH5kgwR6ua8qkLqjkF
XWziWvwEvNq4SyxghXhVOBZMhgumrrZ4NkHpJjc/blODg5P2ZtZCUFgBMQzp
a7oKisOpD81B7avLaeKBKkos7HXh1FBqsrCKqnzxOjcUhKVWmW3ozct0U4+S
Y38H7RKbkNV0Pu6qMBiMvvdtNWaW7otVs5JmCm8FH6d5qsUz7dNyaiwKEQuY
h/kxZyU3/+S7SWVn3KrZw441I0BT7Hp5mRVTMLhgVukop6WqEURHCY5cL+Qe
0FQ/w37UuLgxnPwsawIU9xui9hoZ9ryvF5h7ecSto1Cy+QLZBV+yfqB0h40v
kKSqUjI8Sb3JAwWSKtGckNbVtm4ZFaHCCpgXJygFgPmi9s86w6RUixgdFaHB
y6zvB2Cyb+iShH411HN2Qxoh/pu723YW1L1KwakcY+uEzJSbyLkVdoWdVkVd
IW86yrF4cLTwAYYL+EPQLF1IpSWLcbF9upR2dvhm9CC6a0DK29rbDRuyUjf0
G4k56XIoUtNBNVKBGeJcIijqHKGZA3AnbNBdWl8XRGpG1dM9r6MIETtZlChn
yplJ8zkI0maxpB7gviusrM5NLnUh0ekDeVm6y5i9ZSAhgZZC7USZohc6eFs5
+lO5W5njKdi6kcYHdgWA0eJ6JSOZvMA7zPulXcorjWSVliXKrVbMYlarHGv1
SPziFe41rrZw1xeGxtzzD9gAW++ZjioEQe0NG58T4g/aBfUz0Xg8fjBHyG16
zsfLBMOagLdY27t3mOHM5SDdEMFZo1pCDCiyNqhU0hnYSwaIDTY1Es85uiGJ
n9Bt8lj6AwIb3pgwFoUtp1lwyp+uNXaK12RUrOdhZjazf2fgamsHsqXDJfqK
psC3ju50UZIdLnl27YxfeuB4H5/YiR2+BaJkF8DJaVfXqywQ7XC8GVb15+0d
5ltNtv0lV343it1Iddrpnw5KrUDXYysJ2h84jQ2vtgY75lwrlCo71Gs8t10A
QCW1HKlgh4VqJd02DuN1lk/xCswNqAnLRLpi4A2U69pLEKTJmevQIRe7KhLX
qXSDsh8mXAq13RMB52nSQtzj3IBiTVJQq+LWfCZOReow51ZzEe24E80iyg3h
nL/z7rYrtGXM1Ob01HyEvpZDCeZHRw/oi66eY53nrhFrbxdSEyCe9nkWH3u7
XLpV0NXyOBrzIxIUE0CjAkMb1kYFMg4b8+zc5kQgoixKL4po4IG/tkr4haGo
l9wUt2HlouVLnHrnS8dYEOkrtxL4ylzW6kQTMey2bLsovXKicJKt0YUPX6LR
HAO/HyJr8QadOuulO1TLaRhhDN3UCFrdxTqfh169fpdMXD3uOqmQG4qwYuSY
JbbexItpmoVY+W4ZqEaCsENe71yFkSJEjjhCmb6OmOzlRK0ES6n05JF8LccM
gn6b2pEX3R/EWDm4U8cIRDAYhOwdI0LEF9BnYitLV+V27sugS0BqCnakE1gj
WAUgajOwFLjQlC6R7qpD0nc9mWNgtNtWmAwKVumFN403XkCyWUiaBFlAydMN
07NiaTRg2KEPvzIEJ7YPKJYq7kQWT4qQSP/q6VQzV3lG+zRWrKxEDcLadrjn
ssiflOCww0wxIWjBaYC8BxEml1OsOeJKmpJvMS15AS76U2OEq924rSbWyc0k
bHgdEN07zOu7MsY+kNtMxC3Iyrzze5pxGdwRKuxERc13YHYDCqpwh0ccpaZr
kxwNVKW7N/rAN1ylftfrhlw4rMExuRgQNZcpR1SEOn1nNukgGHReEywraP0c
JoED0js/9Bgi5x7LJG2fZJRCshlKOWFxEv4vdGS5jKrZYGSdSqvxmk7BmhWy
bWzlwYvJUYzEssA1a0Srkzqrr6Q9IvqSwARGynCLrOM+DD6cHIFhIGjtDFSJ
/lqMi2oBIAB1gkszcgDTbEaDNAmcipX7bCmmw5BC5a9MkLrm7EDOfHs/0beJ
GJGsUURukgq2VJKd4GvmghSGbqfBuqWboROXXAMvKPBSJG9dTOng1IjNHavP
nssgT+4GavjqXRWK6t1HhVrD9XHvDt/Yw7Al78wsbjvVmQNVvgmGRDgqiMt1
nYi3aIyqMIJSl8mOTeviLZp76GpvSW2mEZE5Nt3mH9SCna74cmH6xtLVe52b
KLSXC3DE+HYT1qgPToWoXGMB7uYVmrfktagxewO+yypp51XXKv9FS+J72pBw
6jWzxGJuOgAXlJ6vM7mKIFQ2nPXq5yYny2oF8Kyd0hPeW6vmNEGqPR0S2dgu
UpS0M4cW5BtmjZKmITQDc0XuHyNX5BIDyMUsm6+1I6UzoGkmq6gx4I5g3het
n/Ha3K20tXEaQIDCkpbHsrKsXWiqNRvJKSZ67W8kKmm0tGjgkeky6UCYg/RG
QyUngUspKU5BcTTIamTW4kquy6WcGWKrmjOyuksOyCNO9tziRJ1LU2K1mmHE
yg/wVjgFMvm3MKMTFR/jHBgf3zzbBwm/BzeFeOR9a15AtajFLvmZKrqRZ+DD
wOypzDdBYwo2l8JpPXuclzBDBcjPOnq4FuT++ohspOj+6PD2ChNJmkjnEYut
a4O3+EetelCyAOrExTiI3I5No0lWARCYXmqDDWClO1dAhYQbclmX8BvkQRnn
MKgLwQp/cN2sWsyg3z6KC/tgbywffsDb2Ump33KX7lV6mIZdfdJffDWlMEv2
ybLZbnrM9ijs7hyLrYyEUXKYrsIbvbasd8IhIyBysZOcM1yPK/T6AFjEFyZs
st4slxadBGFMCcSEj+vx9SjUY6qWmab+qk1nNYvcIBeDlwbuqMdpzTxQO+5j
kIzCkCIoJIpRktYlOheZVKbfkOq9LQlZwLqgzi0+5s7u17bLI4sdSw4MTkhG
d5LE7hiy5REirvmXC1Po2ZqrzrbPOdEXGQ0UYgZGEMz1iBUkkqCHd053nwdY
mPqEj9D5Fbeic2dJl9xwtCeg4LCfKSvjNdA5hveqrD73gcDQ70e6KeMDO39i
f9e1zvrQiwagQB8He1Fz9P7pgRlC81CV1DSJtgkacvqxapvKvwA41Kd1G4CM
8MSWpwx5TfKmyi4wvtfJ+5IHnwP99AscC12KkLwaagTaaYXvSQMsAQQ6YM3J
8cAbKOQet/+hDgYJaBaOmPBuLrqnThwLnDXlN8F3v2rQFd2E6HqbNTZgWxog
Y2wUjiRUAFzQOSgKdkOgSkBjIcvCM44sO87kkUZng9B8JiVySeobpmZNgMST
Yo23kUdtcPEsyy57Ea8G7ocMXtJAclkDthzjcQ/eHNVbtZI08DN28oNiCSA4
P7jOkxCaSujDfha4C0ShiQSnXB8Wz5z5frh0DM6go6gu3kBHpinHS1qJACLu
6XvKJQpeQB2FpvO8JlXzUy1vN5fcrAvn6ZOr2HUJRIi3QYi1L10WS73FlK/F
cjRlQuMahoV/VpzAQ+TkLHEO5EuSxSxctWVFG+wIgMdl2kzwzjnRqslzTGb6
hJ0AJDfxsmk+iFeSt53iYVSJ5voZD4a2mANEtMTg+0lfIjGUNXYqmYd6RLJ5
n0VmpMNm/1D+hgtV02loUdPxLXR+pZ2Lmkj2LIFLwCpj6jJZD0mxjSgjU9zB
cTe2FIKUUAGGpqPg7SDaA1z1b1qKdjo0zksUAoYXi5OH7b4ZfZuMkhYljZZV
A3ZbIislTdmthiysIsgRkobJzjeD0O53UUYA2wrf9kVYDC+9dREbGY1BuaKm
6poj/F2GN0FgAcuC//qMWXrD+w8pvW2YPJ9m8CtlkGMh53o1kgdvJZGQalHC
POQwprsT579rWehOVFqhIx5M+epqlo1RmkbsytcPDoGa+EZfytr8sErFf9jH
+7pZu9cME1V/RnUmfYPprq0iL2dz2PDqF++BagPRGYMOFuSwLVeSdq2Jooi8
YZKnv7GGPztDRiaezKpEmYYYHnX3RemBB/wggnrglY+Pg45XmjDqp3sd3EBI
SPSITPjsg9WXd+XlpxYZY6DBofoZ9YiNJ+5pGubKWfTNF6AhWIrdtI5bnc89
L/ZfP9j+4LligYe3N9h9ZqW+/qq8cOSs75+ceomLZIfMgfycE7xqVy1+gdJ9
N2+D7aFj9KN7+uQMRub/A9Ge/rbc8gAA

-->

</rfc>
