rfc-7591

OAuth 2.0 Dynamic Client Registration Protocol

J. Richer (Editor), M. Jones, J. Bradley, M. Machulak, P. Hunt
date2015-07 streamIETF areasec wgoauth statusPROPOSED STANDARD pages39 canonicalhttps://www.rfc-editor.org/rfc/rfc7591 doi10.17487/RFC7591 errataview
This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.

Extracted elements (30)

design-rationale §5

Software statements and initial access tokens serve complementary but distinct purposes: a software statement attests to the identity and properties of client software (who the software is), while an initial access token authorizes use of the registration endpoint (permission to register). An authorization server MUST consider both together when evaluating a registration request.

oauth, security

design-rationale §2

The 'software_id' is assigned by the client developer and SHOULD remain stable across all instances and versions of a given software package, while 'client_id' is server-issued and SHOULD vary per instance. This separation allows authorization servers to correlate different deployments of the same software without conflating software identity with registration identity.

oauth

design-rationale §2

Use of 'jwks_uri' is preferred over the inline 'jwks' parameter because it allows for easier key rotation without requiring re-registration. The inline 'jwks' is intended only for clients that cannot host public URLs, such as native clients.

oauth, jose, crypto

interoperability-note §2.1

The 'grant_types' and 'response_types' values are correlated: 'authorization_code' implies 'code', 'implicit' implies 'token', while 'password', 'client_credentials', 'refresh_token', and JWT/SAML bearer grant types imply no response type. Servers SHOULD prevent clients from registering inconsistent combinations.

oauth

interoperability-note §1

This specification generalizes the registration mechanisms from OpenID Connect Dynamic Client Registration 1.0 and UMA Profile of OAuth 2.0 in a compatible manner, and is applicable to a wider set of OAuth 2.0 use cases.

oauth

normative-requirement §2.3 MUST

A software statement presented to an authorization server MUST be digitally signed or MACed using JSON Web Signature (JWS) and MUST contain an 'iss' (issuer) claim. It is RECOMMENDED that software statements be signed using the 'RS256' algorithm.

oauth, jose, crypto

normative-requirement §5 MUST

For clients using redirect-based grant types such as 'authorization_code' and 'implicit', authorization servers MUST require clients to register their redirection URI values. Registered redirection URI values MUST be a TLS-protected remote site, a localhost HTTP URI, or a non-HTTP application-specific URL.

oauth, security

normative-requirement §3.2.1 MUST

If a software statement was used in the registration, its value MUST be returned unmodified in the response using the 'software_statement' member name. Client metadata elements from the software statement MUST also be returned as top-level values in the registration response.

oauth, jose

normative-requirement §2 MUST

The authorization server MUST ignore any client metadata sent by the client that it does not understand, silently removing unknown metadata from the client's registration record during processing.

oauth

normative-requirement §5 MUST

The authorization 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 and the client MUST perform a TLS/SSL server certificate check per RFC 6125.

oauth, security, tls

normative-requirement §3.2.1 MUST

The authorization server MUST return all registered metadata about a client in the registration response, including any fields provisioned by the authorization server itself. The response MUST use HTTP 201 Created with content type 'application/json'.

oauth, http

normative-requirement §5 MUST

The authorization server MUST treat all client metadata as self-asserted unless the metadata is contained within a trusted software statement. The server MUST take appropriate steps to mitigate impersonation risks.

oauth, security

normative-requirement §3 MUST

The client registration endpoint MUST accept HTTP POST messages with request parameters encoded in the entity body using the 'application/json' format and MUST be protected by a transport-layer security mechanism.

oauth, security, http

normative-requirement §2 MUST NOT

The 'jwks_uri' and 'jwks' parameters MUST NOT both be present in the same request or response.

oauth, jose

normative-requirement §2 MUST

When a software statement is trusted by the authorization server, the value of a claim in the software statement MUST take precedence over the same client metadata name conveyed in the plain JSON request body.

oauth, security, jose

privacy-consideration §6

For native applications installed on a single device, per-instance client identifiers could be uniquely tracked across OAuth 2.0 transactions. Clients are forbidden from creating their own client identifiers to prevent cross-server tracking via colluding authorization servers.

oauth, privacy

privacy-consideration §6

The 'contacts' field contains developer contact information that will be visible to authorization server administrators and potentially end-users. Developers should consider using a dedicated support address rather than personal addresses to avoid unnecessary personal data exposure.

oauth, privacy

protocol-element §2.3

A Software Statement is a JWT that asserts metadata values about client software as a signed bundle. It is typically distributed with all instances of a client application and may be issued by the client developer or a third-party organization.

oauth, jose

protocol-element §2

Client metadata fields defined for registration include: redirect_uris, token_endpoint_auth_method, grant_types, response_types, client_name, client_uri, logo_uri, scope, contacts, tos_uri, policy_uri, jwks_uri, jwks, software_id, and software_version. All fields are OPTIONAL unless stated otherwise.

oauth, json

protocol-element §3.2.1

The Client Information Response includes required 'client_id' (unique identifier), optional 'client_secret', optional 'client_id_issued_at' (Unix timestamp), and 'client_secret_expires_at' (REQUIRED if client_secret is issued; 0 means no expiration).

oauth, json

protocol-element §1.2

The client registration endpoint may optionally require an Initial Access Token — an OAuth 2.0 access token issued to a developer or client — to authorize calls to the registration endpoint and limit registration to previously authorized parties.

oauth, security

protocol-element §3.2.2

The Client Registration Error Response returns HTTP 400 with a JSON body containing a required 'error' string and optional 'error_description'. Defined error codes are: invalid_redirect_uri, invalid_client_metadata, invalid_software_statement, and unapproved_software_statement.

oauth, http, json

registry §4.1

This specification establishes the 'OAuth Dynamic Client Registration Metadata' registry with Specification Required policy. Initial entries include: redirect_uris, token_endpoint_auth_method, grant_types, response_types, client_name, client_uri, logo_uri, scope, contacts, tos_uri, policy_uri, jwks_uri, jwks, software_id, software_version, client_id, client_secret, client_id_issued_at, and client_secret_expires_at.

oauth, registry

registry §4.2

This specification establishes the 'OAuth Token Endpoint Authentication Methods' registry with Specification Required policy. Initial entries are: 'none' (public client, no secret), 'client_secret_post' (HTTP POST parameters), and 'client_secret_basic' (HTTP Basic authentication, the default).

oauth, registry, security

security-consideration §5

An authorization server SHOULD NOT issue the same client secret to multiple instances of a registered client, even if they share a client identifier, to prevent secret leakage and client impersonation.

oauth, security

security-consideration §5

Authorization servers supporting open registration SHOULD check that logo_uri, tos_uri, client_uri, and policy_uri share the same host and scheme as redirect_uris, and that all URIs resolve to valid web pages. Servers SHOULD protect users from malicious content at these URLs, for example by running malware scanning before presenting links.

oauth, security

security-consideration §5

If a server receives a registration for a client sharing the same 'software_id' and 'software_version' as an existing registration and does not expect multiple simultaneous instances, it SHOULD treat the new registration as suspect and reject it to prevent impersonation.

oauth, security

wire-format §2.2

Human-readable client metadata fields (client_name, tos_uri, policy_uri, logo_uri, client_uri) MAY be internationalized by appending a BCP 47 language tag delimited by '#' to the member name, e.g., 'client_name#ja-Jpan-JP'.

oauth, json

wire-format §3.1

The client registration request is an HTTP POST with Content-Type 'application/json'. The body is a JSON object with client metadata fields as top-level members. An optional Initial Access Token is carried as an OAuth 2.0 Bearer Token in the Authorization header.

oauth, http, json

wire-format §3.1.1

The 'software_statement' field in a registration request is a string containing the entire signed JWT. The 'client_id_issued_at' and 'client_secret_expires_at' fields are integer seconds since 1970-01-01T00:00:00Z (Unix epoch).

oauth, jose, json