Internet DRAFT - draft-seitz-ace-core-authz
draft-seitz-ace-core-authz
ACE Working Group L. Seitz
Internet-Draft SICS
Intended status: Standards Track G. Selander
Expires: December 31, 2015 Ericsson
M. Vucinic
STMicroelectronics
June 29, 2015
Authorization for Constrained RESTful Environments
draft-seitz-ace-core-authz-00
Abstract
This memo defines a framework for authorization in constrained-node
networks, i.e. networks where some devices have severe constraints on
memory, processing, power and communication bandwidth. The main goal
is to offload constrained devices by providing them access control
support from trusted parties that are less constrained. The approach
is based on RESTful requests to dedicated access management
resources, supporting different authorization schemes and
communication security paradigms.
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 http://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 December 31, 2015.
Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
Seitz, et al. Expires December 31, 2015 [Page 1]
Internet-Draft CoRE Authorization June 2015
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
2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Example A: Access to an Actuator . . . . . . . . . . . . 4
2.2. Example B: Multiple Devices Accessing Sensor Data . . . . 5
2.3. The Authentication and Authorization Problem . . . . . . 5
2.4. Solution Overview . . . . . . . . . . . . . . . . . . . . 6
3. Information Flows . . . . . . . . . . . . . . . . . . . . . . 7
3.1. Message Sequences . . . . . . . . . . . . . . . . . . . . 7
3.2. Access Management Resources . . . . . . . . . . . . . . . 9
4. Communication Security . . . . . . . . . . . . . . . . . . . 11
4.1. AS - RS . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2. AS - C . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.3. C - RS . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.4. Authorization Information transfer in the DTLS Handshake 13
5. Authorization Request Format . . . . . . . . . . . . . . . . 15
5.1. ARF Information Model . . . . . . . . . . . . . . . . . . 15
5.2. ARF Data Model . . . . . . . . . . . . . . . . . . . . . 15
6. Authorization Information Format . . . . . . . . . . . . . . 16
6.1. AIF Information Model . . . . . . . . . . . . . . . . . . 16
6.2. AIF Data Model . . . . . . . . . . . . . . . . . . . . . 17
7. Client Information Format . . . . . . . . . . . . . . . . . . 18
7.1. CIF for the Push scheme . . . . . . . . . . . . . . . . . 18
7.2. CIF for the Client-Pull scheme . . . . . . . . . . . . . 19
8. Message Processing . . . . . . . . . . . . . . . . . . . . . 20
8.1. Unauthorized Access Attempt . . . . . . . . . . . . . . . 20
8.2. Authorization Request . . . . . . . . . . . . . . . . . . 21
8.3. Receiving Authorization Information . . . . . . . . . . . 22
8.4. Receiving Client Information . . . . . . . . . . . . . . 23
8.5. Resource Request and Response . . . . . . . . . . . . . . 23
9. Security Considerations . . . . . . . . . . . . . . . . . . . 24
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24
11. Acknowledmgents . . . . . . . . . . . . . . . . . . . . . . . 24
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 25
12.1. Normative References . . . . . . . . . . . . . . . . . . 25
12.2. Informative References . . . . . . . . . . . . . . . . . 25
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 26
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28
Seitz, et al. Expires December 31, 2015 [Page 2]
Internet-Draft CoRE Authorization June 2015
1. Introduction
Authorization is the process of deciding what an entity ought to be
allowed to do. Authorization management and processing access
control policies in order to reach an authorization decision is often
a heavyweight task, involving e.g. database lookups, credential
verification and matching large sets of values against each other.
Constrained devices are ill-equipped to handle this on their own,
therefore the logical approach is to offload authorization management
and part of the decision process to a less constrained, trusted third
party.
This memo describes an approach to authorization in constrained-node
networks using dedicated resources for access management. The
various entities in the architecture handle authorization information
by making RESTful requests (GET/PUT/POST/DELETE) to these resources
and thereby establish the necessary security contexts for
interactions between endpoints.
The approach is based on the use cases from [I-D.ietf-ace-usecases]
and on the architecture and problem description from
[I-D.gerdes-ace-actors]. It introduces protocols for requesting
authorization information from a trusted third party, encodings for
such authorization information and protocols for transferring it to
the affected device(s). We assume that CoAP [RFC7252] is the
preferred application-layer protocol and that constrained devices
implementing these mechanisms can be as resource constrained as class
1 according to the definitions in [RFC7228].
An important goal in the design of this framework is to preserve end-
to-end security in the presence of untrusted intermediate nodes in
the communication of requests, responses and related authorization
information.
1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Certain security-related terms are to be understood in the sense
defined in [RFC4949]. These terms include, but are not limited to,
"authentication", "authorization", "confidentiality", "(data)
integrity", "message authentication code", and "verify".
RESTful terms including "resource", "representation", etc. are to be
understood as used in HTTP [RFC7231] and CoAP [RFC7252].
Seitz, et al. Expires December 31, 2015 [Page 3]
Internet-Draft CoRE Authorization June 2015
Terminology for constrained environments including "constrained
device", "constrained-node network", "class 1", etc. is defined in
[RFC7228].
Terminology for entities in the architecture is defined in
[I-D.gerdes-ace-actors], such as the constrained nodes Client (C) and
Resource Server (RS), and the less constrained nodes Client
Authorization Server (CAS) and Authorization Server (AS).
Since this draft focuses on the problem of access control to
resources it is for simplicity assumed that the Client Authorization
Server functionality is not stand-alone but subsumed by either the
Authorization Server or the Client (see section 2.2 in
[I-D.gerdes-ace-actors]).
We use the term "authorization token" for authorization information
that is protected with object security.
2. Overview
This section contains an overview of the authentication and
authorization problem and the solution described in this memo. We
begin with two generic examples.
2.1. Example A: Access to an Actuator
Consider an actuator, e.g. in an industrial control system. Set in
the terms of the architecture [I-D.gerdes-ace-actors], the actuator
is hosted in one endpoint, acting RS, and another endpoint, acting C,
is requesting access to the actuation resource.
Security requirements of special importance are:
o RS needs to verify that the requesting Client is authorized to
access the resource.
o Integrity and replay protection of request. Assuming CoAP,
integrity protection applies to Payload but also to other fields
such as for example the CoAP option Uri-path.
o C must be able to verify the integrity of the response, and that
the received message is the response to the previously made
request, in order for C to verify that the actuation was
performed.
o It must be possible to confidentiality protect the request and
response, e.g. for privacy reasons.
Seitz, et al. Expires December 31, 2015 [Page 4]
Internet-Draft CoRE Authorization June 2015
2.2. Example B: Multiple Devices Accessing Sensor Data
Consider a constrained sensor performing measurements consumed by
multiple devices. Since the communication of a duty-cycled sensor
with each consuming device would require energy expensive radio
receptions and transmissions, it is favorable to minimize the number
of devices that directly interact with the sensor. Therefore the
sensor publishes (e.g. sends notifications with) measurements to a
message broker, which forwards the measurements to subscribing
devices. Access control is performed by only giving plaintext access
to authorized subscribers.
In the terminology of [I-D.gerdes-ace-actors] this means that the
sensor acts RS and the subscribing devices are Clients. In this
case, the RS may neither be able to verify integrity nor replay of
individual client requests, nor authorize individual clients, since
it isn't necessarily interacting directly with any clients. For the
same reason the client is not able to match a publication against a
request. The main relevant security requirements here are:
o Access to plaintext publications must be restricted to authorized
Clients.
o A Client needs to verify the origin of the publication, and that
it is not a replay of an old publication.
2.3. The Authentication and Authorization Problem
Both examples in the previous subsections are encompassed by the
problem statement described in [I-D.gerdes-ace-actors] but their
security requirements are quite different. On a high level, the
authentication and authorization problem can be broken down into
three sub-problems:
1. The policy for resource access as defined by the Resource Owner
(RO) and managed by the Authorization Server (AS) needs to be
translated into authorization information following an
Authorization Information Format (AIF) that the RS can parse and
act upon.
2. Similarly, the Client may need to acquire keys/credentials or
other information from the AS to securely access the resource.
Such client information is encoded following a Client Information
Format (CIF).
Seitz, et al. Expires December 31, 2015 [Page 5]
Internet-Draft CoRE Authorization June 2015
3. In order for Client and RS to authenticate and authorize
according to policy, the communication of the various information
elements needs to be protected appropriately end-to-end: from AS
to C, from AS to RS, and between C and RS.
To access an actuator, as in example A, the authorization information
could be an authorization decision that C is granted access to a
certain resource, or attributes of C that RS can match against
internal access policies. The client information could be
cryptographic keys which C could use to establish secure
communication with RS.
In the publish-subscribe scenario of example B, the authorization
information (if present) could be cryptographic keys that must be
used for protection of published resource representations. The
client information could be cryptographic keys/credentials with which
publications of certain resource representations can be verified and
decrypted.
Communication security could be addressed with a session security
based protocol such as DTLS [RFC6347], or an object security solution
based on e.g. COSE [I-D.schaad-cose-msg] (see Section 4).
The other sub-problems listed in this section, AIF and CIF, are
further detailed in Section 6 and Section 7, respectively.
2.4. Solution Overview
Considering the large variety of use cases, it may be difficult to
address the authentication and authorization problem with one single
protocol instance. In this section we list some guiding principles
for a solution. The remainder of the document provides solution
components based on the principles listed in this section. In
Section 8 the detailed processing steps are presented. In Appendix A
examples of the proposed solution are given.
PRINCIPLE 1: Allow different order of information flows
The information flows, including AIF, CIF, and Resource Request/
Response (RRR) (Figure 1), may take place in different order see
Section 3.
Seitz, et al. Expires December 31, 2015 [Page 6]
Internet-Draft CoRE Authorization June 2015
+---------------------------------+
| Authorization |
| Server |
+---------------------------------+
| |
CIF AIF
| |
V V
+--------+ +----------+
| Client |<--- RRR --->| Resource |
| | | Server |
+--------+ +----------+
Figure 1: Information flows
PRINCIPLE 2: Build upon REST
The information flows should leverage the RESTful architecture. For
RRR this is already assumed, but RESTful administrative resources for
managing access to e.g. AIF and CIF need to be defined. The support
for REST should not preclude optimizations for particular protocols,
for example some flows may be embedded within the DTLS handshake.
PRINCIPLE 3: Allow security at different layers
Leave to the application to decide about session based or object
based security for any given information flow.
3. Information Flows
This section gives an overview of information flows between the
entities in the architecture, and the use of access management
resources.
3.1. Message Sequences
The information flows in scope between the nodes (constrained to
constrained and constrained to less constrained) are described in
[I-D.gerdes-ace-actors]. Taking [RFC2904] as a starting point, there
are three authorization schemes, defining the message sequences for
the flow of request, response, and authorization data:
1. In the Push scheme, C first obtains authorization information
from AS and then transmits this data to RS together with its
request, and finally RS sends its reply. In this model RS does
not communicate with AS directly.
Seitz, et al. Expires December 31, 2015 [Page 7]
Internet-Draft CoRE Authorization June 2015
2. In the Pull scheme, C sends its request to RS directly, RS then
contacts AS in order to obtain authorization information, AS
provides authorization information, and finally RS sends back the
reply. In this model C does not communicate with AS directly.
3. In the Agent scheme, C sends its request to AS, which evaluates
C's access rights and, if authorized, executes the request on C's
behalf, transmitting RS's response back to C. In this model C
does not communicate with RS directly.
Depending on use case, different schemes may be more appropriate than
others. From a constrained-node network point of view we note the
following:
o The Push and Agent scheme requires C to connect to AS.
o The Pull and Agent scheme requires RS to connect to AS.
o The Pull scheme requires RS to handle two secure connections at
the same time (RS - AS and RS - C) in order to perform the real
time authorization check.
Considering processing and memory requirements of RS, the Push scheme
is more favorable than the Pull scheme.
The Agent scheme assumes constant connectivity with both C and RS and
is therefore not applicable to the constrained setting.
However, the publish-subscribe case from Section 2.2 is not covered
by any of the schemes so this memo defines a new scheme, called
Client-Pull.
4. In the Client-Pull scheme, RS first provides unconditional access
to a protected resource representation. C obtains this protected
resource representation and then contacts AS to obtain
authorization information (in this case cryptographic keys) for
access and verification of the resource representation. In this
model RS does not communicate with AS directly, and C does not
communicate with RS directly.
The Client-Pull scheme is only useful for GET access. However, it
offloads the RS considerably, since the RS neither receives any
requests from clients nor performs any access control verifications.
Furthermore it enables use cases, such as caching and publish-
subscribe, that can not be covered by the other schemes in a
satisfactory manner.
Seitz, et al. Expires December 31, 2015 [Page 8]
Internet-Draft CoRE Authorization June 2015
3.2. Access Management Resources
This section describes an approach for transferring authorization
information between the various entities in the architecture by
making RESTful requests to dedicated resources for access management.
The structure or naming of such "access management resources" is left
for a future version of this memo, and for simplicity we denote any
such resource "/authorize".
In this section we illustrate various message sequences for
transferring authorization information by means of requesting access
management resources. We assume, as in section 3.2 of
[I-D.gerdes-ace-dcaf-authorize], that the need for transferring
authorization information may be triggered by a request from C to RS
to access a resource. Figure 2 shows C making an access request (GET
/PUT/POST/DELETE) which cannot be granted by the RS because of
missing authorization information.
C RS
| |
| Request /resource |
| ------------------------> |
| <------------------------ |
| Unauthorized |
| |
Figure 2: Access request unauthorized.
Starting with the Pull scheme, if the RS can access the AS, then any
missing authorization information could be requested on the fly, see
Figure 3. The RS sends an authorization request in a specific
Authorization Request Format (ARF) to the /authorize resource at the
AS as detailed in Section 8 and receives authorization information in
a specific Authorization Information Format (AIF) in the response.
RS updates the stored authorization information based on the new
information and executes the client's resource request accordingly.
Note that C and RS need be mutually authenticated using pre-
established credentials in this scheme.
Seitz, et al. Expires December 31, 2015 [Page 9]
Internet-Draft CoRE Authorization June 2015
C RS AS
| | |
| Request /resource | |
| ------------------------> | |
| | POST /authorize ARF |
| | ------------------------> |
| | <------------------------ |
| | AIF |
| | |
| <------------------------ | |
| Granted | |
| | |
Figure 3: Pull Scheme
In use cases where the RS does not have connectivity with AS, or if
the RS cannot handle two secure connections at the same time, the
Push scheme provides an alternative, see Figure 4. C receives, in
the negative response to its resource request, information about
where to request the missing authorization information. In this case
it is C that requests the resource /authorize at the AS and receives
both authorization information, and client information in a specific
Client Information Format (CIF). The latter will be used by C to
establish communication security with RS. Next, C pushes the
authorization information to the /authorize resource at the RS. RS
updates the stored authorization information based on the new data
and confirms the change, after which C can repeat the resource
request to the RS with the new client information and authorization
information in place.
AS C RS
| | |
| | Request /resource |
| | ------------------------> |
| | <------------------------ |
| | Unauthorized |
| POST /authorize ARF | |
| <------------------------ | |
| ------------------------> | |
| AIF, CIF | |
| | |
| | POST /authorize AIF |
| | ------------------------> |
| | <------------------------ |
| | Changed |
| | |
| | Request /resource |
| | ------------------------> |
Seitz, et al. Expires December 31, 2015 [Page 10]
Internet-Draft CoRE Authorization June 2015
| | <------------------------ |
| | Granted |
| | |
Figure 4: Push Scheme
Note that in case there is connectivity between RS and AS, but RS has
not implemented the Pull scheme or cannot handle two secure
connections at the same time, then AS could POST the authorization
information to the /authorize resource of RS directly instead of
using C as intermediary node.
Also note that the authorization information needs to be integrity
protected during the transport between AS and RS. This is because
the client has access to it and would otherwise be able to change its
permissions. How this is done is described in Section 4.
Finally the Client-Pull scheme, which only requires C to request a
Protected Resource Representation from the RS, and client information
(e.g. cryptographic keys) from the AS.
AS C RS
| | |
| | GET /resource |
| | ------------------------> |
| | <------------------------ |
| | Protected Resource |
| | Representation |
| | |
| POST /authorize ARF | |
| <------------------------ | |
| ------------------------> | |
| CIF | |
| | |
Figure 5: Client-Pull Scheme
Note that the order of the information flows is different for the
different authorization schemes. The authorization scheme is defined
at design time, so an RS would typically support one specific message
sequence suitable for the particular application.
4. Communication Security
In this section we address the third sub-problem of Section 2.3, the
authentication and communication security problem, based on the
assumptions made in [I-D.gerdes-ace-actors]:
Seitz, et al. Expires December 31, 2015 [Page 11]
Internet-Draft CoRE Authorization June 2015
o AS and RS are assumed to have established security contexts (keys,
credentials, security protocols, parameters). How this was
established is out of scope for this work.
o AS is assumed to have a policy for how C is allowed to access the
resources of RS, including information for how to authenticate C,
such as a shared secret key, public key or other credential.
o Both session based and object based security solutions shall be
supported.
Since CoAP is the default communication protocol, DTLS [RFC6347] is
the default session based security protocol. DTLS MUST NOT be used
with untrusted intermediary nodes. For object security in
constrained environments, COSE [I-D.schaad-cose-msg] is the main
candidate. OSCOAP [I-D.selander-ace-object-security] defines a
profile of COSE, suitable for securing individual CoAP messages, and
two Modes of operation:
o Mode:PAYL for (CoAP) Payload confidentiality, integrity and replay
protection.
o Mode:COAP for additional protection of CoAP Headers (Code) and
Options (Uri-Path, Uri-Query etc.) and for securing request-
response pair.
4.1. AS - RS
The main purpose of this communication is to provide authorization
information from AS to RS. There are three communication patterns:
1. RS: POST /authorize to AS (ARF in request, AIF in response)
2. AS: POST /authorize to RS (AIF in request)
3. C: POST /authorize to AS (ARF in request, AIF in response)
followed by C: POST /authorize to RS (AIF in request)
Pattern 1. and 2. SHALL be protected by DTLS or COSE Mode:COAP,
leveraging the pre-established security context. In pattern 3.,
since C is an untrusted intermediary node, the authorization
information SHALL be protected end-to-end from AS to RS with COSE
Mode:PAYL, leveraging the pre-established credentials.
Pattern 2. with COSE Mode:COAP includes the case of POST via an
intermediary untrusted Forward Proxy, which in particular could be
the Client, if the Client supports Forward Proxy functionality.
Seitz, et al. Expires December 31, 2015 [Page 12]
Internet-Draft CoRE Authorization June 2015
In pattern 3. the use of transport layer security (DTLS) or CoAP
message security (Mode:COAP) is optional, since Mode:PAYL protected
authorization information is in itself a confidential, integrity and
replay protected token.
If the subsequent communication between C and RS is going to be
protected by DTLS, then an OPTIONAL optimization of the message
exchange is to replace "C: POST /authorize to RS (AIF in request)"
with a transfer of the protected authorization in the DTLS Handshake,
see Section 4.4.
4.2. AS - C
The main purpose of this communication is to provide client
information from the AS to the C. The communication pattern is:
o C: POST /authorize to AS to (ARF in request, CIF in response)
This pattern SHALL be protected by DTLS or COSE Mode:COAP, leveraging
out of band established credentials.
4.3. C - RS
This is the original resource request/response problem. Since there
may be no pre-established keys between C and RS, it is the purpose of
AIF and CIF to provide information for authentication and
communication security. There are two communication patterns:
1. The Client makes a request (GET/PUT/POST/DELETE /resource) to RS
and receives a response.
2. The Client makes a GET request to the RS, or a cache, or message
broker and unconditionally receives a protected resource
representation
Pattern 1. SHALL be protected by DTLS or COSE Mode:COAP, leveraging
the established keys or credentials in authorization information and
client information. Pattern 2. SHALL be protected with COSE
Mode:PAYL.
4.4. Authorization Information transfer in the DTLS Handshake
In certain situations, a session security protocol like DTLS
[RFC6347] can be used directly to send the authorization information
to the RS and optimize the message exchange. The authorization
information MAY be embedded in the DTLS handshake. In this case the
authorization information SHOULD be transferred using the TLS
supplemental data extension [RFC4680].
Seitz, et al. Expires December 31, 2015 [Page 13]
Internet-Draft CoRE Authorization June 2015
Figure 6 illustrates this approach for a DTLS handshake. The
messages marked with * are optional depending on the type of
handshake.
Client Resource Server
------ ---------------
ClientHello (with extensions) ------->
<------- HelloVerifyRequest
ClientHello (with extensions) -------->
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
SupplementalData (AIF)
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
Figure 6: Authorization information Transfer in Handshake
The SupplementalDataType value SHOULD be set to 16386 (authz_data).
The Resource Server MUST verify the validity of the received
authorization information before accepting any application data from
the client.
The RS MUST verify that the authorization information transmitted in
the SupplementalData message is bound to the same key as the one the
Client used in the handshake (see Section 6 for the subject binding
in the AIF). Note that this also enables AS-asserted authorization
of the DTLS handshake.
Seitz, et al. Expires December 31, 2015 [Page 14]
Internet-Draft CoRE Authorization June 2015
5. Authorization Request Format
Authorization requests are represented in the Authorization Request
Format (ARF). They are produced either by the Client (Push, Client-
Pull) or the RS (Pull) and consumed by the AS. The ARF allows to
specify requests for several actions on several resources in a single
message.
5.1. ARF Information Model
The general information that needs to be contained in the ARF is the
following:
o The identifier of the subject of this authorization request
(usually the Client).
o The identifier of the host that provides the resources that are
requested in this authorization request (CoAP option URI-host).
Note that the ARF does not allow to specify more than one host.
o The requested resources and actions on these resources.
The resources can be represented by the "path-absolute" part of the
URI (In CoAP this would be the Uri-Path options).
5.2. ARF Data Model
For representing the ARF discussed in Section 5.1 the following steps
are performed:
o The subject identifier is encoded in a map that maps the type of
the identifier to its value. The type could e.g. be a raw public
key, or the key identifier of a secret key, or a X.509
distinguished name.
o The host identifier is encoded as second parameter.
o The third parameter is array of resource-actions tuples. The
structure of the entries is specified as follows:
* Requests that affect the same resource are merged into a single
entry that specifies the union of the permitted actions.
* The actions GET, POST, PUT, DELETE are represented as integer
0, 1, 2, and 3 respectively.
Seitz, et al. Expires December 31, 2015 [Page 15]
Internet-Draft CoRE Authorization June 2015
* The set of numbers is converted into a single number by taking
each number to the power of two and computing the inclusive OR
of the binary representations of all the numbers.
* Each entry is an array, containing the resource identifier, and
the number representing the actions.
This information can then be represented in CBOR [RFC7049] or JSON
[RFC7159] as an array of the elements listed above. An example JSON
representation of the ARF is given in Figure 7.
[{"subjectKeyId":"someKeyId1"}, "rs.example.com",
[["sensors/tempC",1], ["conf/sleepInterval", 5],
["conf/sleepDuration", 5]]]
Figure 7: Example JSON representation of an access request
6. Authorization Information Format
Addressing the first sub-problem of Section 2.3, this section defines
an Authorization Information Format (AIF) for encoding authorization
information. AIF instances are either consumed directly by an RS
(Pull), or packaged into a COSE Mode:PAYL token and sent to the
Client, who forwards the token to the RS (Push).
This memo defines two different types of AIF that can be used by an
AS:
o One or more access control decisions, listing one or more tuples
of actions and resources similar to a capability list. This is a
simple super-set of the ARF.
o Group memberships for the Client. This type of AIF is used in a
configuration where the RS stores access control lists (ACLs)
corresponding to a number of groups. The RS will resolve a
specific group to a specific set of ACLs which are then applied to
the request.
6.1. AIF Information Model
The general information that needs to be contained in the AIF is the
following:
o The identifier of the subject of this authorization information
(usually the Client)
Seitz, et al. Expires December 31, 2015 [Page 16]
Internet-Draft CoRE Authorization June 2015
o The identifier of the host that provides the resources for which
this authorization information applies (CoAP option URI-host).
Note that the AIF does not allow to specify more than one host.
If the authorization information represents one or more group
memberships, the only other information needed is the group names.
If the authorization information represents access control decisions,
the affected resources and the actions are needed.
Authorization decisions can also MAY contain local conditions, that
can only be evaluated by the RS at access time (e.g.
"NotBefore='09:00', NotAfter='18:00'"). This memo does not define
the format of these local conditions, as it is expected that these
will be application specific. The RS MUST reject any authorization
information that contains local conditions that it does not
understand.
6.2. AIF Data Model
For representing the AIF discussed in Section 6.1 the following steps
are performed:
o The subject identifier is encoded in a map that maps the type of
the identifier to its value. The type could e.g. be a raw public
key, or the key identifier of a secret key, or a X.509
distinguished name. Section 4.3 defines how this is used to bind
the authorization information to a specific client.
o The host identifier is encoded as second parameter.
o The third parameter is either an array of access control
decisions, or if group memberships are asserted, a map, mapping
the key 'grp' to the array of group names. The structure of the
entries in the access control decision array is the same as for
the ARF, except that is may also contain local conditions
represented as strings.
o Each entry is an array, containing the resource identifier, the
number representing the actions, and optionally the local
conditions.
This information can then be represented in CBOR [RFC7049] or JSON
[RFC7159] as an array of the elements listed above. An example JSON
representation of the AIF with access control decisions is given in
Figure 8, while an example of the AIF containing group membership
assertions is shown in Figure 9.
Seitz, et al. Expires December 31, 2015 [Page 17]
Internet-Draft CoRE Authorization June 2015
[{"SubjectKeyId":"someKeyId2"}, "rs.example.com",
[["actuators/doorLock", 5, "not-before:'07:00';not-after:'18:00'"]]]
Figure 8: Example JSON representation of access control decisions
[{"SubjectPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJG4m93
ED8tPK2CpkhrrtKNx1vXDbml4Fun1628Qkl1U_aIB5zUfqPwaacznbqoMJ6vQVZ7
4X9HpfynouLK_ujw"}, "rs.example.com",
{"grp":["admin","user"]}]
Figure 9: Example JSON representation of group memberships
Note that different subject identifiers might be used in instances of
the ARF and the AIF in the same Push scheme. This is due to the fact
that the credential the Client uses towards the AS may not be the
same as the one later used towards the RS.
7. Client Information Format
This section addresses the second sub-problem of Section 2.3, and
describes a format for client information. Two types of client
information are defined in this section:
1. Client Information related to the Push scheme, which encodes keys
and related parameters, that allow the Client to communicate
securely with the RS and prove that it is the legitimate subject
of some authorization information.
2. Client Information related to the Client-Pull scheme represent
keys and related parameters that allow the Client to access and
verify a resource representation protected with object security.
For the Push scheme, the CIF must be able to encode instructions to
the Client on how secure the connection between Client and RS, and
how to transfer the authorization information to the RS.
7.1. CIF for the Push scheme
The encoding of the client information in a Push scheme is an array
with the following elements:
1. The type of this client information, here the string 'push'.
2. The method to be used for securing the transfer. Either the
string 'coaps' (for CoAP over DTLS) or the string 'oscoap' (for
CoAP with object security).
Seitz, et al. Expires December 31, 2015 [Page 18]
Internet-Draft CoRE Authorization June 2015
3. The method of transferring the authorization information. Either
the string 'suppl' (for supplemental data) or the URI of the
resource on the RS to which the authorization information should
be transferred.
4. The type of key to be used for coaps of oscoap. This can either
be a raw public key denoted by the string 'rpk', or a pre-shared
key denoted by the string 'psk'.
5. If the key type was 'psk', then the next element is the
identifier of this key. If the key type was 'rpk' this element
is the raw public key of the RS. The encoding here should follow
the SubjectPublicKeyInfo defined in RFC 7250 [RFC7250].
6. If the key type was 'psk', then the next element is the pre-
shared key that the Client should use either for DTLS or object
security. The encoding of this key depends on the representation
format. For CBOR it is raw bytes, for JSON it is Base64 encoded
bytes.
Figure Figure 10 shows an example representation of the CIF for a
Push scheme, using JSON.
["push", "oscoap", "/authorize", "psk",
"someKeyId", "Z4LXBNbOeeOJOYglBLb4pg"]
Figure 10: CIF example for the Push scheme
7.2. CIF for the Client-Pull scheme
The encoding of the CIF for a Client-Pull scheme is an array with the
following elements:
1. The type of this client information, here the string 'cpull'.
2. The public key of the RS used to sign the resource
representation. The encoding here should follow the
SubjectPublicKeyInfo defined in RFC 7250 [RFC7250].
3. The secret key used to encrypt the resource representation. The
encoding of this key depends on the representation format. For
CBOR it is raw bytes, for JSON it is Base64 encoded bytes.
Note that further parameters are provided in the secure object
itself, such as e.g. algorithm identifiers and initialization
vectors.
Seitz, et al. Expires December 31, 2015 [Page 19]
Internet-Draft CoRE Authorization June 2015
Figure Figure 11 shows an example representation of the CIF for a
Client-Pull scheme, using JSON.
["cpull", "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJG4m93
ED8tPK2CpkhrrtKNx1vXDbml4Fun1628Qkl1U_aIB5zUfqPwaaczn
bqoMJ6vQVZ74X9HpfynouLK_ujw", "eyJhbGciOiJIUzI1NiIsIm"]
Figure 11: CIF example for the Client-Pull scheme
8. Message Processing
This section puts together the pieces from previous sections and
specifies more in detail the processing steps for the authorization
schemes defined in Section 3.
8.1. Unauthorized Access Attempt
All schemes can start with the Client requesting access at the RS
without any established authorization information. Depending on
which authorization scheme (Push, Pull, Client Pull) the RS has
implemented, the RS can either:
o Query the AS using the Pull scheme.
o Instruct the Client to use the Push scheme.
o In case the Client-Pull scheme, provide an encrypted
representation of the resource that was requested, without
performing any access control.
If the RS wants the Client to use the Push scheme, the RS MUST
respond with an error message using the response code 4.01
(Unauthorized). The error message MUST contain information that
allows the Client to locate the AS responsible for the requested
resource, and other information needed to make an Authorization
Request. For example:
4.01 Unauthorized
Content-Format: application/json
["oscoap", "as.example.com/authorize"]
The response payload MAY be protected, e.g. signed with the private
key of RS, using COSE Mode:PAYL. The response MAY include
authentication information of AS, such as the (hash of the) public
key of AS. The public key of RS or AS be retrieved in different ways
e.g. from a Resource Directory
Seitz, et al. Expires December 31, 2015 [Page 20]
Internet-Draft CoRE Authorization June 2015
The initial exchange described in this section may be omitted, and
the client can start with the Authorization Request to AS as
described in Section 8.2 if the Client has obtained information about
the relevant AS in some other way, e.g. using a Resource Directory.
If the RS has access to authorization information about the Client,
but it does not apply to the requested resource, the RS MUST answer
with an error message using the response code 4.03 (Forbidden). If
the RS has authorization information for the Client that applies to
the requested resource, but that does not cover the requested action,
the RS MUST reply with an error message using the response code 4.05
(Method Not Allowed).
8.2. Authorization Request
Either the Client (Push scheme) or the RS (Pull scheme) can POST an
request to the /authorize resource at the AS, specifying the Client's
request(s) for authorization using the ARF defined in Section 5.
Upon receiving a POST request to /authorize, the AS MUST perform the
following steps:
o Ensure that the request was received over a secure channel (DTLS)
or uses object security. If object security was used the AS MUST
perform the necessary verifications.
o Ensure that the requesting party is authenticated. This is either
the Client (as described in Section 4.2) or the RS (as described
in Section 4.1). For DTLS this is supposed to have happened
during the handshake, for object security this is accomplished by
a signature or MAC over the request, produced by the requesting
party.
o Control that the requesting party is authorized to submit this
kind of authorization request
If the integrity verification fails, the AS MUST respond with an
error message using the response code 4.00 (Bad Request)
If the requesting party is not correctly authenticated, the AS MUST
respond with an error message using the response code 4.01
(Unauthorized).
If the requesting party is not authorized to perform this request for
authorization information, the AS MUST respond with an error message
using the response code 4.03 (Forbidden).
Seitz, et al. Expires December 31, 2015 [Page 21]
Internet-Draft CoRE Authorization June 2015
If the evaluation is successful the AS MUST respond with a 2.05
(Content) message code. The response can contain one of the
following payloads:
o If any part of the access requested by the Client was not
authorized, the payload MUST be empty.
o If all parts of the access requested by the Client were
authorized, the payload MUST be either in AIF, CIF or both,
depending on the authorization scheme:
1. If the Authorization Scheme is Pull, then the payload MUST be in
AIF, as defined in Section 6.
2. If the Authorization Scheme is Client-Pull, then the payload MUST
be in CIF as defined in Section 7.
3. If the Authorization Scheme is Push, then the payload MUST be an
array containing first CIF, then AIF, as defined in Section 7 and
Section 6 respectively.
8.3. Receiving Authorization Information
The RS may receive authorization information in a response to a POST
to an Authorization Request as described in the previous section.
As an alternative this section describes how to push this information
to the RS. This is done with a POST of the authorization information
to the /authorize resource on the RS. This request may come from the
Client in the Pull scheme, as defined in Pattern 3 in Section 4.1.
The request may also come from the AS directly.
Figure 12 illustrates the successful execution of such a request.
C/AS RS
| |
| POST /authorize AIF |
| ------------------------> |
| <------------------------ |
| 2.01 Created |
| |
Figure 12: POST AIF to /authorize
A third OPTIONAL method is to include the authorization information
in a DTLS handshake as supplemental data, as described in
Section 4.4.
Seitz, et al. Expires December 31, 2015 [Page 22]
Internet-Draft CoRE Authorization June 2015
Irrespective of how the authorization information is received by the
AS, upon receiving it, RS MUST verify that it is valid, by doing the
following:
o Check that the authorization information comes from a trusted AS
o Check that the host in the authorization information corresponds
to itself
o Check that the authorization information is not expired or
revoked, if the object security encapsulation allows this
o Verify the integrity of the authorization information
If the validation succeeds, RS MUST store the authorization
information and use it to determine the authorization of future
requests.
If the authorization information is invalid, RS MUST respond with an
error message using the error code 4.03 (Forbidden).
8.4. Receiving Client Information
The Client receives client information in a response to a POST of an
authorization request to an AS as described in Section 8.2. The
Client MUST make sure that it is communicating with a trusted AS. If
the communication is protected with COSE Mode:COAP, the Client MUST
verify the authenticity and integrity of the client information,
before using it.
8.5. Resource Request and Response
The final resource request is handled differently based on which
authorization scheme is implemented. In the Pull scheme this is an
unauthorized request as described in Section 8.1. For resources
configured to use the Client-Pull scheme for GET access, the RS MUST
unconditionally provide an encrypted and signed representation of the
requested resource to any requesting Client.
In the Push scheme the RS MUST perform the following steps:
o If the communication is secured with DTLS, verify that the
handshake included client authentication. If the communication is
protected with Mode:COAP, verify the object security of the
request.
o Verify the present authorization information to see if it has data
that matches the Client, the requested resource, and the actions
Seitz, et al. Expires December 31, 2015 [Page 23]
Internet-Draft CoRE Authorization June 2015
requested on that resource. Note specifically that the binding
between the authorization information and the Client is provided
either by comparing with the keys used in the DTLS handshake, or
with the keys used for object security of the request.
o If some matching authorization information contains local
conditions, verify that these are fulfilled.
If any of these verifications fail, the RS treat the request as
specified in Section 8.1.
If all of these verifications succeed, the RS MUST process the
request as required by the underlying application.
If the request was protected with Mode:COAP, the RS MUST follow the
response protecting scheme for this mode.
9. Security Considerations
The entire document is about security. Security considerations
applicable to authentication and authorization in RESTful
environments provided in OAuth 2.0 [RFC6749] apply to this work, as
well as the security considerations from [I-D.gerdes-ace-actors].
10. IANA Considerations
This document has no actions for IANA yet.
11. Acknowledmgents
Some of the ideas of this document were originally described in a now
expired Internet Draft: draft-selander-core-access-control-01. The
authors would also like to thank Carsten Bormann, Stefanie Gerdes and
Olaf Bergmann for the inspiration drawn from draft-bormann-core-ace-
aif [I-D.bormann-core-ace-aif] and [I-D.gerdes-ace-dcaf-authorize].
This work has further drawn inspriation from [OSCAR] which presents
another scheme for securing resource request and response using
object security and where access key transport is performed by means
of RESTful requests to dedicated resources.
Seitz, et al. Expires December 31, 2015 [Page 24]
Internet-Draft CoRE Authorization June 2015
12. References
12.1. Normative References
[I-D.schaad-cose-msg]
Schaad, J., "CBOR Encoded Message Syntax", draft-schaad-
cose-msg-00 (work in progress), June 2015.
[I-D.selander-ace-object-security]
Selander, G., Mattsson, J., and L. Seitz, "March 9, 2015",
draft-selander-ace-object-security-01 (work in progress),
March 2015.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4680] Santesson, S., "TLS Handshake Message for Supplemental
Data", RFC 4680, October 2006.
[RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer
Security Version 1.2", RFC 6347, January 2012.
[RFC7250] Wouters, P., Tschofenig, H., Gilmore, J., Weiler, S., and
T. Kivinen, "Using Raw Public Keys in Transport Layer
Security (TLS) and Datagram Transport Layer Security
(DTLS)", RFC 7250, June 2014.
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
Application Protocol (CoAP)", RFC 7252, June 2014.
12.2. Informative References
[I-D.bormann-core-ace-aif]
Bormann, C., "An Authorization Information Format (AIF)
for ACE", draft-bormann-core-ace-aif-02 (work in
progress), March 2015.
[I-D.gerdes-ace-actors]
Gerdes, S., Seitz, L., Selander, G., and C. Bormann, "An
architecture for authorization in constrained
environments", draft-gerdes-ace-actors-05 (work in
progress), April 2015.
[I-D.gerdes-ace-dcaf-authorize]
Gerdes, S., Bergmann, O., and C. Bormann, "Delegated CoAP
Authentication and Authorization Framework (DCAF)", draft-
gerdes-ace-dcaf-authorize-02 (work in progress), March
2015.
Seitz, et al. Expires December 31, 2015 [Page 25]
Internet-Draft CoRE Authorization June 2015
[I-D.ietf-ace-usecases]
Seitz, L., Gerdes, S., Selander, G., Mani, M., and S.
Kumar, "ACE use cases", draft-ietf-ace-usecases-04 (work
in progress), June 2015.
[OSCAR] Vucinic, M., Tourancheau, B., Rousseau, F., Duda, A.,
Damon, L., and R. Guizzetti, "OSCAR: Object security
architecture for the Internet of Things", Ad Hoc Networks
Vol. 32, September 2015.
[RFC2904] Vollbrecht, J., Calhoun, P., Farrell, S., Gommans, L.,
Gross, G., de Bruijn, B., de Laat, C., Holdrege, M., and
D. Spence, "AAA Authorization Framework", RFC 2904, August
2000.
[RFC4949] Shirey, R., "Internet Security Glossary, Version 2", RFC
4949, August 2007.
[RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC
6749, October 2012.
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object
Representation (CBOR)", RFC 7049, October 2013.
[RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data
Interchange Format", RFC 7159, March 2014.
[RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for
Constrained-Node Networks", RFC 7228, May 2014.
[RFC7231] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
(HTTP/1.1): Semantics and Content", RFC 7231, June 2014.
Appendix A. Examples
The following examples show an overview the different authorization
schemes presented in Section 3. The notation is as follows:
A -> B : POST {blah} (request)
\__ __/ \_ _/ \__ __/ \___ ___/
V V V V
Communication RESTful Payload Type of
partners and method payload
direction of
communication
Messages protected with COSE Mode:COAP are denoted by adding
'CoseC(Key)', where 'Key' is the key used to protect the message.
Seitz, et al. Expires December 31, 2015 [Page 26]
Internet-Draft CoRE Authorization June 2015
Payload protected with COSE Mode:PAYL is denoted by
'CoseP(Key){payload}', where 'Key' is the key used to protect the
payload.
Note that we use POST to request authorization information instead of
GET, since with the latter, the request would need to be transported
in CoAP options (e.g. Uri-Query), and it could potentially become
larger than the maximum CoAP packet size. Since CoAP options can not
be fragmented this would be extremely problematic.
Example A (using the Push scheme)
1. C -> RS : GET /sensors/tempC {} (request)
2. RS -> C : 4.01 Unauthorized {"oscoap", "as.example.com/
authorize"} (response)
3. C -> AS : POST /authorize CoseC(Key_C-AS) { [{"subjectKeyId
":"Key_C-AS"}, "rs.example.com", [['sensors/tempC', 1(= GET)]]] }
(ARF)
4. AS -> C : 2.05 CoseC(Key_C-AS) { ["push", "oscoap", "/authorize",
"psk", "someKeyId", "Z4LXBNbOeeOJOYglBLb4pg"], CoseP(Key_AS-RS){
[{"SubjectKeyId":"someKeyId"}, "rs.example.com", [["sensors/
tempC", 1(= GET)]]] } } (CIF, AIF)
5. C -> RS : POST /authorize CoseC(someKeyId) { CoseP(Key_AS-
RS){[{"SubjectKeyId":"someKeyId"}, "rs.example.com", [["sensors/
tempC", 1(= GET)]]]} } (AIF)
6. C -> RS : GET /sensors/tempC CoseC(someKeyId) {} (request)
7. RS -> C : 2.05 CoseC(someKeyId) {37.5} (response)
Example B (using the Pull scheme)
1. C -> RS : POST /actuators/doorLock CoseC(someClientKey) {open}
(request)
2. RS -(DTLS)-> AS : POST /authorize {
[{"subjectKeyId":"someClientKey"}, "rs.example.com", [['actuators
/doorLock', 2(= POST)]]] } (ARF)
3. AS -(DTLS)-> RS : 2.05 { [{"subjectKeyId":"someClientKey"},
"rs.example.com", [['actuators/doorLock', 2(= POST)]]] } (AIF)
4. RS -> C : 2.04 (response)
Seitz, et al. Expires December 31, 2015 [Page 27]
Internet-Draft CoRE Authorization June 2015
Example C (using the Client-Pull scheme)
1. C -> RS : GET /sensors/tempC {} (request)
2. RS -> C : 2.05 { CoseP(someKey){39.2} } (response)
3. C -> AS : POST /authorize CoseC(Key_C-AS) { [{"subjectKeyId
":"Key_C-AS"}, "rs.example.com", [['sensors/tempC', 1(= GET)]]] }
(ARF)
4. AS -> C : 2.05 CoseC(Key_C-AS) { ["cpull", "RS_PublicKey",
"someKey] } (CIF)
The authorizon schemes defining these flows are introduced in
Section 3, and detailed in Section 8. The message structures for
ARF, AIF and CIF are introduced in Section 5, Section 6, and
Section 7.
Authors' Addresses
Ludwig Seitz
SICS
Scheelevaegen 17
Lund 223 70
SWEDEN
Email: ludwig@sics.se
Goeran Selander
Ericsson
Faroegatan 6
Kista 164 80
SWEDEN
Email: goran.selander@ericsson.com
Malisa Vucinic
STMicroelectronics
850 Rue Jean Monnet
Crolles 38920
FRANCE
Email: malisa.vucinic@st.com
Seitz, et al. Expires December 31, 2015 [Page 28]