Internet DRAFT - draft-pinkas-gnap-core-protocol
draft-pinkas-gnap-core-protocol
D. Pinkas
Internet-Draft DP Security Consulting
Intended status: Standards Track
Expires: 20 February 2022 19 August 2021
Grant Negotiation and Authorization Protocol
draft-pinkas-gnap-core-protocol-00
Abstract
This protocol enables an Authorization Server (AS) to issue access
tokens to permit an end-user using a client software to perform
operations on a protected resource hosted by a Resource Server (RS).
These access tokens allow to support capabilities and/or user
attributes.
The protocol includes means of specifying how the end-user can
potentially be involved in an interactive fashion during the
process. The client and/or the RS will use these interaction
mechanisms to involve the end-user, as necessary, to take decisions.
The protocol uses HTTPS for all communications between the client
and the AS, as well as between the client and the RS.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as
reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on 20 February 2022.
Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.
Pinkas Expires 20 February 2022 [Page 1]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your
rights and restrictions with respect to this document. Code
Components extracted from this document must include Simplified BSD
License text as described in Section 4.e of the Trust Legal
Provisions and are provided without warranty as described in the
Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . .3
1.2. Vocabulary . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Abbreviations . . . . . . . . . . . . . . . . . . . . . . .4
1.4. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . .4
1.5. Trust relationships . . . . . . . . . . . . . . . . . . . .6
1.6. Prior arrangements before the protocols can be used . . . .8
1.7. Short term and long term user accounts . . . . . . . . . . 8
1.8. Structure of an access token . . . . . . . . . . . . . . . 8
1.8.1. Signed part of an access token . . . . . . . . . . . . 9
1.8.2. Unsigned part of an access token . . . . . . . . . . 10
1.9. Mandatory checks to be done by a RS on an access token . .11
2. An overview of the protocols . . . . . . . . . . . . . . . . .12
2.1. RS and AS Discovery APIs . . . . . . . . . . . . . . . . .13
2.1.1. RS Discovery API . . . . . . . . . . . . . . . . . . .13
2.1.2. AS Discovery API . . . . . . . . . . . . . . . . . . .14
2.2. Queries from an end-user to an AS . . . . . . . . . . . . 14
2.3. Creation a long-term user account on a RS . . . . . . . . 15
2.3.1. The RS already "knows" the end-user . . . . . . . . . 15
2.3.2. The RS does not already "know" the user . . . . . . . 18
2.4. Creation a short-term user account on a RS . . . . . . . .19
2.5. Operation on a resource hosted by a RS . . . . . . . . . .20
2.5.1. Operation on a resource without an access token . . . 20
2.5.2. Operation on a resource using an access token . . . . 22
2.5.2.1. Dialogue between the end-user and his client . . .22
2.5.2.2. Dialogue between the end-user and the RS . . . . 23
2.5.2.3. The access token request . . . . . . . . . . . . .24
2.5.2.4. The access token response . . . . . . . . . . . . 26
2.6. Flow of operations for one access . . . . . . . . . . . . 26
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
4. Security Considerations . . . . . . . . . . . . . . . . . . . 27
5. Privacy Considerations . . . . . . . . . . . . . . . . . . . .28
5.1. Privacy Considerations for both ABAC and CABC . . . . . . 29
5.1.1. Privacy Considerations for ABAC . . . . . . . . . . . 30
5.1.2. Privacy Considerations for CBAC . . . . . . . . . . . 30
5.2. Privacy Considerations between RSs . . . . . . . . . . . .31
5.3. Privacy Considerations between the end-user and the AS . .31
5.3.1. Transparency . . . . . . . . . . . . . . . . . . . . . .31
5.3.2. Hiding to the AS the URL of the RS and its use . . . . .31
6. References . . . . . . . . . . . . . . . . . . . . . . . . . .32
6.1. Normative References . . . . . . . . . . . . . . . . . . .32
6.2. Informative References . . . . . . . . . . . . . . . . . .33
Pinkas Expires 20 February 2022 [Page 2]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
1. Introduction
This protocol allows end-users to interact with a piece of software,
the client instance, to request access tokens to Authorization
Servers (ASs) to perform operations either on protected resources
hosted by a Resource Server (RS) or on the RS itself to create a
user account.
The protocol also allows end-users to collect from an AS information
about themselves.
When an end-user is willing to perform an operation on a protected
resource hosted by a RS or on the RS itself to create a user
account, the end-user operating the client interacts with the RS to
assert his consent, authenticates to the AS and then requests an
access token from the AS.
The protocol allows to support Attribute Based Access Control
(ABAC), as well as Capability Based Access Control (CBAC), where a
capability is an authorization to perform an operation on a
resource.
This specification also discusses discovery mechanisms for the
client instance to discover the access token formats supported by a
RS or an AS and whether attributes (for ABAC) and/or capabilities
(for CBAC) are needed in order to perform a given operation on a
resource or a registration on a RS.
The focus of this protocol is to provide interoperability between
the different parties acting in each role, but is not to specify
implementation details of each. However the structure of access
tokens is detailed, but the syntax of the access tokens is left
open. The security of the protocol relies on the presence and on
the verification by the RS of some of the fields that must be
present in an access token.
The protocol takes into consideration the ease of use for the
end-user: an end-user can use any number of clients without the
burden to manage them (as long as he can trust the client instance).
The protocol also take into consideration some privacy laws and
recent regulations (e.g. the EU General Data Protection Regulation)
[GDPR] in order to allow the RSs to comply with the legislation.
Direct communications between an AS and a RS are not necessary for
the execution of this protocol. The means for an AS and a RS to
interoperate directly are not discussed in this document.
1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
Pinkas Expires 20 February 2022 [Page 3]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
1.2. Vocabulary
attribute : characteristics related to an end-user
right : ability given to an end-user to perform a given operation on
a protected resource under the control of a RS
Note: a "right" is denoted as a "capability" in the security
literature.
access token : data artifact representing a set of rights and/or
attributes
grant (verb) : to permit an instance of client software to receive
some attributes at a specific time and valid for a specific
duration and/or to exercise some set of delegated rights to
access a protected resource
grant (noun) : the act of granting
privilege : right or attribute associated with an end-user
protected resource : API (Application Programming Interface) served
by an RS and that can be accessed by a client, if and only
if a valid access token is provided.
1.3. Abbreviations
ABAC Attribute Based Access Control
CBAC Capability Based Access Control
1.4. Roles
The parties in GNAP perform actions under different roles.
Roles are defined by the actions taken and the expectations
leveraged on the role by the overall protocol.
Resource Server (RS) : server that provides operations on resources,
where operations on resources protected by GNAP require a valid
access token issued by an Authorization Server (AS)
Authorization Server (AS) : server that grants delegated privileges
to a particular instance of client software in the form of access
tokens
Client : application operated by an end-user that consumes resources
from one or several RSs, possibly requiring access tokens from
one or several ASs
End-user : natural person that operates a client instance
Pinkas Expires 20 February 2022 [Page 4]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Example: a client can be a mobile application, a web application,
etc.
Resource Owner (RO) entity that may grant or deny operations
on resources it has authority upon
Note: the act of granting or denying an operation may be manual
(i.e. through an interaction with a physical person) or automatic
(i.e. through predefined rules).
The following Figure 1 illustrates the relationships between the
different roles
+---------------+
| |
| Authorization |
+---------->| Server |
| | |
| +---------------+
| ~
| ~ When CBAC is supported
| ~
+----------+ +---------------+
+----------+ | | | |
| End-user |+ + +| Client | | Resource |
+----------+ | Instance | | Owner |
| | | |
+----------+ +---------------+
| ~
| ~ When ABAC is supported
| ~
| +---------------+
| | |
+---------> | Resource |
| Server |
| |
+---------------+
Legend
+ + + indicates an interaction between a human and computer
----- indicates an interaction between two pieces of software
~ ~ ~ indicates a possible interaction between two roles
Figure 1: Relationships between the different roles
When a resource hosted by the RS is access control protected using
attributes (ABAC), then the RO interfaces with the RS.
When a resource hosted by the RS is access control protected using
capabilities (CBAC), then the RO interfaces with the AS.
Pinkas Expires 20 February 2022 [Page 5]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
A RS may host protected resources where some of them are access
control protected using attributes and while some others are access
control protected using capabilities. A same resource can even be
protected using attributes and capabilities.
1.5. Trust relationships
All the exchanges between a Client and a RS SHALL be protected using
HTTPS, i.e. HTTP [RFC7231] over TLS [RFC8446]. The verification of
the identity of the RS shall be done according to RFC 6125
[RFC6125].
All the exchanges between a Client and an AS SHALL be protected
using HTTPS, i.e. HTTP [RFC7231] over TLS [RFC8446]. This includes
the authentication exchange between an end-user and an AS. The
verification of the identity of the AS shall be done according to
RFC 6125 [RFC6125].
In order to trust an AS public key certificate or a RS public key
certificate, a client SHALL install and use a trust anchor that
allows to verify each AS or RS public key certificate. The overall
certification scheme SHALL allow each client to test the revocation
status of each AS or RS public key certificate using CRLs [RFC5280]
or OCSP [RFC6960].
In order to trust an AS public key certificate, a RS SHALL install
and use a trust anchor that allows to verify each AS public key
certificate. The overall certification scheme SHALL allow each RS
to test the revocation status of each AS public key certificate.
In order to allow for the revocation of the public key certificate
of an AS or a RS, the public key that allows to verify that public
certificate SHALL itself be certified using a public key certificate
issued by an upper CA.
The end-user is trusting his client to manage the interactions with
the AS and with the RS, whether these interactions are performed
using APIs or using a User Interface (UI).
The end-user is trusting the AS to manage his attributes and, upon
request, to disclose them to his client.
In order to allow the checking of the integrity and the authenticity
of the content of an access token, each AS SHALL sign its access
tokens using a private key certified by a CA (Certification
Authority).
For the delivery of either rights or attributes in an access token,
a RS may trust one or more ASs.
The remaining trust conditions are different whether rights or
attributes are supported by the RS to allow performing operations on
a given resource under the control of an RS.
Pinkas Expires 20 February 2022 [Page 6]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Rights
An access control scheme where rights are supported by the RS to
perform operations on a resource is usually known in the security
literature as a system using capabilities. When rights are
supported by a RS to allow performing operations on a resource under
the control access token.
In such a case, an of the RS, the RS may trust one or more ASs for
the delivery of rights in arrangement needs to be established
between each AS/RS pair: the RS MUST designate to the AS a RO that
will be responsible to deliver rights which will be placed into
access tokens.
For each resource protected using capabilities and for each
authenticated user, the responsible RO is able to indicate to the AS
which operations may be permitted on the resource by an
authenticated end-user.
A RS may decide to accept from a given RO only a reduced set of
operations on some resources.
By default and in order to allow interoperability tests, all the
resources placed under the control of one RS SHOULD be managed by a
single RO. Using private arrangements between the RS and the AS,
finer or coarser granularities may override the default behavior.
Attributes
An access control scheme where attributes are supported by the RS to
perform operations on a resource is usually known in the security
literature under the acronym of ABAC (Attribute Based Access
Control). When attributes are supported by a RS to allow performing
operations on a resource under the control of a RS, the RS may trust
one or more ASs for the delivery of attribute types and/or attribute
values in access tokens.
For each resource protected using attributes, the responsible RO is
able to indicate to the RS which operations may be permitted on the
resource, when a proper set of attribute types and attribute values
are present in an access token.
In such a case, the RS may globally indicate which attribute types
and/or attribute values in access token will be accepted from a
given AS.
Note: It should be observed that when attributes are being used the
AS does not need to perform any kind of pre-arrangement with the
RSs.
Pinkas Expires 20 February 2022 [Page 7]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
1.6. Prior arrangements before the protocols can be used
The following arrangements are supported using out-of-bands means
that are outside the scope of the protocol.
Every end-user MUST have an account opened with at least one AS.
When the account is settled between the end-user and the AS, a user
identifier and an authentication method SHALL be agreed. The end-
user MUST receive information that allows him to perform a first
authentication exchange with success.
When capabilities are supported by a RS, that RS SHALL designate a
RO that will interface with at least one AS.
1.7. Short term and long term user accounts
Two types of accesses may be proposed by a RS to allow an end-user
to use:
- short-term user accounts, or
- long-term user accounts.
In the first case, the user may be willing to remain anonymous
towards the RS by either using a capability or disclosing a set of
attributes that will be insufficient to identify him unambiguously.
Once the session will be closed, the RS will not maintain
information about the session, except in his audit trail.
In the second case, the user may be willing to retrieve some data,
to deposit some data or to modify some data that will be saved by
the RS. A typical example, is an access to a bank account.
1.8. Structure of an access token
This section describes the structure of an access token by
enumerating both required and optional fields.
For each field, it prescribes both its semantics and the processing
that SHALL be done on it, but it does not prescribe its syntax. In
the future, additional documents may define detailed access token
formats including their encoding.
An access token is composed of two parts: a signed part and an
unsigned part which is optional.
Before accepting an access token, a RS SHALL check the mandatory
fields of the access token.
Pinkas Expires 20 February 2022 [Page 8]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
1.8.1. Signed part of an access token
This part contains:
- a required field (called "valid") that indicates the validity
period of the access token using the UTC time. The start of
the validity period is the time at which the access token was
issued.
- a required field (called "as_pkc") that allows to identify the
issuer of the access token, i.e. the AS. Either the PKC
(Public Key Certificate) [RFC5280] of the AS SHALL be included
or, if the corresponding certificate is placed in the unsigned
part of the access token, a hash value of that certificate
SHALL be included.
- an optional field (called "hash_algo") that indicates the
identifier of the hash algorithm used to compute the digital
signature of the access token.
- one of the two following optional fields, i.e. "rs_url" or
"hidden_url", SHALL be present:
- an optional field (called "rs_url") that allows a RS to
make sure that the access token is indeed intended for
itself. That field SHALL contain at least one URL of a RS.
- an optional field (called "hidden_url") that allows a RS
to make sure that the access token is intended for itself.
That field SHALL contain at least one value that MUST be
combined with a field ("reveal_url") from the unsigned part
of the access token to recover the real value of the target
URL of a RS.
- a required field (called "buid") which is a "binding user
identifier" that allows a RS to verify that the access token is
associated with the right (short-term or long-term) user
account. This field allows to detect the inappropriate use of
an access token by a malicious user, including in the case of
a collusion between users. This field is composed of a type
chosen by the client and of a value chosen by the AS. Five
different types may be requested by the client :
The first four types are used in the context of long-term user
accounts managed by the RS, while the last type is used in the
context of short-term user accounts managed by the RS.
The four types used in the context of long-term user accounts
managed by a RS are:
(1) a unique user identifier used to identify a user for each
User/ RS pair, or
Pinkas Expires 20 February 2022 [Page 9]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Note: this option cannot be implemented in the context of
a "software-only" solution. It requires the use, by the
end-user, of a secure element with specific security
properties. [This option is not detailed any further at
the moment].
(2) a unique user identifier used to identify a user for each
AS / RS pair, or
(3) a locally unique user identifier used to identify a user
whatever RS is being involved, or
(4) a globally unique user identifier.
The last type used in the context of short-term user accounts
managed by a RS is:
(5) a short-term user unique identifier.
Note: The four first types are used when a long-term user account is
being used on a RS. The last and fifth type is used when a
short-term user account is being used on a RS.
- at least one of the two following optional fields, i.e. "attrs"
or "rights", SHALL be present (both may be present):
- an optional field (called "attrs") that contains one or more
attributes that are associated with the end-user. This field
is an array where each element of the array is composed of
the identifier of an attribute type and of the associated
attribute value.
- an optional field (called "rights") that contains one or more
rights (i.e. capabilities) that have been granted to the user
by a RO hosted by the AS and which is associated with the RS
protecting the resource. This field is an array where each
element of the array is composed of one or more methods and
of the URL of a resource.
- an optional field (called "at_uid") that contains a unique
identifier for the access token. The identifier value MUST be
assigned by the AS in a manner that ensures that there is a
negligible probability that the same value will be accidentally
assigned twice. This field may be useful for audit purposes.
1.8.2. Unsigned part of an access token
This part contains:
- the signature value (called "sign") of the access token.
Pinkas Expires 20 February 2022 [Page 10]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
- an optional field (called "path") that contains a certification
path [RFC5280], starting with the PKC of the AS.
- an optional field (called "reveal_url") that allows to retrieve
the true value(s) of the URL(s) of RS(s) that has (have) been
hidden to the AS.
This field is an array where each element of the array is
composed of a random value called "rnd_value" and a method
identifier. If the field "hidden_url" is present in the signed
part of the access token, then the field "reveal_url" MUST be
present. This field MUST be used by the RS to combine the
"hidden_url" value with the appropriate "rnd_value" to verify
that the end result matches with its own URL value.
A one way hash function (OWHF) SHALL be used by the client to
compute the "hidden_url" to be placed into the access token, by
first choosing a large random number for the "reveal_url" value
and combining it with the base URL of the RS using the following
formula: "hidden_url" = OWHF ("reveal_url", RS_URL). When the
client receives the access token from the AS and before
communicating it to the RS, the "reveal_url" value SHALL be
inserted by the client into the unsigned part of the access
token.
1.9. Mandatory checks to be done by a RS on an access token
When a resource is protected using GNAP, several checks need to be
done.
The ordering of the following checks is not mandated as long as all
the checks are performed.
However, the following list has been established taking into
consideration that an invalid access token should be rejected as
soon as possible which means that the fastest checks should be done
before.
When receiving an access token, the RS SHALL check that:
- it is well-formed,
- it contains an "attrs" field if the RS supports attributes and it
contains a "rights" field if the server supports capabilities.
If a RS supports both, one of these two fields SHALL be present.
- the access token is currently within its validity period by using
the "valid" field and the UTC time. The start of the validity
period cannot be sooner than the current time expressed using the
UTC time. A time skew of a dozen of seconds SHOULD be allowed.
The validity period of the access token SHOULD NOT exceed 25
hours.
Pinkas Expires 20 February 2022 [Page 11]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
- that the access token is indeed targeted to itself by using either
the "rs_url" field or the "hidden_url" field, and in the later
case also the "reveal_url" field.
When the RS receives an access token that contains both an
"hidden_url" and a "reveal_url" field, it SHALL verify that the
access token is targeted to itself, by using its RS_URL and then
computing the value: OWHF (reveal_url, RS_URL) and finally verify
that it matches with the value contained in the "hidden_url" field.
- that the access token is apparently coming from one of the ASs
trusted by the RS using the DN (Distinguished Name) of the AS that
is present in the AS's PKC.
In order to perform that check, the AS's PKC SHALL be retrieved
either directly from the "as_pkc" field or using the hash value
of that PKC if present in the "as_pkc" field to retrieve it from
the "path" field. The validity period of that PKC [RFC5280] SHALL
be verified.
- that the signature of the access token is valid. In order to
perform this verification, the RS SHALL first construct a
certification path between an appropriate trust anchor and the
RS's PKC [RFC5280]. If present, the field "path" SHOULD be used
to construct that certification path. Once the certification path
has been verified as being valid (taking in consideration the
revocation status of each PKC from the certification path) the
certified key SHALL be extracted from the PKC and used to verify
the field "sign" of the access token [RFC5280]. Depending upon
the public key algorithm being used, the field "hash_algo", if
present, SHALL also be used.
Note: additional checks depend whether the resource is protected
using attributes or capabilities.
2. An overview of the protocols
Different protocols can be used for different purposes:
(1) to discover the main features supported either by a RS or
an AS;
(2) to allow an end-user to query which of his attributes are
known by an AS;
(3) to create a long-term user account on a RS (that will last
between different sessions) using an access token;
(4) to create a short-term user account on a RS (that will last
during the duration of a single session) using an access
token;
Pinkas Expires 20 February 2022 [Page 12]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
(5) to perform an operation on a resource hosted by a RS.
2.1. RS and AS Discovery APIs
2.1.1. RS Discovery API
A GNAP RS can publish its features on a well-known discovery
document using the URL ".well-known/gnap-rs" appended to the
base URL of the RS.
The discovery response is a JSON document [RFC8259] consisting of a
single JSON object with the following fields:
trusted_AS (array) : REQUIRED: A list of the ASs trusted by the RS.
The array contains an enumeration of ASs and for each AS, the
following information SHALL be present :
- the base URL of the AS, and
- one AS PKC.
It is RECOMMENDED to include an image within the AS certificate
according to RFC 6170 (Internet X.509 Public Key Infrastructure
Certificate Image). The purpose of the certificate image is to
aid human interpretation of a certificate by providing meaningful
visual information to a user interface (UI).
In addition it is RECOMMENDED to publish the next AS PKC, when it
has already been issued by the responsible CA.
Note: the ordering of these ASs is important. See section 5.1.
user_interaction_endpoint (string): REQUIRED. The location of
the RS's user interaction endpoint, used by the client to conduct
a dialogue between the end-user and the RS.
The goal of this dialogue is to present one or more options to
the end-user, so that, after being informed of the consequences
of these options, he may provide its consent to the RS.
The location MUST be a URL [RFC3986] with a scheme component
that MUST be https, a host component, and optionally, port, path
query components and no fragment components.
RS_token_formats_&_syntaxes_supported (array of strings) OPTIONAL:
A list of token formats and syntaxes supported by the RS.
long_term_user_account (Boolean) OPTIONAL: indicates whether
long-term user accounts are supported by the RS.
short_term_user_account (Boolean) OPTIONAL: indicates whether
short-term user accounts are supported by the RS.
Pinkas Expires 20 February 2022 [Page 13]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Note : either the long_term_user_account flag or the
short_term_user_account flag MUST be present and set to TRUE.
user_registration_endpoint (string): OPTIONAL. The RS's user
registration endpoint, used by the client to create either a
short-term user account or a long-term user account.
rs_cert_path (array): OPTIONAL. A set of CA certificates that may
help a client to built a certification path between a RS
certificate and a trust anchor.
2.1.2. AS Discovery API
A GNAP AS can publish its features on a well-known discovery
document using the URL ".well-known/gnap-as" appended to the
base URL of the AS.
The discovery response is a JSON document [RFC8259] consisting of a
single JSON object with the following fields:
attributes_supported (Boolean) OPTIONAL: indicates whether
attributes requested by the end-user may be included into
an access token.
capabilities_supported (Boolean) OPTIONAL: indicates whether
capabilities requested by the end-user may be included into
an access token.
Note : either the attributes_supported Boolean or the
capabilities_supported Boolean MUST be present and set to TRUE.
AS_token_formats_&_syntaxes_supported (array of strings) OPTIONAL:
A list of token formats and syntaxes supported by the AS.
grant_request_endpoint (string): REQUIRED. The location of the
AS's grant request endpoint, used by the client to request access
tokens. The location MUST be a URL [RFC3986] with a scheme
component that MUST be https, a host component, and optionally,
port, path query components and no fragment components.
as_cert_path (array): OPTIONAL. A set of CA certificates that may
help a client to built a certification path between an AS
certificate and a trust anchor.
2.2 Queries from an end-user to an AS
Before making this query, the client SHALL establish an HTTPS
connection with the AS. The client SHOULD be able to communicate
to the AS the preferred language(s) of the end-user. The end-user
SHALL successfully authenticate with the AS.
Pinkas Expires 20 February 2022 [Page 14]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Any kind of authentication method can be used, e.g. using asymmetric
cryptography, symmetric cryptography or even using end-user
identifiers associated with (long) passwords, since the connection
is both integrity and confidentiality protected using HTTPS.
Since the AS knows some attributes that belong to the end-user, they
will be returned in the response to this query. Each attribute has
a type and a value. These attributes are considered as personal
data and, as such, the end-user SHALL be able to have access to
them. In some cases, it may be allowed to correct some of them or
to propose corrections to them.
Note: In this case, no access token will be returned.
2.3. Creation a long-term user account on a RS
Two different cases needs to be considered, whether the RS already
"knows" the end-user or not. The client SHOULD first make sure that
the RS has set the long_term_user_account flag, otherwise no long-
term user account can be created.
2.3.1. The RS already "knows" the end-user
The RS may already "know" the end-user because it already holds some
information about him and the end-user is already identified by the
RS under a user account number.
The user would like now to like to get on on-line access to perform
some operations on some information associated with his user
account.
The client performs a RS Discovery operation to know which ASs are
trusted by the RS. If the user has an account on one of these ASs,
the end-user (or the client) may select one of these ASs.
The RS asks the client to provide some user attributes types already
known by the AS that has been selected by the client. The dialogue
with the end-user SHALL be handled using the
user_interaction_endpoint.
The RS allows the user to know the reason(s) why such attribute
types are being requested (User Notice). The user may agree or deny
to provide them (User choice and User Consent) and, if he agrees,
the client will request to the AS an access token that should
contain these attribute types.
For example, the attribute types may be: first name, family name,
birth date and birth location.
Pinkas Expires 20 February 2022 [Page 15]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
In order to detect a possible replay or use of a delivered access
token by an AS for a given RS by another client, the client
indicates that the access token should be protected under, e.g. :
(1) a unique user identifier used to identify a user for each
User/ RS pair;
(2) a unique user identifier issued by the AS to identify the
end-user for each AS / RS pair (e.g. a different pseudonym
for each AS / RS pair), or
(3) a locally unique user identifier used by the AS to identify
the user, whatever server is involved (e.g. a single
pseudonym used for all the servers), or
(4) a globally unique user identifier (e.g. a personal email
address, a social security number including the issuing
country, a passport number including the issuing country,
a driving license including the issuing state or country).
In order to detect the replay of the access token by a RS towards
another RS, the client indicates the identifier of the intended RS.
The fields "rs_url" or "hidden_url" of the access token may be used
to allow such a detection.
The returned access token will include some attributes. These
attributes are placed in the "attrs" field of the access token.
The returned access token will then include in the "binding user
identifier" field ("buid") of the access token, the type of the
binding unique user identifier requested and a value assigned by
the AS.
If the attribute types and values contained in the access token
match with the already known attribute types and values, the
operation will be granted.
It should be observed that, when using the choice (2), it is not
possible to hide to the AS the URL of the RS, since this value is
needed to generate a different pseudonym for each AS / RS pair.
It may be observed that, when using the choice (3), it is possible
to hide to the AS the URL of the RS, since this value is not needed
to generate a single pseudonym used for all the servers. However,
in this case, all the RSs receiving access tokens from the same AS
are able to link their user accounts.
It may be observed that, when using the choice (4), it is possible
to hide to the AS the URL of the RS, since this value is not needed
to generate a globally unique user identifier. However, in this
case, not only all the RSs receiving access tokens from the same AS
will be able to link their user accounts, but also other servers
using the same globally unique user identifier.
Pinkas Expires 20 February 2022 [Page 16]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
The choice (4) should be avoided, unless all the RSs issuing
attributes or rights are managed by the same organization that is
managing the AS and that organization is purposely willing to link
all the user accounts of its RSs. At the moment, the "best" choices
in the Internet environment are be restricted between the choices
(2) and (3) and will be a compromise between two privacy properties,
where each of these two choices has an advantage and a drawback :
- the choice (2) does not allow to hide to the AS the URL of the
RS, but prevents the RSs receiving access tokens from the same
AS to link their user accounts, while
- the choice (3) allows to hide to the AS the URL of the RS, but
allows the RSs receiving access tokens from the same AS to link
their user accounts.
That choice will be left to the end-user (or to the client).
Note: the choice (1) would allow both to hide to the AS the URL
of the RS and to prevent the RSs to perform a linkage between
their user accounts.
Later on, if the client requests another access token, the client
or the end-user should remember its original choice, e.g. (2)
or (3), for the same RS, otherwise the access token will be rejected
by the RS.
It is recommended that each client locally manages for each end-user
a "privacy preference profile" to associate a choice value with the
base URL of each RS.
In order to detect the replay of the access token by a RS towards
another RS, the client indicates the identifier of the intended RS
using either the "rs_url" field for the choice (2) or the
"hidden_url" field for the choice (3) of the access token.
The returned access token will then include some attributes in the
field "attrs" of the access token and the binding user identifier
issued by the AS in the field "buid" of the access token.
Before presenting this access token to the RS, the end-user SHALL
establish an HTTPS connection with the RS. Then after, the access
token SHALL be send to the user_registration_endpoint of the RS.
Once the RS has verified that the access token is valid, it
memorizes the "binding user identifier" field ("buid") of the access
token. All subsequent access tokens issued by that AS SHALL contain
the same value, otherwise they will be rejected.
It is recommended that each client locally manages for each end-user
a "privacy preference profile" to associate a choice value with the
base URL of each RS.
Pinkas Expires 20 February 2022 [Page 17]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
2.3.2. The RS does not already "know" the user
The RS does not yet "know" the user: he has no user account for the
end-user on that RS. The end-user wants to create a user account.
The client performs a RS Discovery operation to know which ASs are
trusted by the RS. If the user has an account on one of these ASs,
the end-user (or the client) may select one of these ASs.
In order to create a RS user account, a RS will likely ask for both
claimed attributes and certified attributes (i.e. attributes
contained in an access token delivered by an AS trusted by the RS).
Claimed attributes are simply attributes declared by the user.
The user_interaction_endpoint of the RS will be used to conduct a
dialogue between the RS and the end-user in order to request both
claimed attributes and certified attributes. During that dialogue,
the end-user has the ability to know the reason(s) an/or the
rational for the collection of each attribute type and which kind of
treatment will be made of it.
Once the end-user has agreed to request some attributes types to the
selected AS, the client requests to that AS an access token that
contains some attribute types known by that AS.
As in the previous case, in order to detect a possible replay or use
of a delivered access token by an AS for a given RS by another
client, the client indicates that the access token should be
protected under, e.g. :
(1) a unique user identifier used to identify a user for each
User/ RS pair;
Note: this option is only possible when the end-user is
using a specific secure element.
(2) a unique user identifier issued by the AS to identify the
user for each AS / RS pair (e.g. a different pseudonym for
each AS / RS pair), or
(3) a locally unique user identifier used by the AS to
identify the user, whatever server is involved (e.g. a
single pseudonym used for all the servers), or
(4) a globally unique user identifier (e.g. a personal email
address, a social security number including the issuing
country, a passport number including the issuing country,
a driving license including the issuing state or country).
The choice (4) should be avoided. At the moment, the "best" choices
will be restricted between the choices (2) and (3) and will be a
compromise between two privacy properties, since each of these two
choices has an advantage and a drawback :
Pinkas Expires 20 February 2022 [Page 18]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
- the choice (2) does not allow to hide to the AS the URL of the
RS, but prevents the RSs receiving access tokens from the same
AS to link their user accounts, while
- the choice (3) allows to hide to the AS the URL of the RS, but
allows the RSs receiving access tokens from the same AS to
link their user accounts.
If the attribute types and values contained in the access token
match with the expected attribute types and if the requested claimed
attributes are also received, some verifications will be done by the
RS. Such verifications introduce some delay.
This is why the final response about the creation of the user
account on the RS is asynchronous.
Later on, if the client requests another access token, the client
or the end-user should remember its original choice, e.g. (2) or
(3), for the same RS, otherwise the access token will be rejected by
the RS.
It is recommended that each client locally manages for each end-user
a "privacy preference profile" to associate a choice value with the
base URL of each RS.
In order to detect the replay of the access token by a RS towards
another RS, the client indicates the identifier of the intended RS
using either the "rs_url" field for the choice (2) or the
"hidden_url" field for the choice (3) of the access token.
The returned access token will then include some attributes in the
field "attrs" of the access token and the binding user identifier
issued by the AS.
Before presenting this access token to the RS, the end-user SHALL
establish an HTTPS connection with the RS. Then after, the access
token SHALL be send to the user_registration_endpoint of the RS.
Once the RS has verified that the access token is valid, it
memorizes the "binding user identifier" field ("buid") of the access
token. All subsequent access tokens issued by that AS SHALL contain
the same value, otherwise they will be rejected.
2.4. Creation a short-term user account on a RS
The client performs a RS Discovery operation to make sure that the
RS has set the short_term_user_account flag, otherwise no short-term
user account can be created.
The client performs a RS Discovery operation to know which ASs are
trusted by the RS. If the user has an account on one of these ASs,
the end-user (or the client) may select one of these ASs.
Pinkas Expires 20 February 2022 [Page 19]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
In order to detect a possible replay or use of a delivered access
token by an AS for a given RS by another client, the client
indicates that the access token SHALL be protected using a short-
term user unique identifier.
The client (or the end-user) has then two options: either to hide or
to reveal the URL of the RS. If it wants to hide the URL of the RS,
it can only use one session. For this purpose, it SHALL use the
"hidden_url" field of the access token. In order to connect with
another RS, it SHALL explicitly release that session. If it agrees
to reveal the URL of the RS, it SHALL use the "rs_url" field of the
access token. It can then use multiple short-term sessions with
different RSs in parallel. The two choices are exclusive.
The returned access token will then include in the "binding user
identifier" field ("buid") of the access token, the type of the
binding user identifier requested and a value assigned by the AS.
This value assigned by the AS SHOULD be a large pseudo-random
number.
In order to detect the replay of the access token by a RS towards
another RS, the client indicates the identifier of the target RS.
The fields "rs_url" or "hidden_url" of the access token may be used
to allow such detection.
Note: none of the two optional fields "attrs" and "rights" needs
to be present in this access token.
Before presenting this access token to the RS, the end-user SHALL
establish an HTTPS connection with the RS. Then after, the access
token SHALL be send to the user_registration_endpoint of the RS.
Once the RS has verified that the access token is valid, it
memorizes the "binding user identifier" field ("buid") of the access
token.
All subsequent access tokens issued by that AS SHALL contain the
same value, otherwise they will be rejected.
2.5. Operation on a resource hosted by a RS
2.5.1. Operation on a resource without an access token
The client does not necessarily know in advance, whether the
resource is or is not protected. If the resource is unprotected and
if the API is well formed, then the access will be granted.
When a client instance calls an RS without an access token, or with
an invalid access token, if the resource is protected and if the API
is well formed, then different HTTP errors types may be returned, in
particular:
Pinkas Expires 20 February 2022 [Page 20]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
401 "Unauthorized" which indicates an authentication error. It
always includes a WWW-Authenticate header that describes how to
authenticate.
In this particular case, the RS SHALL respond with a header field
that contains one challenge for the "GNAPv1" scheme and two
additional parameters "attrs" and "rights" to indicate whether the
RS supports attributes and/or rights for that resource.
After each parameter (i.e. "attrs" and "rights") follows a pointer
to the AS(s) trusted by the RS as enumerated in the "trusted_AS"
field from the RS Discovery API.
For example: WWW-Authenticate: GNAPv1 attrs= 1,3,4 rights= 2,3
In this example, both attributes and rights are supported. AS 1
and AS 4 support attributes only, AS 3 supports both attributes and
capabilities (i.e. rights) while AS 2 supports capabilities (i.e.
rights) only.
If either attributes or rights are not supported, the following
values SHALL be used respectively: "attrs= 0" or "rights= 0".
The client SHOULD then use the "RS Discovery API" to find out which
are the ASs trusted by the RS.
403 "Forbidden" which indicates that the server understood the
request but that the client instance does not have permission to
access this resource, even if it has been authenticated. A server
that wishes to make public why the request has been forbidden can
describe that reason in the response payload (if any).
When the request is recognized by the server but sent "without an
access token or with an invalid access token", the HTTP status 403
Forbidden SHOULD be used. If the server wants to make known why a
request is forbidden, it can provide the reason in the payload.
Note 1: 403 "Forbidden" is dedicated to authorization errors,
whereas 401 "Unauthorized" is dedicated to authentication errors.
Note 2: A server that wishes to hide the existence of a forbidden
target resource MAY instead respond with a status code of 404
(Not Found).
404 "Not Found" which indicates either that the server did not find
a current representation for the target resource or that the server
is not willing to disclose that one exists.
405 "Method not allowed" which indicates that the method received in
the request-line is known by the server but not supported by the
target resource. In that case, the server MUST generate an Allow
header field containing a list of the target resource's currently
supported methods.
Pinkas Expires 20 February 2022 [Page 21]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Note: If the method is incorrect, 405 "Method not allowed" SHALL
have precedence over 403 "Forbidden".
Note: These error codes are defined in RFC 7231 [RFC7231]and
RFC 7235 [RFC7235] as follows:
- 400 Bad Request . . . . . . Section 6.5.1 of RFC 7231
- 401 Unauthorized . . . . . . Section 3.1 of RFC 7235
- 403 Forbidden . . . . . . . Section 6.5.3 of RFC 7231
- 404 Not Found . . . . . . . Section 6.5.4 of RFC 7231
- 405 Method Not Allowed . . . Section 6.5.5 of RFC 7231
- 406 Not Acceptable . . . . . Section 6.5.6 of RFC 7231
2.5.2. Operation on a resource using an access token
The client instance determines which operation on a resource is
needed and which RS to approach for access.
Unless the client already knows from a previous experience what kind
of additional data needs to be presented, the client has the
possibility to query the RS to know which kind of protection is
being used by the RS for that resource.
It requests on operation on the intended resource and voluntarily
omits to send any access token. It will then get an 401
"Unauthorized" error that indicates that GNAPv1 is supported and
whether attributes and/or rights should be presented in an access
token.
It will also know which ASs, if any, are trusted by the RS to
deliver attributes in an access token and which ASs, if any, are
trusted by the RS to deliver capabilities in an access token.
The client instance determines that the RS supports GNAP and the
process may continue.
2.5.2.1. Dialogue between the end-user and his client
The client may be configured by the end-user with the URLs of the
ASs where he has an AS user account. It may then propose to select
one or more ASs showing at the same time, if capabilities or
attributes may be requested on these ASs to be included into an
access token.
If some choices remain, then the client SHOULD ask the end-user to
make these choices. The client then knows which AS has been chosen
and whether attributes (ABAC) or capabilities (CBAC) will later on
be requested to that AS.
Pinkas Expires 20 February 2022 [Page 22]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
The client SHALL determine whether the end-user is willing to make
an access to the RS using a short-term user account or a long-term
user account. Usually, it should know it from the context of the
operation. However, if it doesn't know, it SHALL ask the end-user
to make that choice.
If the client used by the end-user has recently opened a short-term
user account, it SHOULD be usable if it has not been closed,
otherwise a new short-term user account SHOULD be created.
If the access to the RS should be done using a long-term user
account, the same choice as originally made by the end-user for the
binding user identifier when opening his user account on the RS
should be done. If the client locally manages for each end-user a
"privacy preference profile" that associates a choice value with the
base URL of each RS, it should re-use the same choice. Otherwise,
the question should be raised again to the end-user.
2.5.2.2. Dialogue between the end-user and the RS
When using ABAC, a dialogue needs to be established between the end-
user and the RS. Such dialogue needs to be supported using a port
able to support a User Interface (UI). The address of this port
SHALL be published by the RS and made available using the RS
Discovery API. It SHALL be a URL hosted by the RS.
When initiating the dialogue on the UI port of the RS, the client
communicates to the RS which AS has been selected by the end-user.
The RS indicates to the end-user which attribute types and
optionally attribute values should be present in an access token
issued by that AS.
Before making a call to that AS, the end-user may wish to be
informed of the treatments or usages that will be done by the RS
with each requested attribute type, including a possible disclosure
to other third parties. Such information is usually present in a
User Notice. A simple click or a selection of an attribute type
should be sufficient to disclose the terms of this User Notice.
The UI SHALL clearly ask the end-user whether it accepts to request
these attribute types and SHALL require an action or a gesture from
the end-user to indicate its acceptance.
At this point of time, the choice made by the end-user SHOULD be
memorized by the RS and also by the client.
The memorization done by the RS is not for technical reasons, but
to comply with some laws or regulations.
Pinkas Expires 20 February 2022 [Page 23]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
As an example, the General Data Protection Regulation [GDPR] from
the EU indicates in Article 7(1) :
"Where processing is based on consent, the controller SHALL
be able to demonstrate that the data subject has consented
to processing of his or her personal data. "
The memorization done by the client is for technical reasons: the
client SHALL use the choice made by the end-user to request an
access token to the AS that SHOULD include the attribute types
selected by the end-user.
A markup language such as XML needs to be used in order to delineate
the meaning of each field and its value, when present.
Note: when the RS supports CBAC for a protected resource, no
dialogue is needed between the end-user and the RS.
2.5.2.3. The access token request
The client knows whether the access token will be used for a short-
term RS user account or a long-term RS user account.
If a long-term user account is being used, the client SHOULD already
know the privacy preference of the user since they have been chosen
when creating the long-term user account (see section 3). If the
user is using a new client (i.e. device), then the new client SHOULD
inquire it again.
The client already knows whether the resource is protected using
attributes and/or rights (see section 5.1). If it is protected
using attributes, it already knows which types of attributes should
be requested to the AS, and optionally which attribute values.
The request MUST be sent as a JSON object in the body of the HTTP
POST request with Content-Type "application/json".
Each field placed in the body of the HTTP POST request is described
below:
at_format : REQUIRED. The format of the access token.
at_crypto : REQUIRED. The asymmetric crypto algorithm and the one
way hash function to be used for computing the digital signature
of the access token.
val_period (string) OPTIONAL. It is the desired validity period of
the access token expressed in hours and minutes. The AS may
override this value.
Pinkas Expires 20 February 2022 [Page 24]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
buid_type (integer) : REQUIRED. The binding user identifier type
to be used with the RS. The allowed values are 1 to 5.
target_rs (string) : either a "rs_url" value or a
"hidden_url" value that SHALL be placed into the access token.
Note : if the buid_type is set to 2, then a "hidden_url" value
SHALL NOT be accepted.
operations (array of string) : REQUIRED when capabilities are
requested. It is a list of capabilities, where each capability
consists of :
- one or more methods and
- the URL of the protected resource.
attrs_types (array of string) : REQUIRED when attributes are
requested. It is a list of attribute types. These attributes
may be static or computed from a static attribute. As an example,
an age categorization attribute would be a computed attribute
composed of one or two values, like "over 12" and "under 18"
(see min-age and max-age).
The naming and the definitions used in Table 1 (Registered Member
Definitions) from the "OpenID Connect Core 1.0 specification"
[OIDC_1.0] are re-used in this document.
See : https://openid.net/specs/openid-connect-core-
1_0.html#Claims
As a consequence, the following attributes types are defined:
name, given_name, family_name, middle_name, nickname,
preferred_username, profile, picture, website, email,
email_verified, gender, birthdate, zoneinfo, locale,
phone_number, phone_number_verified, address.
In addition, subsets of the previous fields may be returned.
For example, for an address, the country and region only may
be requested. This leads to recognize the following attribute
types: street_address, locality, region, postal_code, country.
In addition, the following attribute types may also be useful:
shipping_address, payment_info, eye_color, max_age, min_age.
In order to support group memberships, the two following
attribute types are also defined: hierarchical_group and
functional_group.
Since a user may belong to more than one functional group, the
value(s) that should be placed into the access token should be
indicated in the request, otherwise all the functional groups
will be returned.
Pinkas Expires 20 February 2022 [Page 25]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
The end-user is able to know which values have been affected to
this attribute type by sending a query to the AS (see section
2.2). As a consequence, the client is able to specify which
attribute value(s) should be returned for the functional_group
attribute type.
2.5.2.4. The access token response
The response MUST be sent as a JSON object in the body of the HTTP
POST request with Content-Type "application/json". It is an access
token. Its semantics and structure are described in section 1.7.
2.6. Flow of operations for one access
Once either a short-term user account or a long-term user account
has been created on a RS, the flow of operations is illustrated
hereafter:
+---------------+
+------------->| |
|(5) | Authorization |
| | Server |
| +-------| |
| |(6) +---------------+
| | ~
| | ~
+----------+ +---------------+
| | | |
+----------+ (3) | Client | | Resource |
| End-user |+ + +| Instance | | Owner |
+----------+ | | | |
^ +----------+ +---------------+
| ^ ^ | ~
| | | | ~
| | | |(7) +---------------+
| | | +------>| |
| | |(2) | |
| | +---------->| Resource |
| |(1) | Server |
|(4 Opt.) +-------------->| |
+--------------------------->| |
User Interface +---------------+
Figure 2: Flow of operations for one access
(1) RS Discovery
(2) Operation on a resource hosted by a RS without an access token
(3) Dialogue between the end-user and the client
(4) Optional dialogue between the end-user and RS
when the RS requests attributes
(5) Access Token request to AS
(6) Access Token response from AS
(7) Access Token presentation to RS
Pinkas Expires 20 February 2022 [Page 26]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Note: The creation of RS user accounts is not illustrated
on Figure 2.
3. IANA Considerations
This specification will require the registration of the various
attributes types defined in section 5.2.3:
name, given_name, family_name, middle_name, nickname,
preferred_username, profile, picture, website, email,
email_verified, gender, birthdate, zoneinfo, locale,
phone_number, phone_number_verified, address,
street_address, locality, region, postal_code, country,
shipping_address, payment_info, eye_color, max_age, min_age.
4. Security Considerations
Since HTTPS is used between the client and the RS and between the
client and the AS, the client can be confident that the information
it receives is indeed coming from the intended RS and from the
intended AS.
Since the authentication exchange between the end-user and the AS is
protected by HTTPS, the AS can be confident that the end-user is
using the unknown connected client. Any kind of authentication
exchange can be used, including the simple "id and password" scheme,
since the password is both integrity and confidentiality protected
during its transfer.
The appropriate version (or versions) of TLS will vary over time,
based on the widespread deployment and known security
vulnerabilities. Refer to [BCP195] for up to date recommendations
on transport layer security.
The transmission of an access token obtained by one end-user to
another end-user cannot be prevented, but can be detected by the RS.
In order to detect the transmission of the access token by one
client towards another client, the AS includes in every access token
a binding user identifier ("buid").
Every access token is bound to a RS user account (either a short-
term user account or a long-term user account). This is done by
including a binding user identifier ("buid") in every access token.
A binding user identifier is composed of a type and of a value. The
client can choose the type of the binding user identifier but not
its value which is only assigned by the AS.
All access tokens that are presented to a RS in the context of a
given RS user account must contain the same binding user identifier.
Pinkas Expires 20 February 2022 [Page 27]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
If an end-user obtains an access token from a collaborative end-
user, he cannot use it on his own user account since it will not
contain the same binding user identifier ("buid").
Let us use an example to illustrate the topic.
Some goods or activities with some preferred rates are only
disclosed by a town to its residents and if there are over 21.
In such a case, two attribute types and values will be requested
by the RS, e.g. :
Town of residence: Nashville - Tennessee - 840
Age categorization: over 21
Let us assume that Alice has the two following attributes:
Town of residence: Nashville - Tennessee - 840
Age categorization: over 16
while Bob has the two following attributes:
Town of residence: San Francisco - California - 840
Age categorization: over 21
If Alice asks for an access token that only contains:
Town of residence: Nashville - Tennessee - 840
and Bob asks for an access token that only contains:
Age categorization: over 21
if they agree to collaborate, they will not be able to combine their
attributes to perform an operation on the server managed by the town
of Nashville, since they will not contain the same binding user
identifier ("buid").
It is proposed to use to the wording "binded token" to designate
an access token that contains a binding user identifier.
Note: It should be noted that access tokens do not need to be
"protected" by a private key known by the client. Such a
protection would be illusory, since a collaborative client
could perform all the cryptographic computations that
another collaborative client would need to claim to be the
"owner" of the access token. This can be done even these
private keys are protected using an hardware security
module (HSM).
5. Privacy Considerations
ISO/IEC 29100 (Privacy framework) [ISO29100] lists eleven privacy
principles that are valid in a system with two entities which
correspond in this document to the relationships between one
end-user and one RS.
Note: ISO/IEC 29100 is available from ISO for free.
Pinkas Expires 20 February 2022 [Page 28]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
Among the privacy principles from ISO/IEC 29100 enumerated on page
14 in Table 3, the following privacy principles are particularly
important:
- Individual participation
- Purpose legitimacy and specification,
- Consent and choice,
- Collection limitation,
- Data minimization,
- Use, retention and disclosure limitation,
- Openness, transparency and notice.
Since this document considers two access control schemes: Attribute
Based Access Control (ABAC) and Capability Access Control (CBAC),
the privacy considerations for both of them are first addressed
(section 5.1) followed by the privacy considerations for each of
them (sections 5.2 and 5.3).
However, the current document considers a more complex system with
at least three entities: the end-user, the RS and the AS, where each
of them may exists more than once.
In this environment, some additional privacy properties also need to
be considered, in particular those that apply between RSs (section
5.4) and privacy properties that apply between the end-user and the
AS (section 5.5).
5.1. Privacy Considerations for both ABAC and CABC
Since the AS knows some attributes from the end-user, applying the
"individual participation" principle from ISO/IEC 29100, means
giving to the end-users the ability to access and review their
attributes, provided their identity is first authenticated with an
appropriate level of assurance and using a language which is both
clear and appropriately adapted to the circumstances.
This principle is reached using queries from an end-user to an AS
(see section 2.2) since such a query is performed once the client
has established an HTTPS connection with the AS and the end-user has
successfully authenticated with the AS.
For both ABAC and CABC a user account SHALL be created on the RS.
This account may be either short-term or long-term. For a long-term
user account, at the moment, the end-user needs to choose between
hiding to the AS the URL of the RS or allowing RSs to link their
user accounts.
Pinkas Expires 20 February 2022 [Page 29]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
5.1.1. Privacy Considerations for ABAC
In this access control scheme, end-user attributes need to be
presented to the RS. The end-user SHALL be able to :
- select the AS that will be contacted to deliver attributes,
- know which attribute types and attribute possibly values are
requested by the RS,
- know the reasons and/or the rational for providing these
attribute types and possibly values,
- consent or disagree with the provision of these attributes
from an AS that he has selected.
The previous functionalities are supported by a local dialogue
between the end-user and the client and by another dialogue between
the end-user and the RS.
This allows adhering to the purpose of legitimacy principle:
communicating the purpose(s) to the end-user before the time the
information is collected or used for the first time for a new
purpose.
It is possible for the client to hide to the AS the URL of the RS.
However, at this time, until a secure element is being used, the
price to pay for that feature is to allow RSs to link their user
accounts. So the end-user will have to make a choice between these
two features.
Note: The core principles of ABAC permit to the client to hide
to the AS the method that will be performed on a resource
as well as the URL of that resource.
5.1.2. Privacy Considerations for CBAC
In this access control scheme, capabilities need to be presented to
the RS. The end-user SHALL be able to :
- select the AS that will be contacted to deliver capabilities,
- consent or disagree with the provision of these capabilities
from an AS that he has selected.
The above functionalities are supported by using a local dialogue
between the end-user and the client.
The core principles of CBAC do not permit the end-user to hide to
the AS the URL of the RS, nor to hide to the AS the URL of the
resource, nor to hide to the AS the method that will be performed
on the resource.
Pinkas Expires 20 February 2022 [Page 30]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
5.2. Privacy Considerations between RSs
Two RSs should not be able to link their user accounts, by using the
content of the access tokens they receive from the same AS or from
different ASs. This property may be referred as: Unlinkeability
between RS user accounts. For short-term user accounts, it is
always achieved. However, for long-term user accounts, it may only
be achieved, for the moment, if the client/end-user accepts to
disclose to the AS the URL of the RS.
5.3. Privacy Considerations between the end-user and the AS
5.3.1. Transparency
When a client receives an access token from an AS, it should be able
to verify that the access token contains the requested privileges,
i.e. no more or not less, and, if not, it should be able to prevent
the transmission of the access token to the RS.
This property can be achieved as long as "Token introspection", as
currently described in OAuth, is not being used. It should be
noticed that Token introspection may allow an AS to deliver to the
client more privileges than the ones inserted into an access token.
These two properties are directly related to the "Transparency" of
the system since they allow the end-users to be confident in the
system they are using.
For these reasons, access tokens are not considered to be opaque
to the clients but may be considered to be opaque for the end-users.
5.3.2. Hiding to the AS the URL of the RS and its use
The AS should not be able to know when an issued access token will
be indeed consumed by a RS. This property can be achieved by using
the "hidden_url" field and as long as "Token introspection" is not
being used.
Pinkas Expires 20 February 2022 [Page 31]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
6. References
6.1. Normative References
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation
List(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280,
May 2008. <https://www.rfc-editor.org/info/rfc5280>.
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
2011, <https://www.rfc-editor.org/info/rfc6125>.
[RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani,
A., Galperin, S., and C. Adams, "X.509 Internet Public
Key Infrastructure Online Certificate Status Protocol -
OCSP", RFC 6960, DOI 10.17487/RFC6960, June 2013,
<https://www.rfc-editor.org/info/rfc6960>.
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext
Transfer Protocol (HTTP/1.1): Semantics and Content",
RFC 7231, DOI 10.17487/RFC7231, June 2014,
<https://www.rfc-editor.org/info/rfc7231>.
[RFC7235] R. Fielding, J. Reschke, Hypertext Transfer Protocol
(HTTP/1.1): Authentication, June 2014,
<https://www.rfc-editor.org/info/rfc7235>
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON)
Data Interchange Format", STD 90, RFC 8259, DOI
10.17487/RFC8259, December 2017,
<https://www.rfc-editor.org/info/rfc8259>
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS)
Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446,
August 2018, <https://www.rfc-editor.org/info/rfc8446>.
Pinkas Expires 20 February 2022 [Page 32]
Internet-Draft Grant Negotiation and Authorization Protocol August 2021
6.2. Informative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre,
"Recommendations for Secure Use of Transport Layer
Security (TLS) and Datagram Transport Layer Security
(DTLS)", BCP 195, RFC 7525, May 2015.
<https://www.rfc-editor.org/info/bcp195>
[OIDC_1.0] OpenID Connect Core 1.0 specification
<ttps://openid.net/specs/openid-connect-core-1_0.html>
[ISO29100] Information technology - Security techniques - Privacy
framework. 2011. ISO/IEC 29100 is available for free at:
https://standards.iso.org/ittf/
PubliclyAvailableStandards/c045123_ISO_IEC_29100_2011.zip
[GDPR] Regulation (EU) 2016/679 of the European Parliament and
of the Council of 27 April 2016 on the protection of
natural persons with regard to the processing of personal
data and on the free movement of such data, and repealing
Directive 95/46/EC (General Data Protection Regulation).
<https://eur-lex.europa.eu/eli/reg/2016/679/oj>
Authors' Address
Denis Pinkas
DP Security Consulting
Email: denis.ietf@free.fr
Pinkas Expires 20 February 2022 [Page 33]