Internet DRAFT - draft-hunt-oauth-scim-client-reg
draft-hunt-oauth-scim-client-reg
OAuth Working Group P. Hunt, Ed.
Internet-Draft Oracle Corporation
Intended status: Standards Track M. Ansari
Expires: January 06, 2014 Cisco
T. Nadalin
Microsoft
July 05, 2013
OAuth 2.0 SCIM Client Registration Profile
draft-hunt-oauth-scim-client-reg-00
Abstract
This specification defines a SCIM endpoint used to register and
provision OAuth 2.0 clients to access a OAuth 2.0 protected service
API in a just-in-time fashion. This draft profiles how a OAuth 2.0
client may use SCIM and OAuth 2.0 to manage its registration.
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 January 06, 2014.
Copyright Notice
Copyright (c) 2013 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
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
Hunt, et al. Expires January 06, 2014 [Page 1]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Typical Registration Flow . . . . . . . . . . . . . . . . 6
2. SCIM OAuth Client Resource Schema . . . . . . . . . . . . . . 8
2.1. Singular Attributes . . . . . . . . . . . . . . . . . . . 9
2.2. Multi-valued Attributes . . . . . . . . . . . . . . . . . 12
2.3. Client Representation . . . . . . . . . . . . . . . . . . 13
2.4. Relationship Between Grant Types and Response Types . . . 13
2.5. Human Readable Client Metadata . . . . . . . . . . . . . 14
2.6. Registration Server Processing Rules . . . . . . . . . . 15
3. SCIM Interaction Profile . . . . . . . . . . . . . . . . . . 16
3.1. Adding A Registration . . . . . . . . . . . . . . . . . . 16
3.1.1. Anonymous Registration . . . . . . . . . . . . . . . 16
3.1.2. Pre-Authorized Registration . . . . . . . . . . . . . 17
3.2. Reading A Registration . . . . . . . . . . . . . . . . . 18
3.3. Modifying A Registration . . . . . . . . . . . . . . . . 20
3.4. Deleting A Registration . . . . . . . . . . . . . . . . . 20
3.5. Expired Registration . . . . . . . . . . . . . . . . . . 20
4. Software Assertion Token . . . . . . . . . . . . . . . . . . 21
4.1. Software Assertion Requirements . . . . . . . . . . . . . 21
5. Server Schema Configurations . . . . . . . . . . . . . . . . 22
5.1. Resource Type . . . . . . . . . . . . . . . . . . . . . . 22
5.2. Schema Representation . . . . . . . . . . . . . . . . . . 22
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26
6.1. OAuth Token Endpoint Authentication Methods Registry . . 26
6.1.1. Registration Template . . . . . . . . . . . . . . . . 27
6.1.2. Initial Registry Contents . . . . . . . . . . . . . . 27
7. Security Considerations . . . . . . . . . . . . . . . . . . . 28
8. Normative References . . . . . . . . . . . . . . . . . . . . 30
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 31
Appendix B. Document History . . . . . . . . . . . . . . . . . . 31
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31
1. Introduction
Hunt, et al. Expires January 06, 2014 [Page 2]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
The OAuth 2.0 Authorization Framework [RFC6749] is a framework by
which client applications are authorized by authorization servers to
access software API servers using access tokens issued by a token
server. As a framework, OAuth 2.0 enables many different flows by
which a client application may obtain an access token including
delegated authorization from a user. Most of these flows require
that each client have a client identifier and some means of
authentication.
In order for an OAuth 2.0 client to work with an OAuth authorization
server, it must have previously obtained a client identifier
(client_id) and a client credential (such as a password, secret, or
authentication token). The OAuth 2.0 authorization framework does
not define how the relationship between the client and the
authorization server is initialized, or how a given client is
assigned a unique client identifier. Further, because many clients
(such as mobile applications) are copied for wide distribution,
special security considerations are defined for those clients known
as "public" clients. Public clients represent a high risk when
hundreds to millions of clients share the same authentication
credential and client_id. This draft provides a means by which
public clients can be issued unique client identifiers to become
confidential clients.
This draft profiles using SCIM [I-D.ietf-scim-api] as a just-in-time
identity management system enabling every client to register itself
with a designated SCIM endpoint to obtain a unique OAuth 2.0
[RFC6749] client_id and authentication credential. In addition to
accepting a registration request, the profile specifies how the
endpoint can be used to dynamically assign a client identifier, and
optionally a client credential. This specification defines OAuth 2.0
client schema and objects accessible through SCIM. The OAuth 2.0
client schema includes metadata about the client software being
registered as well as OAuth 2.0 protocol metadata required for the
successful operation of a client in an OAuth 2.0 protected
environment.
Finally, this specification also defines how a publisher of software
services APIs deployed in multiple environments may issue a software
assertion that may be used by the registration endpoint to recognize
and accept client software. Additionally, the specification also
defines a mechanism for pre-approval of client software within an
administrative domain.
1.1. Notational Conventions
Hunt, et al. Expires January 06, 2014 [Page 3]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
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].
Unless otherwise noted, all the protocol parameter names and values
are case sensitive.
1.2. Terminology
This specification uses the terms "Access Token", "Refresh Token",
"Authorization Code", "Authorization Grant", "Authorization Server",
"Authorization Endpoint", "Client", "Client Identifier", "Client
Secret", "Protected Resource", "Resource Owner", "Resource Server",
and "Token Endpoint" defined by OAuth 2.0 [RFC6749].
In RFC6749, a client identifier was typically given to a developer
for inclusion in the software. As a result, client identifier often
had two different meanings when comparing public and confidential
clients. A confidential client tended to be deployed in limited
locations on server platforms and thus a client identifier was
associated with a client instance. Public clients on the other hand
are deployed in many locations. In these cases, the client
identifier has closer association to the software being used rather
than the instance.
In this specification, "client identifier" is re-scoped more narrowly
to imply an instance of client software (or a cluster). A new term,
"software identifier" refers to a packaging of a software that is
deployed in one or more location. Thus for every software
identifier, there may be one or more client identifiers.
This specification defines the following additional terms:
Client Registration Endpoint A SCIM endpoint through which a client
can be registered. The means by which the URL for this endpoint
are obtained (discovery) are out of scope for this specification.
Client Configuration Endpoint An OAuth 2.0 protected SCIM Resource
endpoint through which registration information for a registered
client can be managed. This URL for this endpoint is returned by
the authorization server in the client registration response or
may be discovered by performing a SCIM GET query.
Hunt, et al. Expires January 06, 2014 [Page 4]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
Deployment Organization An administrative security domain under
which, a software API is deployed and protected by an OAuth 2.0
framework. In simple cloud deployments, the software API
publisher and the deployment organization may be the same. In
other scenarios, a Software Publisher may be working with many
different deployment organizations.
Software API Deployment A deployment instance of a software API that
is protected by OAuth 2.0 in a particular deployment organization
domain. For any particular software API, there may be one or
more deployments. A software API deployment typically has an
associated OAuth 2.0 authorization server endpoint as well as a
client registration endpoint. The means by which endpoints are
obtained (discovery) are out of scope for this specification.
Software API Publisher The organization that defines a particular
web accessible API that may deployed in one or more deployment
environments. A publisher may be any commercial, public,
private, or open source organization that is responsible for
publishing and distributing software that may be protected via
OAuth 2.0. A software API publisher may issue software
assertions which client developers use to distribute with their
software to facilitate registration.
Client Developer The person or organization that builds a client
software package and prepares it for distribution. A client
developer may obtain a software assertion from a software
publisher for the purposes of facilitating client registration.
Software Assertion A signed OAuth 2.0 Bearer Token [OAuth.JWT]
issued by an software API publisher that asserts information
about the client software (see Section 4) that may be used by
registration system to qualify clients for eligibility to
register. Typically a client developer registers with a software
API publisher to obtain a software assertion that will be
distributed with all copies of a client application and may be
used during the registration process to identify the client to
the client registration endpoint.
Initial Access Token An OAuth 2.0 access token is typically issued
by a software API deployment's security domain and used by the
client at the registration endpoint in order to register a
client. In an authenticated registration, the token is usually
issued by the same security domain as the Service API the client
is registering for. The content, structure, generation, and
validation of this token are out of scope for this specification.
The SCIM registration endpoint security policy can use this token
to verify that the presenter is allowed to dynamically register a
Hunt, et al. Expires January 06, 2014 [Page 5]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
client. This token may be shared between multiple instances of a
client to allow each client to register separately, thereby
letting the authorization server use this token to tie multiple
instances of registered clients (each with their own distinct
client identifier) back to the party to whom the initial access
token was issued.
Registration Access Token A registration access token is an optional
token a registration server may issue for the purpose of
supporting server initiated rotation of client credentials. If
client credentials are revoked or expired, the registered client
may use a provided registration access token to refresh its
registration and obtain new client credentials. When doing this,
the client does not need to obtain an access token.
1.3. Typical Registration Flow
+------------+ +--------------+
| Client App +-(A)---------------------------------->| Software API |
| Developer | [Register] | Publisher |
| |<--------------------------------------+ |
+-----+------+ +--------------+
|
v
+------------+
+ Builds App |
|Distribution| [Package & Distribute]
+-----+------+ +--------------+
(B) +---(C)-----------------------------------+ Pre-reg Auth |
| | +--------------+
v V
+------------+ +--------------+
| +-(D)-----------------------------------> |
| | [POST/Register-Add] | |
| |<--------------------------------------+ |
| | +-----------+ | OAuth2 |
| +-(E)------------->| OAuth2 AS | | SCIM JIT |
| Client App | [Token Request] | Token | | Registration |
| Deployment |<-----------------+ Endpoint | | Endpoint |
| Instance | +-----------+ | |
| +-(F)---------------------------------->| |
| | [PATCH/Update][PUT/Replace][GET/Read] | |
| |<--------------------------------------+ |
| | | |
| | | |
| +-(G)---------------------------------->| |
| | [DELETE/Unregister] | |
| |<--------------------------------------+ |
Hunt, et al. Expires January 06, 2014 [Page 6]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
+------------+ +--------------+
Figure 1: Figure 1: Registration Lifecycle Flow
The abstract OAuth 2.0 SCIM JIT Client Registration flow illustrated
in Figure 1 describes the interaction between a software API
publisher, a client developer, a deployed client software instance
and the software API deployment registration services in this
specification. This figure does not demonstrate error conditions.
This flow includes the following steps:
(A) Optionally, a client developer registers the clent application
with a software API publisher. The software publisher, upon
approval, generates a signed software assertion that is returned
to the developer. While the software assertion is defined by
this specification, the process of issuance is out-of-scope and
is likely a web workflow the developer follows with the
publisher.
(B) The client developer packages the client software with the signed
software assertion and distributes the client application. The
method for doing this is out-of-scope of this specification.
(C) Upon receiving a client application software distribution, a
deploying organization may assign an initial access token, that
can be used to authenticate a particular distribution of client
software for use within the deploying organization's
administrative domain. The mechanism for obtaining an initial
access token and distributing it with a set of client software
instances is out of scope of this application. One example might
be a token supplied during the installation process of a client
software, or it may inserted within a locally re-packaged
distribution of the client application.
(D) A client application performs an HTTP POST of a "Client" of a
JSON structured resource to the registration endpoint. If the
client received an iInitial access token in (C), it includes it
in the HTTP Authorization field, otherwise, the registration is
treated as an "anonymous" POST. An optional software assertion,
received in (A), is included in the SCIM Client resource JSON
being posted.
Upon successful registration, the SCIM Server returns a copy of
the successful registration, including an assigned "client_id"
and client credential (e.g. "client_secret"). In order for the
client to access and update its registration in the future, an
HTTP "Location" (client configuration endpoint) is returned
specifying the location of the created SCIM resource.
Hunt, et al. Expires January 06, 2014 [Page 7]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
(E) As with any OAuth 2.0 protected resource, before a client may
access and update its registration, the OAuth 2.0 client MUST
obtain an access token. If the client received a "registration
access token" in step (D), the client MAY use it. Alternatively,
the client obtains an access token using the normal OAuth 2.0 a
client credential flow section 4.3 [RFC6749] to obtain an access
token with scope "urn:oauth:scim:api:scope:registration".
(F) The Client or Developer optionally calls the client configuration
endpoint with a SCIM GET, PUT or PATCH request using the access
token obtained in (E). Upon reading and or updating client
registration data, a SCIM registration endpoint may choose to
rotate the client credential.
(G) The Client or Developer optionally calls the client configuration
endpoint with a Delete request using the access token issued in
(E).
Clients that need to register for more than one service API should
typically make a separate registration request for each API being
registered.
2. SCIM OAuth Client Resource Schema
This specification defines a new SCIM resource type known as a
"Client" identified using the URI
"urn:scim:schemas:oauth:Client:1.0". [[Note include in IANA
considerations]]
For each attribute defined, a qualifier (OPTIONAL, RECOMMENDED,
REQUIRED) is included that indicates the usage requirement for the
client. If the word "READ-ONLY" is used, it shall mean the attribute
SHOULD be server generated. String attributes and mult-valued
attributes are based on the attribute types defined in Section 3.1
and 3.2 [I-D.ietf-scim-core-schema]. Unless otherwise stated, ALL
client schema attributes are String based values. For example, URIs,
email addresses, identifiers, are all defined as SCIM String
Attributes.
Extensions and profiles of this specification MAY expand this list.
Authorization servers MUST accept all fields in this schema. The
authorization server MUST ignore any additional parameters sent by
the client that it does not understand. Clients MAY ignore
additional parameters returned by the Server that the client does not
understand.
Hunt, et al. Expires January 06, 2014 [Page 8]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
2.1. Singular Attributes
The following is a list of attributes that MUST have only a SINGLE
value.
client_id OPTIONAL. An identifier whose value SHOULD be unique for
EACH instance registered to a registration server. The value
SHOULD be assigned by the registration endpoint on successful
completion of the registration. While many clients may share a
single software_id, each client instance SHOULD have a unique
client_id. If a client registration expires or is revoked, the
client MAY provide its previous registration value for continuity
purposes (see Section 3.5).
software_assertion
OPTIONAL. A value containing a signed sofware assertion (see
Section 4) from a software API publisher. Values in the
assertion MAY be used as DEFAULT values for other client
registration metadata.
software_id
RECOMMENDED. A unique identifier that identifies the software
such as a UUID. The identifier SHOULD NOT change when software
version changes or when a new installation instance is detected.
"software_id" is intended to help a registration endpoint
recognize a client's assertion that it is a prticular piece of
software. Because of this, software identifier is usually
associated with a particular client name. While "client_id"is
linked to a client software deployment instance, the
"software_id" is an identifier shared between all copies of the
client software. Registration servers MAY use the supplied
software identifier to determine whether a particular client
software is approved or supported for use in the deployment
domain.
software_version
RECOMMENDED. A version identifier such as a UUID or a number.
Servers MAY use equality match to determine if a particular
client is a particular version. "software_version" SHOULD change
on any update to the client software. Registration servers MAY
use the software version and identity to determine whether a
particular client version is authorized for use in the deployment
domain.
client_name
RECOMMENDED. A human-readable name of the client to be presented
to the user. If omitted, the authorization server MAY display
the raw "client_id" value to the user instead. It is RECOMMENDED
Hunt, et al. Expires January 06, 2014 [Page 9]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
that clients always send this field. The value of this field MAY
be internationalized as described in Human Readable Client
Metadata (Section 2.5).
client_secret READ-ONLY. A value that is the OAuth 2.0
"client_secret". This value SHOULD be assigned by the server.
Any time the value is returned to the registered client, the
server MAY rotate the value. Clients MUST check for any change
in value returned and update their copy. The value is typically
only used when the attribute "token_endpoint_auth_method" is set
to "client_post" or "client_basic".
client_uri
RECOMMENDED. A URL of the homepage of the client software. If
present, the server SHOULD display this URL to the end user in a
clickable fashion. It is RECOMMENDED that clients always send
this field. The value of this field MUST point to a valid Web
page. The value of this field MAY be internationalized as
described in Human Readable Client Metadata (Section 2.5).
jwks_uri
OPTIONAL. A URL for the client's JSON Web Key Set [JWK] document
representing the client's public keys. The value of this field
MUST point to a valid JWK Set. These keys MAY also be used for
higher level protocols that require signing or encryption.
logo_uri
OPTIONAL. A URL that references a logo image for the client. If
present, the server SHOULD display this image to the end user
during approval. The value of this field MUST point to a valid
image file. The value of this field MAY be internationalized as
described in Human Readable Client Metadata (Section 2.5).
policy_uri
OPTIONAL. A URL that points to a human-readable policy document
for the client. The authorization server SHOULD display this URL
to the End-User if it is given. The Policy usually describes how
an End-User's data will be used by the client. The value of this
field MUST point to a valid Web page. The value of this field
MAY be internationalized as described in Human Readable Client
Metadata (Section 2.5).
registration_token
READ-ONLY. An OAuth 2.0 Bearer Token [OAuth.JWT] known as the
"registration access token". The token MAY be used by the client
as a long-term access token used to update and manage the
client's registration. The token is intended to allow the client
to refresh its registration and obtain new client credentials in
Hunt, et al. Expires January 06, 2014 [Page 10]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
the event of expiry or revocation of the client credentials by
the service API deployment domain. When client credentials are
rotated, the registration access token SHOULD also be rotated.
scope
OPTIONAL. A space separated list of scope values (as described
in Section 3.3 [RFC6749]) that the client can use when requesting
access tokens. The semantics of values in this list is service
specific. If omitted, an authorization server MAY register a
client with a default set of scopes.
targetEndpoint
RECOMMENDED. A URI of the service API the client is registering
for. The server MAY provide this value in its response. Clients
requesting access to more than one target endpoint should
register once for each target.
token_endpoint_auth_method
OPTIONAL. Value containing the requested authentication method
for the Token Endpoint. The server MAY override the requested
value. Clients MUST check for a change in value in the
registration response. Values defined by this specification are:
* "none": The client is a public client as defined in OAuth 2.0
and does not have a client secret.
* "client_secret_post": The client uses the HTTP POST parameters
defined in OAuth 2.0 section 2.3.1.
* "client_secret_basic": the client uses HTTP Basic defined in
OAuth 2.0 section 2.3.1
Additional values can be defined via the IANA OAuth Token
Endpoint Authentication Methods registry Section 6.1. Absolute
URIs can also be used as values for this parameter. If
unspecified or omitted, the default is "client_secret_basic",
denoting HTTP Basic Authentication Scheme as specified in
Section 2.3.1 of OAuth 2.0.
tos_uri
OPTIONAL. A URL that points to a human-readable "Terms of
Service" document for the client. The authorization server
SHOULD display this URL to the End-User if it is given. The
Terms of Service usually describe a contractual relationship
between the End-User and the client that the End-User accepts
when authorizing the client. The value of this field MUST point
to a valid Web page. The value of this field MAY be
internationalized as described in Human Readable Client Metadata
(Section 2.5).
Hunt, et al. Expires January 06, 2014 [Page 11]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
2.2. Multi-valued Attributes
The following is a list of SCIM multi-valued attributes that MAY be
part of a "Client" resource.
contacts
OPTIONAL. One or more email addresses for people responsible for
this client. The authorization server MAY make these addresses
available to end users for support requests for the client. An
authorization server MAY use these email addresses as identifiers
for an administrative page for this client.
redirect_uris
RECOMMENDED. One or more redirect URI values for use in
redirect-based flows such as the Authorization Code and Implicit
grant types. authorization servers SHOULD require registration
of valid redirect URIs for all clients that use these grant types
to protect against token and credential theft attacks.
grant_types
OPTIONAL. One or more OAuth 2.0 grant types that the client may
use. These grant types are defined as follows:
* "authorization_code": The Authorization Code Grant described
in OAuth 2.0 Section 4.1
* "implicit": The Implicit Grant described in OAuth 2.0
Section 4.2
* "password": The Resource Owner Password Credentials Grant
described in OAuth 2.0 Section 4.3
* "client_credentials": The "Client credentials Grant" described
in OAuth 2.0 Section 4.4
* "refresh_token": The Refresh Token Grant described in OAuth
2.0 Section 6.
* "urn:ietf:params:oauth:grant-type:jwt-bearer": The JWT Bearer
grant type defined in OAuth JWT Bearer Token Profiles
[OAuth.JWT].
* "urn:ietf:params:oauth:grant-type:saml2-bearer": The SAML 2
Bearer grant type defined in OAuth SAML 2 Bearer Token
Profiles [OAuth.SAML2].
Authorization servers MAY allow for other values as defined in
grant type extensions to OAuth 2.0. The extension process is
described in OAuth 2.0 Section 2.5, and the value of this
parameter MUST be the same as the value of the "grant_type"
parameter passed to the Token Endpoint defined in the extension.
response_types
Hunt, et al. Expires January 06, 2014 [Page 12]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
OPTIONAL. One or more OAuth 2.0 response types that the client
may use. These response types are defined as follows:
* "code": The Authorization Code response described in OAuth 2.0
Section 4.1.
* "token": The Implicit response described in OAuth 2.0
Section 4.2.
Authorization servers MAY allow for other values as defined in
response type extensions to OAuth 2.0. The extension process is
described in OAuth 2.0 Section 2.5, and the value of this
parameter MUST be the same as the value of the "response_type"
parameter passed to the Authorization Endpoint defined in the
extension.
2.3. Client Representation
The following is a non-normative example of a fully populated SCIM
OAuth 2.0 client registration in JSON format.
{
"schemas":["urn:scim:schemas:core:1.0",
"urn:scim:schemas:oauth:2.0:Client"],
"id":"2060107e82-fbe3-42bd-b199-15df7081a8ae",
"resourceType":"Client",
"software_id":"5ed2dd14-3ef7-4655-a41d-b5bd4c5266cc",
"software_version":"5.1.2.3.4",
"client_name":"Example Social Client",
"logo_uri":"https://client.example.org/logo.png",
"jwks_uri":"https://client.example.org/my_public_keys.jwks",
"token_endpoint_auth_method":"client_secret_post",
"scope":"read write dolphin",
"client_id":"2060107e82-fbe3-42bd-b199-15df7081a8ae",
"client_secret":"Z7tk2XqLKo1CfE14374teR4V554e8JUS",
"redirect_urls":[""https://client.example.org/callback",
"https://client.example.org/callback2"],
"targetEndpoint":"https://social.example.com/base"
}
Figure 2: Example Client Resource
2.4. Relationship Between Grant Types and Response Types
The "grant_types" and "response_types" values described above are
partially orthogonal, as they refer to arguments passed to different
endpoints in the OAuth protocol. However, they are related in that
the "grant_types" available to a client influence the
"response_types" that the client is allowed to use, and vice versa.
Hunt, et al. Expires January 06, 2014 [Page 13]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
For instance, a "grant_types" value that includes
"authorization_code" implies a "response_types" value that includes
code, as both values are defined as part of the OAuth 2.0
Authorization Code Grant. As such, a server supporting these fields
SHOULD take steps to ensure that a client cannot register itself into
an inconsistent state.
The correlation between the two fields is listed in the table below.
+-------------------------------------------------+-----------------+
| grant_types value includes: | response_types |
| | value includes: |
+-------------------------------------------------+-----------------+
| authorization_code | code |
| | |
| implicit | token |
| | |
| password | (none) |
| | |
| client_credentials | (none) |
| | |
| refresh_token | (none) |
| | |
| urn:ietf:params:oauth:grant-type:jwt-bearer | (none) |
| | |
| urn:ietf:params:oauth:grant-type:saml2-bearer | (none) |
+-------------------------------------------------+-----------------+
Extensions and profiles of this document that introduce new values to
either the "grant_types" or "response_types" parameter MUST document
all correspondences between these two parameter types.
2.5. Human Readable Client Metadata
[[This needs to be updated to be compatible with SCIM. There is a
also a problem with how to limit the amount of localization data
exchange for an instance registration. Note that mobile clients tend
to only need one preferred language while web clients represent many
clients and may have more than 20 languages to support.]]
Human-readable Client Metadata values and client Metadata values that
reference human-readable values MAY be represented in multiple
languages and scripts. For example, the values of fields such as
"client_name", "tos_uri", "policy_uri", "logo_uri", and "client_uri"
might have multiple locale-specific values in some client
registrations.
Hunt, et al. Expires January 06, 2014 [Page 14]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
To specify the languages and scripts, BCP47 [RFC5646] language tags
are added to client Metadata member names, delimited by a #
character. Since JSON member names are case sensitive, it is
RECOMMENDED that language tag values used in Claim Names be spelled
using the character case with which they are registered in the IANA
Language Subtag Registry [IANA.Language]. In particular, normally
language names are spelled with lowercase characters, region names
are spelled with uppercase characters, and languages are spelled with
mixed case characters. However, since BCP47 language tag values are
case insensitive, implementations SHOULD interpret the language tag
values supplied in a case insensitive manner. Per the
recommendations in BCP47, language tag values used in Metadata member
names should only be as specific as necessary. For instance, using
"fr" might be sufficient in many contexts, rather than "fr-CA" or
"fr-FR".
For example, a client could represent its name in English as
""client_name#en": "My Client"" and its name in Japanese as
""client_name#ja-Jpan-JP":
"\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u540D"" within the same
registration request. The authorization server MAY display any or
all of these names to the Resource Owner during the authorization
step, choosing which name to display based on system configuration,
user preferences or other factors.
If any human-readable field is sent without a language tag, parties
using it MUST NOT make any assumptions about the language, character
set, or script of the string value, and the string value MUST be used
as-is wherever it is presented in a user interface. To facilitate
interoperability, it is RECOMMENDED that clients and servers use a
human-readable field without any language tags in addition to any
language-specific fields, and it is RECOMMENDED that any human-
readable fields sent without language tags contain values suitable
for display on a wide variety of systems.
Implementer's Note: Many JSON libraries make it possible to reference
members of a JSON object as members of an Object construct in the
native programming environment of the library. However, while the
"#" character is a valid character inside of a JSON object's member
names, it is not a valid character for use in an object member name
in many programming environments. Therefore, implementations will
need to use alternative access forms for these claims. For instance,
in JavaScript, if one parses the JSON as follows, "var j =
JSON.parse(json);", then the member "client_name#en-us" can be
accessed using the JavaScript syntax "j["client_name#en-us"]".
2.6. Registration Server Processing Rules
Hunt, et al. Expires January 06, 2014 [Page 15]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
A registration server MAY override any value that a client requests
during the registration process (including any omitted values) and
replace the requested value with a server generated value or default
at the server's discretion.
If a software assertion is provided the registration server SHOULD
validate the assertion as per Section 4.
3. SCIM Interaction Profile
All calls to the registration endpoint follow the HTTP verbs defined
in [I-D.ietf-scim-api].
All resources accessible through the SCIM client registration
endpoint are OAuth 2.0 protected. Clients that require access to
their own registration resource, MAY use the registration access
token ("registration_token") returned after registration, OR obtain
an access token from the token server endpoint using the client
credentials flow Section 4.4 [RFC6749], and scope
"urn:oauth:scim:api:scope:registration".
The initial access token used in the initial registration SHOULD NOT
be used for this purpose of managing or updating client resources.
Access to the client registration base for the purpose of adding a
new registration MAY permit anonymous access as desribed in the next
section.
Clients SHOULD NOT be able to access the registration resources of
other clients.
Clients with expired client credentials SHOULD follow the procedures
in Section 3.5.
3.1. Adding A Registration
Adding a registration follows the normal SCIM method for creating a
resource (an HTTP POST) as described in Section 3.1
[I-D.ietf-scim-api].
3.1.1. Anonymous Registration
The SCIM registration endpoint MAY support anonymous registration for
those clients that have not been issued an initial access token. For
those clients that have been issued a software assertion, the clients
SHOULD include this assertion in the software_assertion field of the
client resource being created. The Server SHOULD validate the
assertion and validate the issuer, subject, audience, and expiry
fields as described in Section 4.1.
Hunt, et al. Expires January 06, 2014 [Page 16]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
For a non-normative example, see Figure 2. In the anonymous case,
the "HTTP Authorization" header is omitted.
3.1.2. Pre-Authorized Registration
A pre-authorized registration is where the client or the installer of
the client has been issued an initial access token which may be used
to call the SCIM registration endpoint. Clients should use the token
by inserting the appropriate value in the HTTP Authorization header.
Additionally, as with anonymous registrations, clients MAY include a
software assertion. For example, a non-normative registration (line
breaks inserted for readability):
POST /Users HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Bearer h480djs93hd8
Content-Length: ...
{
"schemas":["urn:scim:schemas:core:1.0",
"urn:scim:schemas:oauth:2.0:Client"],
"software_id":"5ed2dd14-3ef7-4655-a41d-b5bd4c5266cc",
"software_assertion":"eyJhbGciOiJSUzI1NiJ9.",
"software_version":"5.1.2.3.4",
"client_name":"Example Social Client",
"logo_uri":"https://client.example.org/logo.png",
"jwks_uri":"https://client.example.org/my_public_keys.jwks",
"token_endpoint_auth_method":"client_secret_post",
"scope":"read write dolphin",
"redirect_urls":[""https://client.example.org/callback",
"https://client.example.org/callback2"],
"targetEndpoint":"https://social.example.com/base"
}
Figure 2: Figure 3: Client Registration Request
On successful processing, the SCIM endpoint would respond with:
HTTP/1.1 201 Created
Content-Type: application/json
Location:
https://example.com/v2/Clients/2060107e82-42bd-b199-15df7081a8ae
ETag: W/"e180ee84f0671b1"
{
"schemas":["urn:scim:schemas:core:1.0",
Hunt, et al. Expires January 06, 2014 [Page 17]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
"urn:scim:schemas:oauth:2.0:Client"],
"resourceType":"Client",
"id":"2060107e82-42bd-b199-15df7081a8ae",
"software_id":"5ed2dd14-3ef7-4655-a41d-b5bd4c5266cc",
"software_assertion":"eyJhbGciOiJSUzI1NiJ9.",
"software_version":"5.1.2.3.4",
"client_name":"Example Social Client",
"logo_uri":"https://client.example.org/logo.png",
"jwks_uri":"https://client.example.org/my_public_keys.jwks",
"token_endpoint_auth_method":"client_secret_post",
"scope":"read write dolphin",
"client_id":"2060107e82-fbe3-42bd-b199-15df7081a8ae",
"client_secret":"Z7tk2XqLKo1CfE14374teR4V554e8JUS",
"redirect_urls":[""https://client.example.org/callback",
"https://client.example.org/callback2"],
"targetEndpoint":"https://social.example.com/base"
}
Figure 4: Client Registration Response
Clients SHOULD read the response and review and retain the following
items:
o The client SHOULD remember the "HTTP Location" returned. This
location is used for future registration updates and client
credential rotation.
o The client MUST read the assigned "client_id" value and retain for
use in all authorization server interactions with the associated
target endpoint.
o If returned, the client SHOULD retain the "registration_token" as
a credential that can be used to access and update the client's
registration.
o The client MUST read the "token_endpoint_auth_method" to obtain
the authentication method the server has chosen for the client.
o Based on the returned token endpoint authentication method
returned, the client MUST read the registration for the
appropriate client credential such as "token_secret".
3.2. Reading A Registration
When a server receives a GET request from an HTTP client whose access
token is assigned to the OAuth 2.0 client that is the subject of the
registration, the server MAY elect to rotate the client credential
(e.g. client_secret) or other relevant attributes. If the access
request is not from the registered client (such as an administrator),
the server SHOULD NOT change any registration values. [[should the
server mask anything?]]
Hunt, et al. Expires January 06, 2014 [Page 18]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
Reading a client resource is done using the SCIM HTTP GET verb as
defined in Section 3.2 [I-D.ietf-scim-api]
A client resource may be retrieved using the "location" returned from
the original client registration. The registration MAY be retrieved
directly using this URL. If the location is not available, the
current values of the registration can be obtained by querying this
URL, or by searching the "/Clients" with a query parameter for
client_id that corresponds to the client's "client_id".
GET /Clients/?
filter=client_id%20eq%2060107e82-fbe3-42bd-b199-15df7081a8ae
Host: example.com
Accept: application/json
Authorization: Bearer deadbeef
Figure 3: Figure 5: Retrieving a Registration
If found, the server will respond with a HTTP 200 message containing
a single client resource, with one or more attributes:
HTTP/1.1 200 OK
Content-Type: application/json
{
"totalResults":1,
"schemas":["urn:scim:schemas:core:1.0",
"urn:scim:schemas:oauth:Client:1.0"],
"Resources":[
{
"id":"2060107e82-fbe3-42bd-b199-15df7081a8ae",
"resourceType":"Client",
"software_id":"5ed2dd14-3ef7-4655-a41d-b5bd4c5266cc",
"software_version":"5.1.2.3.4",
"client_name":"Example Social Client",
...
"token_endpoint_auth_method":"client_secret_post",
"client_id":"2060107e82-fbe3-42bd-b199-15df7081a8ae",
"client_secret":"Z7tk2XqLKo1CfE14374teR4V554e8JUS"
}
]
}
Figure 6: Retrieving Registration Response
If no resource is found, the server will respond with a HTTP 200
message containing zero result resources.
Hunt, et al. Expires January 06, 2014 [Page 19]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
When a client returns its own record, clients should check for
updates to the following items:
o The client MUST read the assigned "client_id" value and retain for
use in all authorization server interactions with the associated
target endpoint.
o If returned, the client SHOULD update the "registration_token" as
a credential that can be used to access and update the client's
registration.
o The client MUST read the "token_endpoint_auth_method" to obtain
the authentication method the server has chosen for the client.
o Based on the returned token endpoint authentication method
returned, the client MUST read the registration for any changes to
client credential such as "token_secret".
3.3. Modifying A Registration
Modification of a client resource can be done using the SCIM PUT or
PATCH verbs as defined in Section 3.3 [I-D.ietf-scim-api].
When a server receives a PUT or PATCH request from an HTTP client
whose access token is assigned to the OAuth 2.0 client that is the
subject of the registration, the server MAY elect to rotate the
client credential (e.g. client_secret) or other relevant attributes.
3.4. Deleting A Registration
De-registration of a client resource can be done using the SCIM
DELETE verbs as defined in Section 3.4 [I-D.ietf-scim-api]. When a
delete is completed, all associated client credentials and access
tokens MUST be revoked or invalidated.
3.5. Expired Registration
An expired registration occurs when the client's credential has
expired, or has been revoked by the registration service. On expiry,
access tokens issued to the client MUST be revoked or invalidated.
If, on registration, the client was returned a registration access
token ("registration_token"), the client MAY obtain new credentials
by simply retrieving its client profile using the registration token
and the SCIM GET verb at the location returned after the initial
registration (see Figure 3).
Clients that do not have a valid registration access token MAY re-
register as a new client instance. In such case, the client MAY
include it's existing "client_id"in its client meta data as
"client_id"for tracking purposes only. In such cases, the old
Hunt, et al. Expires January 06, 2014 [Page 20]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
client_id SHOULD NOT be re-activated and the server SHOULD issue a
new client_id value.
4. Software Assertion Token
A software assertion is an 'authorization' bearer JSON Web Token as
defined in Section 2.1 [OAuth.JWT]. While the software assertion is
a JWT authorization token, it SHOULD not be used with the
authorization server token endpoint. It is used by the client
registration endpoint for the purpose of registration. A software
assertion is a statement of claims about the client software being
registered and SHOULD NOT be used as an authentication of the
software.
Software assertions may be generated by a software API publisher for
the purpose of allowing a developer to incorporate a signed assertion
that can be used to register client software at more than one
Software API deployment.
4.1. Software Assertion Requirements
In order to create and validate a software assertion, the following
requirements apply in addition to those stated in Section 3
[OAuth.JWT].
1. The JWT MAY contain any claim specified in Section 2.
2. The JWT MUST contain an "iss" (issuer) claim that contains a
unique identifier for the entity that issued the JWT. This value
SHOULD correspond to the software API publisher.
3. The JWT MUST contain a "sub" (subject) claim that contains a
unique value corresponding to the "software_id". This number is
MAY be assigned by the software API publisher.
4. The JWT MUST contain an "aud" (audience) claim containing a value
that is ONE of the following:
* A value that identifies one or more software API deployments,
where the client software MAY be registered.
* A value "urn:oauth:scim:reg:generic" which indicates the
assertion MAY be used with any software API deployment
environment.
5. The JWT MUST contain an "exp" (expiration) claim that limits the
time window during which the JWT can be used to register clients.
When registering clients, the registration server MUST verify
that the expiration time has not passed, subject to allowable
clock skew between systems, and reject expired JWTs. The
authorization server SHOULD NOT use this value to revoke an
existing client registration.
Hunt, et al. Expires January 06, 2014 [Page 21]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
5. Server Schema Configurations
[[This section to be revised pending clarification of schema
extensions methodology in draft-ietf-core-schema]]
5.1. Resource Type
The following is a normative JSON representation of a SCIM
"ResourceType" representing a client resorce in a SCIM server
returned by querying "GET [scimendpoint}/ResourceTypes". "..."
indicates other ResourceTypes removed for clarity.
[
...
{
"name": "Client",
"endpoint": "/Clients",
"schema": "urn:scim:schemas:oauth:2.0"
},
...
]
Figure 7: Client Resource Type
5.2. Schema Representation
The following is a normative exammple of the SCIM "Schema" for a
client in JSON format returned when querying "GET {scimendpoint}/
Schemas".
{ "id":"urn:scim:schemas:oauth:2.0:Client",
"name":"Client",
"description":"OAuth 2 Client",
"schema":["urn:scim:core:1.0",
"urn:scim:schemas:oauth:2.0"],
"endpoint":"/Clients",
"attributes":[
{
"name":"id",
"type":"string",
"multiValued":false,
"description":"Unique identifier for the SCIM resource....",
"readOnly":true,
"required":true,
"caseExact":false
},
{
"name":"client_id",
Hunt, et al. Expires January 06, 2014 [Page 22]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
"type":"string",
"multiValued":false,
"description":
"OAuth 2.0 client_id assigned to the registered client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"software_assertion",
"type":"string",
"multiValued":false,
"description":
"A signed JWT assertion about the client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"software_id",
"type":"string",
"multiValued":false,
"description":"Unique identifier for client software.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"software_version",
"type":"string",
"multiValued":false,
"description":"A version identifier for the software.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"client_name",
"type":"string",
"multiValued":false,
"description":"A human readable name of the client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"client_secret",
"type":"string",
Hunt, et al. Expires January 06, 2014 [Page 23]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
"multiValued":false,
"description":
"A client secret assigned by the registration endpoint.",
"readOnly":true,
"required":false,
"caseExact":true
},
{
"name":"client_uri",
"type":"string",
"multiValued":false,
"description":
"URL of homepage for client(displayable to an end-user).",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"jwks_uri",
"type":"string",
"multiValued":false,
"description":"A URL for the client's JSON Web Key Set.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"logo_uri",
"type":"string",
"multiValued":false,
"description":"A URL that references a logo image for client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"policy_uri",
"type":"string",
"multiValued":false,
"description":
"A URL of a human-readable policy document for the client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"registration_token",
"type":"string",
Hunt, et al. Expires January 06, 2014 [Page 24]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
"multiValued":false,
"description":
"A token issued to client for updating its registration.",
"readOnly":true,
"required":false,
"caseExact":true
},
{
"name":"scope",
"type":"string",
"multiValued":false,
"description":"Registered OAuth 2 scopes the client uses.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"targetEndpoint",
"type":"string",
"multiValued":false,
"description":
"The OAuth2 resource endpoint the client intends to access.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"token_endpoint_auth_method",
"type":"string",
"multiValued":false,
"description":"OAuth 2 Token Endpoint authorization method.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"tos_uri",
"type":"string",
"multiValued":false,
"description":
"A URL pointing to a human readable terms of service.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"contacts",
"type":"string",
Hunt, et al. Expires January 06, 2014 [Page 25]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
"multiValued":true,
"description":
"One or more email addresses of contacts for client.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"redirect_uris",
"type":"string",
"multiValued":true,
"description":"One or more OAuth 2 redirect URI values.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"grant_types",
"type":"string",
"multiValued":true,
"description":
"One or more OAuth 2 grant types the client may use.",
"readOnly":false,
"required":false,
"caseExact":true
},
{
"name":"response_types",
"type":"string",
"multiValued":true,
"description":"One or more OAuth 2 response types.",
"readOnly":false,
"required":false,
"caseExact":true
},
]
}
Figure 8: Client Schema Representation
6. IANA Considerations
6.1. OAuth Token Endpoint Authentication Methods Registry
This specification establishes the OAuth Token Endpoint
Authentication Methods registry.
Hunt, et al. Expires January 06, 2014 [Page 26]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
Additional values for use as "token_endpoint_auth_method" metadata
values are registered with a Specification Required ([RFC5226]) after
a two-week review period on the oauth-ext-review@ietf.org mailing
list, on the advice of one or more Designated Experts. However, to
allow for the allocation of values prior to publication, the
Designated Expert(s) may approve registration once they are satisfied
that such a specification will be published.
Registration requests must be sent to the oauth-ext-review@ietf.org
mailing list for review and comment, with an appropriate subject
(e.g., "Request to register token_endpoint_auth_method value:
example").
Within the review period, the Designated Expert(s) will either
approve or deny the registration request, communicating this decision
to the review list and IANA. Denials should include an explanation
and, if applicable, suggestions as to how to make the request
successful.
IANA must only accept registry updates from the Designated Expert(s)
and should direct all requests for registration to the review mailing
list.
6.1.1. Registration Template
Token Endpoint Authorization Method name:
The name requested (e.g., "example"). This name is case
sensitive. Names that match other registered names in a case
insensitive manner SHOULD NOT be accepted.
Change controller:
For Standards Track RFCs, state "IETF". For others, give the name
of the responsible party. Other details (e.g., postal address,
email address, home page URI) may also be included.
Specification document(s):
Reference to the document(s) that specify the token endpoint
authorization method, preferably including a URI that can be used
to retrieve a copy of the document(s). An indication of the
relevant sections may also be included but is not required.
6.1.2. Initial Registry Contents
The OAuth Token Endpoint Authentication Methods registry's initial
contents are:
o Token Endpoint Authorization Method name: "none"
o Change controller: IETF
Hunt, et al. Expires January 06, 2014 [Page 27]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
o Specification document(s): [[ this document ]]
o Token Endpoint Authorization Method name: "client_secret_post"
o Change controller: IETF
o Specification document(s): [[ this document ]]
o Token Endpoint Authorization Method name: "client_secret_basic"
o Change controller: IETF
o Specification document(s): [[ this document ]]
7. Security Considerations
Since requests to the client registration endpoint result in the
transmission of clear-text credentials (in the HTTP request and
response), the server MUST require the use of a transport-layer
security mechanism when sending requests to the registration
endpoint. The server MUST support TLS 1.2 RFC 5246 [RFC5246] and/or
TLS 1.0 [RFC2246] and MAY support additional transport-layer
mechanisms meeting its security requirements. When using TLS, the
client MUST perform a TLS/SSL server certificate check, per RFC 6125
[RFC6125].
Since the SCIM client configuration endpoint is an OAuth 2.0
protected resource, it SHOULD have some rate limiting on failures to
prevent initial access tokens from being disclosed though repeated
access attempts.
For clients that use redirect-based grant types such as Authorization
Code and Implicit, authorization servers SHOULD require clients to
register their "redirect_uris". Requiring clients to do so can help
mitigate attacks where rogue actors inject and impersonate a validly
registered client and intercept its authorization code or tokens
through an invalid redirect URI.
The authorization server MUST treat all client metadata, including
software assertions, as self-asserted. A rogue client might use the
name and logo for the legitimate client, which it is trying to
impersonate. An authorization server needs to take steps to mitigate
this phishing risk, since the logo could confuse users into thinking
they're logging in to the legitimate client. For instance, an
authorization server could warn if the domain/site of the logo
doesn't match the domain/site of redirect URIs. An authorization
server can also present warning messages to end users about untrusted
clients in all cases, especially if such clients have been
dynamically registered and have not been trusted by any users at the
authorization server before.
Hunt, et al. Expires January 06, 2014 [Page 28]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
Authorization servers MAY assume that registered client software
sharing the same software assertion, software_id, and other metadata
SHOULD have similar operational behaviour metrics. Similarly,
Authorization server administrators MAY use software_id and
software_version to facilitate normal change control and approval
management of client software including:
o Approval of specific clients software for use with specific
protected resources.
o Lifecycle management and support of specific software versions as
indicated by software_version.
o Revocation of groups of client credentials and associated access
tokens when support issues or security risks identified with a
particular client software as identified by software_id and
software_version.
In a situation where the authorization server is supporting open
client registration, it must be extremely careful with any URL
provided by the client that will be displayed to the user (e.g.
"logo_uri", "tos_uri", "client_uri", and "policy_uri"). For
instance, a rogue client could specify a registration request with a
reference to a drive-by download in the "policy_uri". The
authorization server SHOULD check to see if the "logo_uri",
"tos_uri", "client_uri", and "policy_uri" have the same host and
scheme as the those defined in the array of "redirect_uris" and that
all of these resolve to valid Web pages.
Access tokens issued to clients to facilitate update or retrieval of
client registrations SHOULD be short lived.
Clients SHOULD rotate their client credentials before they expire by
obtaining an access token from the authorization server using the
registration scope. If a client has not successfully rotated its
credential prior to expiry, the client MUST register as a new client.
If a client is deprovisioned from a server (due to expiry or de-
registration), any outstanding Registration Access Token for that
client MUST be invalidated at the same time. Otherwise, this can
lead to an inconsistent state wherein a client could make requests to
the client configuration endpoint where the authentication would
succeed but the action would fail because the client is no longer
valid.
Clients that are unable to retain a client credential for the life of
the client instance MAY NOT register and should continue to be
treated as Public clients as defined by OAuth 2.0.
Hunt, et al. Expires January 06, 2014 [Page 29]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
8. Normative References
[I-D.ietf-scim-api]
Drake, T., Mortimore, C., Ansari, M., Grizzle, K., and E.
Wahlstroem, "System for Cross-Domain Identity
Management:Protocol", draft-ietf-scim-api-00 (work in
progress), August 2012.
[I-D.ietf-scim-core-schema]
Mortimore, C., Harding, P., Madsen, P., and T. Drake,
"System for Cross-Domain Identity Management: Core
Schema", draft-ietf-scim-core-schema-00 (work in
progress), August 2012.
[IANA.Language]
Internet Assigned Numbers Authority (IANA), "Language
Subtag Registry", 2005.
[JWK] Jones, M., "JSON Web Key (JWK)", draft-ietf-jose-json-web-
key (work in progress), May 2013.
[OAuth.JWT]
Jones, M., Campbell, B., and C. Mortimore, "JSON Web Token
(JWT) Bearer Token Profiles for OAuth 2.0", draft-ietf-
oauth-jwt-bearer (work in progress), March 2013.
[OAuth.SAML2]
Campbell, B., Mortimore, C., and M. Jones, "SAML 2.0
Bearer Assertion Profiles for OAuth 2.0", draft-ietf-
oauth-saml2-bearer (work in progress), March 2013.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0",
RFC 2246, January 1999.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC4627] Crockford, D., "The application/json Media Type for
JavaScript Object Notation (JSON)", RFC 4627, July 2006.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008.
Hunt, et al. Expires January 06, 2014 [Page 30]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008.
[RFC5646] Phillips, A. and M. Davis, "Tags for Identifying
Languages", BCP 47, RFC 5646, September 2009.
[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, March 2011.
[RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC
6749, October 2012.
[RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization
Framework: Bearer Token Usage", RFC 6750, October 2012.
Appendix A. Acknowledgments
This draft was based upon in large part upon the work in draft-ietf-
oauth-dyn-reg-12. The author would like to thank Justin Richter and
the members of the OAuth Working Group.
In turn, the authors thank the OAuth Working Group, the User-Managed
Access Working Group, and the OpenID Connect Working Group
participants for their input to this document. In particular, the
following individuals have been instrumental in their review and
contribution to various versions of this document: Amanda Anganes,
Tim Bray, Domenico Catalano, Donald Coffin, George Fletcher, Thomas
Hardjono, Torsten Lodderstedt, Eve Maler, Josh Mandel, Nov Matake,
Nat Sakimura, Christian Scholz, and Hannes Tschofenig.
Appendix B. Document History
[[ to be removed by the RFC editor before publication as an RFC ]]
-00
o First draft based on work from draft-ietf-oauth-dyn-reg-12.
Authors' Addresses
Phil Hunt (editor)
Oracle Corporation
Email: phil.hunt@yahoo.com
Hunt, et al. Expires January 06, 2014 [Page 31]
Internet-Draft OAuth-SCIM-Client-Reg July 2013
Morteza Ansari
Cisco
Email: moransar@cisco.com
Tony Nadalin
Microsoft
Email: tonynad@microsoft.com
Hunt, et al. Expires January 06, 2014 [Page 32]