OpenID Connect Core 1.0 incorporating errata set 2NAT.Consultingnat@nat.consultinghttps://nat.sakimura.org/Yubicove7jtb@ve7jtb.comhttp://www.thread-safe.com/Self-Issued Consultingmichael_b_jones@hotmail.comhttps://self-issued.info/Googlebreno@google.comhttps://stackoverflow.com/users/311376/brenoDisneycharliemortimore@gmail.comhttps://twitter.com/cmortOpenID Connect Working GroupOpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0
protocol. It enables Clients to verify the identity of the End-User based
on the authentication performed by an Authorization Server, as well as to
obtain basic profile information about the End-User in an interoperable and
REST-like manner.
This specification defines
the core OpenID Connect functionality:
authentication built on top of OAuth 2.0 and
the use of Claims to communicate information about the End-User.
It also describes the security and privacy considerations for using OpenID Connect.
OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0
protocol. It enables Clients to verify the identity of the End-User based
on the authentication performed by an Authorization Server, as well as to
obtain basic profile information about the End-User in an interoperable and
REST-like manner.
The OpenID Connect Core 1.0 specification defines
the core OpenID Connect functionality:
authentication built on top of OAuth 2.0 and
the use of Claims to communicate information about the End-User.
It also describes the security and privacy considerations for using OpenID Connect.
As background,
the OAuth 2.0 Authorization Framework
and OAuth 2.0 Bearer Token Usage
specifications provide a general framework for third-party applications
to obtain and use limited access to HTTP resources. They define
mechanisms to obtain and use Access Tokens to access resources but
do not define standard methods to provide identity information.
Notably, without profiling OAuth 2.0, it is incapable of
providing information about the authentication of an End-User.
Readers are expected to be familiar with these specifications.
OpenID Connect implements authentication as an extension to the
OAuth 2.0 authorization process.
Use of this extension is requested by Clients by including
the openid scope value
in the Authorization Request.
Information about the authentication performed is returned
in a JSON Web Token (JWT)
called an ID Token (see ).
OAuth 2.0 Authentication Servers implementing OpenID Connect
are also referred to as OpenID Providers (OPs).
OAuth 2.0 Clients using OpenID Connect
are also referred to as Relying Parties (RPs).
This specification assumes that the Relying Party has already obtained
configuration information about the OpenID Provider, including its
Authorization Endpoint and Token Endpoint locations.
This information is normally obtained via Discovery,
as described in OpenID Connect Discovery 1.0,
or may be obtained via other mechanisms.
Likewise, this specification assumes that the Relying Party has already obtained
sufficient credentials and provided information needed to use the OpenID Provider.
This is normally done via Dynamic Registration,
as described in
OpenID Connect Dynamic Client Registration 1.0,
or may be obtained via other mechanisms.
The previous versions of this specification are:
OpenID Connect Core 1.0 incorporating errata set 1OpenID Connect Core 1.0 (final)The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119.
In the .txt version of this specification,
values are quoted to indicate that they are to be taken literally.
When using these values in protocol messages,
the quotes MUST NOT be used as part of the value.
In the HTML version of this specification,
values to be taken literally are indicated by
the use of this fixed-width font.
All uses of JSON Web Signature (JWS)
and JSON Web Encryption (JWE)
data structures in this specification utilize
the JWS Compact Serialization or the JWE Compact Serialization;
the JWS JSON Serialization and the JWE JSON Serialization are not used.
This specification uses the terms "Access Token", "Authorization Code",
"Authorization Endpoint", "Authorization Grant", "Authorization Server",
"Client", "Client Authentication", "Client Identifier", "Client Secret",
"Grant Type", "Protected Resource", "Redirection URI", "Refresh Token",
"Resource Server", "Response Type", and "Token Endpoint"
defined by OAuth 2.0,
the terms "Claim Name", "Claim Value", "JSON Web Token (JWT)",
"JWT Claims Set", and "Nested JWT"
defined by JSON Web Token (JWT),
the terms "Base64url Encoding", "Header Parameter", and "JOSE Header"
defined by JSON Web Signature (JWS),
the term "User Agent" defined by RFC 7230,
and the term "Response Mode" defined by
OAuth 2.0 Multiple Response Type Encoding Practices.
This specification also defines the following terms:
Process used to achieve sufficient confidence in the binding
between the Entity and the presented Identity.
OAuth 2.0 Authorization Request using extension parameters and scopes
defined by OpenID Connect to request that the End-User be authenticated
by the Authorization Server, which is an OpenID Connect Provider,
to the Client, which is an OpenID Connect Relying Party.
Information that the Relying Party can require before it makes an
entitlement decision with respect to an authentication response.
Such context can include, but is not limited to, the actual
authentication method used or level of assurance such as
ISO/IEC 29115
entity authentication assurance level.
Set of authentication methods or procedures that are considered
to be equivalent to each other in a particular context.
Identifier for an Authentication Context Class.
OAuth 2.0 flow in which
an Authorization Code is returned from the Authorization Endpoint and
all tokens are returned from the Token Endpoint.
OAuth 2.0 Authorization Request as defined by .
Piece of information asserted about an Entity.
Syntax used for representing a Claim Value.
This specification defines Normal, Aggregated, and Distributed Claim Types.
Server that can return Claims about an Entity.
Data presented as evidence of the right to use an identity
or other resources.
Human participant.
Something that has a separate and distinct existence and that can be
identified in a context. An End-User is one example of an Entity.
Claim specified by the Client as being necessary to ensure a smooth
authorization experience for the specific task requested by the End-User.
OAuth 2.0 flow in which
an Authorization Code is returned from the Authorization Endpoint,
some tokens are returned from the Authorization Endpoint,
and others are returned from the Token Endpoint.
JSON Web Token (JWT) that contains Claims about the Authentication event.
It MAY contain other Claims.
Value that uniquely characterizes an Entity in a specific context.
Set of attributes related to an Entity.
OAuth 2.0 flow in which all tokens are returned from the Authorization Endpoint
and neither the Token Endpoint nor an Authorization Code are used.
Entity that issues a set of Claims.
Verifiable Identifier for an Issuer.
An Issuer Identifier is a case-sensitive URL
using the https scheme that
contains scheme, host, and optionally, port number and path
components and no query or fragment components.
Request or a response between an OpenID
Relying Party and an OpenID Provider.
OAuth 2.0 Authorization Server that is capable of
Authenticating the End-User and
providing Claims to a Relying Party
about the Authentication event and the End-User.
JWT that contains a set of request parameters as its Claims.
URL that references a resource containing a Request Object.
The Request URI contents MUST be retrievable by the
Authorization Server.
Identifier that identifies the Entity to a Relying Party that cannot be correlated
with the Entity's PPID at another Relying Party.
Information that (a) can be used to identify the natural person
to whom such information relates, or
(b) is or might be directly or indirectly linked to a
natural person to whom such information relates.
OAuth 2.0 Client application requiring End-User Authentication
and Claims from an OpenID Provider.
Host component of a URL used by the Relying Party's organization
that is an input to the computation of pairwise Subject Identifiers
for that Relying Party.
Personal, self-hosted OpenID Provider that issues self-signed ID Tokens.
Locally unique and never
reassigned identifier within the Issuer for the End-User,
which is intended to be consumed by the Client.
Protected Resource that, when presented with an Access Token by the Client,
returns authorized information about the End-User represented by the corresponding
Authorization Grant.
The UserInfo Endpoint
URL MUST use the https scheme and MAY contain
port, path, and query parameter components.
Process intended to establish the soundness or correctness of a construct.
Process intended to test or prove the truth or accuracy of a fact or value.
Claim specified by the Client as being useful but not Essential
for the specific task requested by the End-User.
IMPORTANT NOTE TO READERS: The terminology definitions in
this section are a normative portion of this specification,
imposing requirements upon implementations. All the
capitalized words in the text of this specification, such as
"Issuer Identifier", reference these defined terms.
Whenever the reader encounters them, their definitions
found in this section must be followed.
For more background on some of the terminology used,
see Internet Security Glossary, Version 2,
ISO/IEC 29115 Entity Authentication Assurance,
and ITU-T X.1252.
The OpenID Connect protocol, in abstract, follows the following
steps.The RP (Client) sends a request to the OpenID Provider (OP).The OP authenticates the End-User and obtains authorization.The OP responds with an ID Token and usually an Access Token.The RP can send a request with the Access Token to the UserInfo Endpoint.The UserInfo Endpoint returns Claims about the End-User.
The primary extension that OpenID Connect makes to OAuth 2.0
to enable End-Users to be Authenticated
is the ID Token data structure.
The ID Token is a security token that contains Claims about the
Authentication of an End-User by an Authorization Server when using a Client,
and potentially other requested Claims.
The ID Token is represented as a
JSON Web Token (JWT).
The following Claims are used within the ID Token
for all OAuth 2.0 flows used by OpenID Connect:
REQUIRED.
Issuer Identifier for the Issuer of the response.
The iss value is a case-sensitive URL
using the https scheme that
contains scheme, host, and optionally, port number and path
components and no query or fragment components.
REQUIRED.
Subject Identifier. A locally unique and never
reassigned identifier within the Issuer for the End-User,
which is intended to be consumed by the Client,
e.g., 24400320
or AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4.
It MUST NOT exceed 255 ASCII characters in length.
The sub value is a case-sensitive string.
REQUIRED.
Audience(s) that this ID Token is intended for.
It MUST contain the OAuth 2.0 client_id
of the Relying Party as an audience value.
It MAY also contain identifiers for other audiences.
In the general case,
the aud value is an array of
case-sensitive strings.
In the common special case when there is one audience,
the aud value MAY be a single
case-sensitive string.
REQUIRED.
Expiration time on or after which the ID Token MUST NOT be
accepted by the RP when performing authentication with the OP.
The processing of this parameter
requires that the current date/time MUST be before the
expiration date/time listed in the value. Implementers MAY
provide for some small leeway, usually no more than a few
minutes, to account for clock skew.
Its value is a JSON number representing the number of seconds from
1970-01-01T00:00:00Z as measured in UTC until the date/time.
See RFC 3339
for details regarding date/times in general and UTC in
particular.
NOTE: The ID Token expiration time is unrelated the lifetime of
the authenticated session between the RP and the OP.
REQUIRED.
Time at which the JWT was issued.
Its value is a JSON number representing the number of seconds from
1970-01-01T00:00:00Z as measured in UTC until the date/time.
Time when the End-User authentication occurred.
Its value is a JSON number representing the number of seconds from
1970-01-01T00:00:00Z as measured in UTC until the date/time.
When a max_age request is made
or when auth_time is requested
as an Essential Claim,
then this Claim is REQUIRED; otherwise, its inclusion is OPTIONAL.
(The auth_time Claim semantically
corresponds to the OpenID 2.0 PAPEauth_time response parameter.)
String value used to associate a Client session
with an ID Token, and to mitigate replay attacks.
The value is passed through unmodified from the Authentication Request to the ID Token.
If present in the ID Token,
Clients MUST verify that
the nonce Claim Value is equal to
the value of the nonce
parameter sent in the Authentication Request.
If present in the Authentication Request, Authorization Servers
MUST include a nonce Claim in the
ID Token with the Claim Value
being the nonce value sent in the Authentication Request.
Authorization Servers SHOULD perform no other processing
on nonce values used.
The nonce value is a case-sensitive string.
OPTIONAL.
Authentication Context Class Reference.
String specifying an Authentication Context Class Reference value
that identifies the Authentication Context Class that the
authentication performed satisfied.
The value "0" indicates the End-User authentication
did not meet the requirements of
ISO/IEC 29115 level 1.
For historic reasons, the value "0" is used to indicate that
there is no confidence that the same person is actually there.
Authentications with
level 0 SHOULD NOT be used to authorize access to any resource of any
monetary value.
(This corresponds to the OpenID 2.0
PAPEnist_auth_level 0.)
An absolute URI or an RFC 6711
registered name
SHOULD be used as the acr value;
registered names MUST NOT be used with a different meaning than
that which is registered.
Parties using this claim will need to agree upon the meanings of
the values used, which may be context specific.
The acr value is a case-sensitive string.
OPTIONAL.
Authentication Methods References.
JSON array of strings that are identifiers for authentication methods
used in the authentication.
For instance, values might indicate that both password and OTP
authentication methods were used.
The amr value is an array of
case-sensitive strings.
Values used in the
amr Claim
SHOULD be from those registered in the
IANA Authentication Method Reference Values registry
established by ;
parties using this claim will need to agree upon the meanings of
any unregistered values used, which may be context specific.
OPTIONAL.
Authorized party - the party to which the ID Token was issued.
If present, it MUST contain the OAuth 2.0
Client ID of this party.
The azp value is a case-sensitive string
containing a StringOrURI value.
Note that in practice, the azp Claim only occurs
when extensions beyond the scope of this specification are used;
therefore, implementations not using such extensions
are encouraged to not use azp
and to ignore it when it does occur.
ID Tokens MAY contain other Claims.
Any Claims used that are not understood MUST be ignored.
See Sections
,
,
, and
for additional Claims defined by this specification.
ID Tokens MUST be signed using JWS and optionally both signed and then
encrypted using JWS and JWE respectively, thereby providing
authentication, integrity,
non-repudiation, and optionally, confidentiality,
per .
If the ID Token is encrypted, it MUST be signed then encrypted,
with the result being a Nested JWT, as defined in .
ID Tokens MUST NOT use none
as the alg value
unless the Response Type used returns no ID Token from the
Authorization Endpoint
(such as when using the Authorization Code Flow)
and the Client explicitly requested the use of
none at Registration time.
ID Tokens SHOULD NOT use the JWS or JWE
x5u,
x5c,
jku, or
jwk
Header Parameter fields.
Instead, references to keys used are
communicated in advance using Discovery and Registration parameters,
per .
OpenID Connect performs authentication to log in the End-User
or to determine that the End-User is already logged in.
OpenID Connect returns the result of the Authentication
performed by the Server to the Client in a secure manner
so that the Client can rely on it.
For this reason, the Client is called Relying Party (RP) in this case.
The Authentication result is returned in an
ID Token, as defined in .
It has Claims expressing such information as the Issuer,
the Subject Identifier, when the authentication was performed, etc.
Authentication can follow one of three paths:
the Authorization Code Flow (response_type=code),
the Implicit Flow (response_type=id_token token
or response_type=id_token), or
the Hybrid Flow (using other Response Type values defined in
OAuth 2.0 Multiple Response Type Encoding Practices).
The flows determine how the ID Token and Access Token
are returned to the Client.
The characteristics of the three flows are summarized
in the following non-normative table.
The table is intended to provide some guidance on which flow to choose
in particular contexts.
PropertyAuthorization Code FlowImplicit FlowHybrid FlowAll tokens returned from Authorization EndpointnoyesnoAll tokens returned from Token EndpointyesnonoTokens not revealed to User AgentyesnonoClient can be authenticatedyesnoyesRefresh Token possibleyesnoyesCommunication in one round tripnoyesnoMost communication server-to-serveryesnovaries
The flow used is determined by the response_type
value contained in the Authorization Request.
These response_type values select
these flows:
"response_type" valueFlowcodeAuthorization Code Flowid_tokenImplicit Flowid_token tokenImplicit Flowcode id_tokenHybrid Flowcode tokenHybrid Flowcode id_token tokenHybrid Flow
All but the code Response Type value,
which is defined by OAuth 2.0,
are defined in the
OAuth 2.0 Multiple Response Type Encoding Practices
specification.
NOTE: While OAuth 2.0 also defines the
token Response Type value
for the Implicit Flow, OpenID Connect does not use this Response Type,
since no ID Token would be returned.
This section describes how to perform authentication using the Authorization Code Flow.
When using the Authorization Code Flow,
all tokens are returned from the Token Endpoint.
The Authorization Code Flow returns an Authorization Code to the
Client, which can then exchange it for an ID Token and an Access Token directly.
This provides the benefit of not exposing any tokens to the
User Agent and possibly other malicious applications with access
to the User Agent.
The Authorization Server can also
authenticate the Client before exchanging the Authorization Code for an
Access Token. The Authorization Code flow is suitable for Clients that
can securely maintain a Client Secret between themselves and the
Authorization Server.The Authorization Code Flow goes through the following
steps.Client prepares an Authentication Request containing the desired
request parameters.Client sends the request to the Authorization Server.Authorization Server Authenticates the End-User.Authorization Server obtains End-User Consent/Authorization.Authorization Server sends the End-User back to the Client with
an Authorization Code.Client requests a response using the Authorization Code at the
Token Endpoint.Client receives a response that contains an ID Token
and Access Token in the response body.Client validates the ID token and retrieves the End-User's
Subject Identifier.
The Authorization Endpoint performs Authentication of the
End-User.
This is done by sending the User Agent to
the Authorization Server's Authorization Endpoint for Authentication and
Authorization, using request parameters defined by OAuth 2.0 and
additional parameters and parameter values defined by OpenID Connect.
Communication with the Authorization Endpoint MUST utilize TLS.
See for more information on using TLS.
An Authentication Request is
an OAuth 2.0 Authorization Request that requests that the End-User
be authenticated by the Authorization Server.
Authorization Servers MUST support the use of the HTTP GET and
POST methods defined in RFC 7231 at the
Authorization Endpoint.
Clients MAY use the HTTP GET or
POST methods to send the
Authorization Request to the Authorization Server. If using the HTTP
GET method, the request parameters are serialized using
URI Query String Serialization, per .
If using the HTTP POST
method, the request parameters are serialized using
Form Serialization, per .
OpenID Connect uses the following OAuth 2.0 request parameters with
the Authorization Code Flow:
REQUIRED.
OpenID Connect requests MUST contain the openid scope value.
If the openid scope value is not present,
the behavior is entirely unspecified.
Other scope values MAY be present.
Scope values used that are not understood by an implementation SHOULD be ignored.
See Sections
and
for additional scope values defined by this specification.
REQUIRED.
OAuth 2.0 Response Type value that determines
the authorization processing flow to be used,
including what parameters are returned from the endpoints used.
When using the Authorization Code Flow, this value is
code.
REQUIRED.
OAuth 2.0 Client Identifier
valid at the Authorization Server.
REQUIRED.
Redirection URI to which the response will be sent.
This URI MUST exactly match one of the Redirection URI values
for the Client pre-registered at the OpenID Provider,
with the matching performed as described in
Section 6.2.1 of (Simple String Comparison).
When using this flow, the Redirection URI
SHOULD use the https scheme;
however, it MAY use the http scheme,
provided that the Client Type is
confidential,
as defined in Section 2.1 of OAuth 2.0, and
provided the OP allows the use of
http Redirection URIs in this case.
Also, if the Client is a native application,
it MAY use the http scheme with
localhost or the IP loopback literals
127.0.0.1 or [::1]
as the hostname.
The Redirection URI MAY use an alternate scheme,
such as one that is intended to identify a callback into a native application.
RECOMMENDED.
Opaque value used
to maintain state between the request and the callback.
Typically, Cross-Site Request Forgery (CSRF, XSRF)
mitigation is done by cryptographically binding the value of
this parameter with a browser cookie.
OpenID Connect also uses the following OAuth 2.0 request parameter,
which is defined in
OAuth 2.0 Multiple Response Type Encoding Practices:
OPTIONAL.
Informs the Authorization Server of the mechanism to be used
for returning parameters from the Authorization Endpoint.
This use of this parameter is NOT RECOMMENDED when the Response Mode
that would be requested is the default mode specified for the Response Type.
This specification also defines the following request parameters:
OPTIONAL.
String value used to associate a Client session
with an ID Token, and to mitigate replay attacks.
The value is passed through unmodified from the Authentication Request to the ID Token.
Sufficient entropy MUST be present in the
nonce values used to prevent
attackers from guessing values.
For implementation notes, see .
OPTIONAL.
ASCII string value that specifies
how the Authorization Server displays the authentication and
consent user interface pages to the End-User.
The defined values are:
The Authorization Server SHOULD display the
authentication and consent UI consistent with a full User Agent page
view. If the display parameter is not specified, this is the
default display mode.
The Authorization Server SHOULD display the
authentication and consent UI consistent with a popup User Agent
window.
The popup User Agent window should be of an appropriate size
for a login-focused dialog and should not obscure
the entire window that it is popping up over.
The Authorization Server SHOULD display the
authentication and consent UI consistent with a device that
leverages a touch interface.
The Authorization Server SHOULD display the
authentication and consent UI consistent with a "feature phone"
type display.
The Authorization Server MAY also attempt to detect the capabilities
of the User Agent and present an appropriate display.
If an OP receives a display value
outside the set defined above that it does not understand,
it MAY return an error or it MAY ignore it;
in practice, not returning errors for not-understood values
will help facilitate phasing in extensions using new
display values.
OPTIONAL.
Space-delimited, case-sensitive list of ASCII string values
that specifies whether the Authorization Server prompts
the End-User for reauthentication and consent.
The defined values are:
The Authorization Server
MUST NOT display any authentication or consent
user interface pages.
An error is returned
if an End-User
is not already authenticated or the Client does not have
pre-configured consent for the requested
Claims or does not fulfill other conditions for processing the request.
The error code will typically be
login_required,
interaction_required,
or another code defined in .
This can be used as a
method to check for existing authentication and/or consent.
The Authorization Server SHOULD prompt the
End-User for reauthentication.
If it cannot reauthenticate the End-User, it MUST return an error,
typically login_required.
The Authorization Server SHOULD prompt the End-User for consent
before returning information to the Client.
If it cannot obtain consent, it MUST return an error,
typically consent_required.
The Authorization Server SHOULD
prompt the End-User to select a user account. This enables
an End-User who has multiple accounts at the Authorization Server
to select amongst the multiple accounts that they might have
current sessions for.
If it cannot obtain an account selection choice made by the End-User,
it MUST return an error,
typically account_selection_required.
The prompt parameter
can be used by the Client to make sure that the End-User is
still present for the current session or to bring attention to the
request. If this parameter contains none
with any other value, an
error is returned.
If an OP receives a prompt value
outside the set defined above that it does not understand,
it MAY return an error or it MAY ignore it;
in practice, not returning errors for not-understood values
will help facilitate phasing in extensions using new
prompt values.
OPTIONAL.
Maximum Authentication Age.
Specifies the allowable elapsed time in seconds
since the last time the End-User was actively
authenticated by the OP. If the elapsed time is greater than
this value, the OP MUST attempt to actively
re-authenticate the End-User.
(The max_age request parameter corresponds to
the OpenID 2.0 PAPEmax_auth_age request parameter.)
When max_age is used, the ID Token returned
MUST include an auth_time Claim Value.
Note that max_age=0 is equivalent
to prompt=login.
OPTIONAL.
End-User's preferred languages and scripts for the user interface,
represented as a space-separated list of
BCP47 language tag values,
ordered by preference.
For instance, the value "fr-CA fr en" represents a preference
for French as spoken in Canada,
then French (without a region designation),
followed by English (without a region designation).
An error SHOULD NOT result if some or all of the requested locales
are not supported by the OpenID Provider.
OPTIONAL.
ID Token previously issued by the Authorization Server
being passed as a hint about the End-User's current or past
authenticated session with the Client.
If the End-User identified by the ID Token is already logged in
or is logged in as a result of the request
(with the OP possibly evaluating other information beyond the ID Token in this decision),
then the Authorization Server returns a positive response;
otherwise, it MUST return
an error, such as login_required.
When possible, an id_token_hint
SHOULD be present when prompt=none is used
and an invalid_request error
MAY be returned if it is not;
however, the server SHOULD respond successfully when possible,
even if it is not present.
The Authorization Server need not be listed as an
audience of the ID Token when it is used as an
id_token_hint value.
If the ID Token received by the RP from the OP is encrypted,
to use it as an id_token_hint, the Client MUST
decrypt the signed ID Token contained within the encrypted ID Token.
The Client MAY re-encrypt the signed ID token to the Authentication Server
using a key that enables the server to decrypt the ID Token
and use the re-encrypted ID token as the
id_token_hint value.
OPTIONAL.
Hint to the Authorization Server
about the login identifier the End-User might use to log in (if necessary).
This hint can be used by an RP if it first asks the End-User for their e-mail
address (or other identifier) and then wants to pass that value as a hint
to the discovered authorization service.
It is RECOMMENDED that the hint value match the value used for discovery.
This value MAY also be a phone number in the format specified for the
phone_number Claim.
The use of this parameter is left to the OP's discretion.
OPTIONAL.
Requested Authentication Context Class Reference values.
Space-separated string that specifies the acr
values that the Authorization Server is being requested to use
for processing this Authentication Request,
with the values appearing in order of preference.
The Authentication Context Class satisfied by the authentication
performed is returned as the acr Claim Value,
as specified in .
The acr Claim is requested as
a Voluntary Claim by this parameter.
Other parameters MAY be sent.
See Sections ,
,
,
,
, and
for additional Authorization Request parameters and parameter values
defined by this specification.
The Authorization Server MUST validate the request received as follows:
The Authorization Server MUST validate all the
OAuth 2.0 parameters according to the OAuth 2.0 specification.
Verify that a scope parameter is present
and contains the openid scope value.
(If no openid scope value is present,
the request may still be a valid OAuth 2.0 request
but is not an OpenID Connect request.)
The Authorization Server MUST verify that all the REQUIRED parameters
are present
and their usage conforms to this specification.
If the sub (subject) Claim
is requested with a specific value for the ID Token,
the Authorization Server MUST only send a positive response
if the End-User identified by that sub value
has an active session with the Authorization Server
or has been Authenticated as a result of the request.
The Authorization Server MUST NOT reply with an ID Token or
Access Token for a different user,
even if they have an active session with the Authorization Server.
Such a request can be made either using an
id_token_hint parameter
or by requesting a specific Claim Value
as described in ,
if the claims parameter
is supported by the implementation.
When an id_token_hint is present,
the OP MUST validate that it was the issuer of the ID Token.
The OP SHOULD accept ID Tokens when the RP identified by the ID Token
has a current session or had a recent session at the OP,
even when the exp time has passed.
As specified in OAuth 2.0,
Authorization Servers SHOULD ignore unrecognized request parameters.
If the Authorization Server encounters any error,
it MUST return an error response, per .
If the request is valid, the Authorization Server attempts
to Authenticate the End-User or determines whether the End-User is Authenticated,
depending upon the request parameter values used.
The methods used by the Authorization Server to Authenticate the End-User
(e.g., username and password, session cookies, etc.)
are beyond the scope of this specification.
An Authentication user interface MAY be displayed by
the Authorization Server, depending upon the request parameter values used
and the authentication methods used.
The Authorization Server MUST attempt to Authenticate the
End-User in the following cases:
The End-User is not already Authenticated.The Authentication Request contains the prompt parameter with the value
login. In this case, the
Authorization Server MUST reauthenticate the End-User
even if the End-User is already authenticated.The Authorization Server MUST NOT interact with the End-User
in the following case:
The Authentication Request contains the prompt parameter with the value
none. In this case,
the Authorization Server MUST return
an error if an End-User
is not already Authenticated or could not be silently Authenticated.
When interacting with the End-User,
the Authorization Server MUST employ appropriate measures against
Cross-Site Request Forgery and Clickjacking as, described in
Sections 10.12 and 10.13 of OAuth 2.0.
Once the End-User is authenticated, the Authorization Server MUST
obtain an authorization decision before releasing information
to the Relying Party.
When permitted by the request parameters used,
this MAY be done through an interactive dialogue with the End-User
that makes it clear what is being consented to
or by establishing consent via conditions for processing the request or
other means (for example, via previous administrative consent).
Sections and
describe
information release mechanisms.
An Authentication Response is an OAuth 2.0 Authorization Response
message returned from the
OP's Authorization Endpoint in response to the Authorization Request
message sent by the RP.
When using the Authorization Code Flow, the Authorization Response
MUST return the parameters defined in Section 4.1.2 of
OAuth 2.0
by adding them as query parameters to the
redirect_uri specified in the Authorization Request
using the application/x-www-form-urlencoded format,
unless a different Response Mode was specified.
For implementation notes on the contents of
the Authorization Code, see .
An Authentication Error Response is an OAuth 2.0 Authorization Error Response
message returned from the
OP's Authorization Endpoint in response to the Authorization Request
message sent by the RP.
If the End-User denies the request or the End-User authentication
fails, the OP (Authorization Server) informs the RP (Client)
by using the Error Response parameters defined in
Section 4.1.2.1 of OAuth 2.0.
(HTTP errors unrelated to RFC 6749 are returned to the User Agent using the
appropriate HTTP status code.)
Unless the Redirection URI is invalid,
the Authorization Server returns the Client to
the Redirection URI specified in the Authorization Request
with the appropriate error and state parameters.
Other parameters SHOULD NOT be returned.
If the Redirection URI is invalid,
the Authorization Server MUST NOT redirect
the User Agent to the invalid Redirection URI.
If the Response Mode value is not supported,
the Authorization Server returns
an HTTP response code of 400 (Bad Request)
without Error Response parameters,
since understanding the Response Mode is necessary
to know how to return those parameters.
In addition to the error codes defined in Section 4.1.2.1 of
OAuth 2.0, this specification also defines the following error codes:
The Authorization Server
requires End-User interaction of some form to proceed.
This error MAY be returned when the
prompt parameter value in the
Authentication Request is none,
but the Authentication Request cannot be completed
without displaying a user interface for End-User interaction.
The Authorization Server requires
End-User authentication. This error MAY be returned when the
prompt parameter value in the
Authentication Request is none,
but the Authentication Request cannot be completed
without displaying a user interface for End-User authentication.
The End-User is REQUIRED
to select a session at the Authorization Server. The End-User MAY
be authenticated at the Authorization Server with different
associated accounts, but the End-User did not select a session.
This error MAY be returned
when the prompt parameter value in the
Authentication Request is none,
but the Authentication Request cannot be completed
without displaying a user interface to prompt for a session to use.
The Authorization Server
requires End-User consent. This error MAY be returned when the
prompt parameter value in the
Authentication Request is none,
but the Authentication Request cannot be completed
without displaying a user interface for End-User consent.
The
request_uri in
the Authorization Request returns an error or contains invalid data.
The
request parameter contains an invalid
Request Object.
The OP does not support use of the
request parameter
defined in .
The OP does not support use of the
request_uri parameter
defined in .
The OP does not support use of the
registration parameter
defined in .
The error response parameters are the following:
REQUIRED. Error code.
OPTIONAL. Human-readable ASCII
encoded text description of the error.
OPTIONAL. URI of a web page that
includes additional information about the error.
OAuth 2.0 state value.
REQUIRED if the Authorization Request
included the state parameter. Set
to the value received from the Client.
When using the Authorization Code Flow, the error response
parameters are added to the query component of the Redirection URI,
unless a different Response Mode was specified.
When using the Authorization Code Flow,
the Client MUST validate the response according to RFC 6749,
especially Sections 4.1.2 and 10.12.
To obtain an Access Token, an ID Token, and optionally a Refresh Token,
the RP (Client) sends a Token Request to the Token Endpoint
to obtain a Token Response, as described in
Section 3.2 of OAuth 2.0,
when using the Authorization Code Flow.
Communication with the Token Endpoint MUST utilize TLS.
See for more information on using TLS.
A Client makes a Token Request by
presenting its Authorization Grant (in the form of
an Authorization Code) to the Token Endpoint
using the grant_type value
authorization_code, as described in
Section 4.1.3 of OAuth 2.0.
If the Client is a Confidential Client, then it MUST
authenticate to the Token Endpoint using the authentication method
registered for its client_id,
as described in .
The Client sends the parameters to the Token Endpoint
using the HTTP POST method and the
Form Serialization, per ,
as described in Section 4.1.3 of
OAuth 2.0.
The Authorization Server MUST validate the Token Request as follows:
Authenticate the Client if it was issued Client Credentials
or if it uses another Client Authentication method,
per .
Ensure the
Authorization Code was issued to the authenticated Client.
Verify that the Authorization Code is valid.
If possible,
verify that the Authorization Code has not been previously used.
Ensure that the
redirect_uri parameter value
is identical to the redirect_uri
parameter value that was included in the initial Authorization Request.
If the redirect_uri parameter value
is not present when there is only one registered
redirect_uri value,
the Authorization Server MAY return an error
(since the Client should have included the parameter)
or MAY proceed without an error
(since OAuth 2.0 permits the parameter to be omitted in this case).
Verify that the Authorization Code used was issued
in response to an OpenID Connect Authentication Request
(so that an ID Token will be returned from the Token Endpoint).
After receiving and validating a valid and authorized Token Request
from the Client, the Authorization Server returns a successful
response that includes an ID Token and an Access Token. The
parameters in the successful response are defined in Section 4.1.4
of OAuth 2.0.
The response uses the application/json
media type.
The OAuth 2.0 token_type response parameter
value MUST be Bearer,
as specified in OAuth 2.0 Bearer Token Usage,
unless another Token Type has been negotiated with the Client.
Servers SHOULD support the Bearer Token Type;
use of other Token Types is outside the scope of this specification.
Note that the token_type value is case insensitive.
In addition to the response parameters specified by OAuth 2.0, the following
parameters MUST be included in the response:
ID Token value associated with the
authenticated session.
All Token Responses that contain tokens, secrets, or other
sensitive information MUST include the following HTTP response header
fields and values:
Header NameHeader ValueCache-Controlno-storeAs specified in OAuth 2.0, Clients
SHOULD ignore unrecognized response parameters.
If the Token Request is invalid or unauthorized, the
Authorization Server constructs the error response. The parameters
of the Token Error Response are defined as in Section 5.2 of OAuth 2.0.
The HTTP response body uses the application/json
media type with HTTP response code of 400.
The Client MUST validate the Token Response as follows:
Follow the validation rules in RFC 6749,
especially those in Sections 5.1 and 10.12.
Follow the ID Token validation rules in .
Follow the Access Token validation rules in .
The contents of the ID Token are as described in .
When using the Authorization Code Flow,
these additional requirements for the following ID Token Claims apply:
OPTIONAL.
Access Token hash value.
Its value is the base64url encoding of the left-most half of the
hash of the octets of the ASCII representation of the
access_token value,
where the hash algorithm used is the hash algorithm
used in the alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
RS256, hash the
access_token value
with SHA-256, then take the left-most 128 bits and base64url-encode them.
The at_hash value is a case-sensitive string.
Clients MUST validate the ID Token in the Token Response
in the following manner:
If the ID Token is encrypted, decrypt it using the
keys and algorithms that the Client specified during Registration
that the OP was to use to encrypt the ID Token.
If encryption was negotiated with the OP at Registration time
and the ID Token is not encrypted, the RP SHOULD reject it.
The Issuer Identifier for the OpenID Provider
(which is typically obtained during Discovery)
MUST exactly match the value of the
iss (issuer) Claim.
The Client MUST validate that the
aud (audience) Claim
contains its client_id value
registered at the Issuer identified by the
iss (issuer) Claim
as an audience.
The aud (audience) Claim
MAY contain an array with more than one element.
The ID Token MUST be rejected if the ID Token does not list
the Client as a valid audience, or if it contains additional audiences not trusted by the Client.
If the implementation is using extensions
(which are beyond the scope of this specification)
that result in
the azp (authorized party) Claim being present,
it SHOULD validate the azp value
as specified by those extensions.
This validation MAY include that
when an azp (authorized party) Claim is present,
the Client SHOULD verify that its client_id
is the Claim Value.
If the ID Token is received via direct
communication between the Client and the Token Endpoint
(which it is in this flow), the TLS server
validation MAY be used to validate the issuer in place of
checking the token signature.
The Client MUST validate the signature of all other ID Tokens according to
JWS using the algorithm specified in the
JWT alg Header Parameter.
The Client MUST use the keys provided by the Issuer.
The alg value SHOULD be the default of
RS256
or the algorithm sent by the Client
in the id_token_signed_response_alg parameter
during Registration.If the JWT alg Header Parameter
uses a MAC based algorithm such as
HS256, HS384,
or HS512,
the octets of the UTF-8 representation of
the client_secret corresponding to the
client_id contained in the
aud (audience) Claim are used as the key
to validate the signature.
For MAC based algorithms, the behavior is unspecified
if the aud is multi-valued.
The current time MUST be before the time represented by the
exp Claim.
The iat Claim can be used to reject tokens that
were issued too far away from the current time, limiting the amount of
time that nonces need to be stored to prevent attacks.
The acceptable range is Client specific.
If a nonce value was sent in the Authentication Request,
a nonce Claim MUST be present
and its value checked to verify that
it is the same value as the one that was sent in the Authentication Request.
The Client SHOULD check the nonce value
for replay attacks.
The precise method for detecting replay attacks is Client specific.
If the acr Claim was requested, the
Client SHOULD check that the asserted Claim Value is appropriate.
The meaning and processing of
acr Claim Values is out of scope for this specification.
If the auth_time Claim was requested,
either through a specific request for this Claim
or by using the max_age parameter,
the Client SHOULD check the auth_time Claim
value and request re-authentication if it determines too much time
has elapsed since the last End-User authentication.
When using the Authorization Code Flow,
if the ID Token contains an at_hash Claim,
the Client MAY use it to validate the Access Token
in the same manner as for the Implicit Flow,
as defined in ,
but using the ID Token and Access Token returned from the Token Endpoint.
This section describes how to perform authentication using the Implicit Flow.
When using the Implicit Flow,
all tokens are returned from the Authorization Endpoint;
the Token Endpoint is not used.
The Implicit Flow is mainly used by Clients implemented in a browser
using a scripting language. The Access Token and ID Token are returned
directly to the Client, which may expose them to the End-User and
applications that have access to the End-User's User Agent.
The Authorization Server does not perform Client Authentication.
The Implicit Flow follows the following steps:Client prepares an Authentication Request containing the desired
request parameters.Client sends the request to the Authorization Server.Authorization Server Authenticates the End-User.Authorization Server obtains End-User Consent/Authorization.Authorization Server sends the End-User back to the Client with
an ID Token and, if requested, an Access Token.Client validates the ID token and retrieves the End-User's
Subject Identifier.
When using the Implicit Flow, the Authorization Endpoint is used
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
Authentication Requests are made
as defined in ,
except that these Authentication Request parameters
are used as follows:
REQUIRED.
OAuth 2.0 Response Type value that determines
the authorization processing flow to be used,
including what parameters are returned from the endpoints used.
When using the Implicit Flow, this value is
id_token token or
id_token.
The meanings of both of these values are defined in
OAuth 2.0 Multiple Response Type Encoding Practices.
No Access Token is returned when the value is
id_token.
NOTE: While OAuth 2.0 also defines the
token Response Type value
for the Implicit Flow, OpenID Connect does not use this Response Type,
since no ID Token would be returned.
REQUIRED.
Redirection URI to which the response will be sent.
This URI MUST exactly match one of the Redirection URI values
for the Client pre-registered at the OpenID Provider,
with the matching performed as described in
Section 6.2.1 of (Simple String Comparison).
When using this flow, the Redirection URI
MUST NOT use the http scheme
unless the Client is a native application, in which case it MAY
use the http scheme with
localhost or the IP loopback literals
127.0.0.1 or [::1]
as the hostname.
REQUIRED.
String value used to associate a Client session
with an ID Token, and to mitigate replay attacks.
The value is passed through unmodified from the Authentication Request to the ID Token.
Sufficient entropy MUST be present in the
nonce values used to prevent
attackers from guessing values.
For implementation notes, see .
When using the Implicit Flow, the Authentication Request is validated
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Implicit Flow, End-User Authentication is performed
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Implicit Flow, End-User Consent is obtained
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Implicit Flow, Authentication Responses are made
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
When using the Implicit Flow,
all response parameters are added to the fragment component
of the Redirection URI, as specified in
OAuth 2.0 Multiple Response Type Encoding Practices,
unless a different Response Mode was specified.
These parameters are returned from the Authorization Endpoint:
OAuth 2.0 Access Token.
This is returned
unless the response_type value used is
id_token.
OAuth 2.0 Token Type value.
The value MUST be Bearer or
another token_type value that the Client
has negotiated with the Authorization Server.
Clients implementing this profile MUST support the OAuth 2.0 Bearer Token Usage specification.
This profile only describes the use of bearer tokens.
This is returned in the same cases as
access_token is.
REQUIRED.
ID Token.
OAuth 2.0 state value.
REQUIRED if the
state parameter is present in the
Authorization Request. Clients MUST verify that the
state value is equal to the
value of state parameter in the
Authorization Request.
OPTIONAL.
Expiration time of the Access Token in seconds
since the response was generated.
Per Section 4.2.2 of OAuth 2.0,
no code result is returned
when using the Implicit Flow.
When using the Implicit Flow, Authorization Error Responses are made
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
Whenever Error Response parameters are returned,
such as when End-User denies the authorization or the End-User authentication fails,
the Authorization Server MUST return the error
Authorization Response in the
fragment component of the Redirection URI,
as defined in Section 4.2.2.1 of
OAuth 2.0 and
OAuth 2.0 Multiple Response Type Encoding Practices,
unless a different Response Mode was specified.
Since response parameters are returned in the Redirection URI fragment value,
the Client needs to have the User Agent parse the fragment encoded values
and pass them to on to the Client's processing logic for consumption.
See for implementation notes
on URI fragment handling.
When using the Implicit Flow,
the Client MUST validate the response as follows:
Verify that the response conforms to Section 5 of
.
Follow the validation rules in RFC 6749,
especially those in Sections 4.2.2 and 10.12.
Follow the ID Token validation rules in .
Follow the Access Token validation rules in ,
unless the response_type value used is
id_token.
To validate an Access Token issued from the Authorization Endpoint with an ID Token,
the Client SHOULD do the following:Hash the octets of the ASCII representation of
the access_token
with the hash algorithm specified in JWA for the
alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
RS256,
the hash algorithm used is SHA-256.
Take the left-most half of the hash and base64url-encode it.
The value of at_hash in the ID Token MUST
match the value produced in the previous step.
The contents of the ID Token are as described in .
When using the Implicit Flow,
these additional requirements for the following ID Token Claims apply:
Use of the nonce Claim is REQUIRED
for this flow.
Access Token hash value.
Its value is the base64url encoding of the left-most half of the
hash of the octets of the ASCII representation of the
access_token value,
where the hash algorithm used is the hash algorithm
used in the alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
RS256, hash the
access_token value
with SHA-256, then take the left-most 128 bits and base64url-encode them.
The at_hash value is a case-sensitive string.
If the ID Token is issued from the Authorization Endpoint with an
access_token value,
which is the case for the response_type value
id_token token,
this is REQUIRED;
it MAY NOT be used when no Access Token is issued,
which is the case for the response_type value
id_token.
When using the Implicit Flow, the contents of the ID Token MUST be validated
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
The Client MUST validate the signature of the ID Token according to
JWS using the algorithm specified in the
alg Header Parameter of the JOSE Header.
The value of the nonce
Claim MUST be checked to verify that
it is the same value as the one that was sent in the Authentication Request.
The Client SHOULD check the nonce value
for replay attacks.
The precise method for detecting replay attacks is Client specific.
This section describes how to perform authentication using the Hybrid Flow.
When using the Hybrid Flow,
some tokens are returned from the Authorization Endpoint
and others are returned from the Token Endpoint.
The mechanisms for returning tokens in the Hybrid Flow are specified in
OAuth 2.0 Multiple Response Type Encoding Practices.
The Hybrid Flow follows the following steps:Client prepares an Authentication Request containing the desired
request parameters.Client sends the request to the Authorization Server.Authorization Server Authenticates the End-User.Authorization Server obtains End-User Consent/Authorization.
Authorization Server sends the End-User back to the Client with
an Authorization Code and, depending on the Response Type,
one or more additional parameters.
Client requests a response using the Authorization Code at the
Token Endpoint.Client receives a response that contains an ID Token
and Access Token in the response body.Client validates the ID Token and retrieves the End-User's
Subject Identifier.
When using the Hybrid Flow, the Authorization Endpoint is used
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
Authentication Requests are made
as defined in ,
except that these Authentication Request parameters
are used as follows:
REQUIRED.
OAuth 2.0 Response Type value that determines
the authorization processing flow to be used,
including what parameters are returned from the endpoints used.
When using the Hybrid Flow, this value is
code id_token,
code token, or
code id_token token.
The meanings of these values are defined in
OAuth 2.0 Multiple Response Type Encoding Practices.
REQUIRED if the Response Type of the request is code id_token
or code id_token token and OPTIONAL when the Response Type of
the request is code token.
It is a string value used to associate a Client session
with an ID Token, and to mitigate replay attacks.
The value is passed through unmodified from the Authentication Request to the ID Token.
Sufficient entropy MUST be present in the
nonce values used to prevent
attackers from guessing values.
For implementation notes, see .
When using the Hybrid Flow, the Authentication Request is validated
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, End-User Authentication is performed
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, End-User Consent is obtained
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, Authentication Responses are made
in the same manner as for the Implicit Flow,
as defined in ,
with the exception of the differences specified in this section.
These Authorization Endpoint results are used in the following manner:
OAuth 2.0 Access Token.
This is returned
when the response_type value used is
code token,
or code id_token token.
(A token_type value is also returned in the same cases.)
ID Token.
This is returned
when the response_type value used is
code id_token or
code id_token token.
Authorization Code.
This is always returned when using the Hybrid Flow.
When using the Hybrid Flow, Authorization Error Responses are made
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
Whenever Error Response parameters are returned,
such as when End-User denies the authorization or the End-User authentication fails,
the Authorization Server MUST return the error
Authorization Response in the
fragment component of the Redirection URI,
as defined in Section 4.2.2.1 of
OAuth 2.0 and
OAuth 2.0 Multiple Response Type Encoding Practices,
unless a different Response Mode was specified.
When using the Hybrid Flow, the same requirements for
Redirection URI fragment parameter handling apply as do for
the Implicit Flow, as defined in .
Also see for implementation notes
on URI fragment handling.
When using the Hybrid Flow,
the Client MUST validate the response as follows:
Verify that the response conforms to Section 5 of
.
Follow the validation rules in RFC 6749,
especially those in Sections 4.2.2 and 10.12.
Follow the ID Token validation rules in
when the response_type value used is
code id_token or
code id_token token.
Follow the Access Token validation rules in
when the response_type value used is
code token or
code id_token token.
Follow the Authorization Code validation rules in
when the response_type value used is
code id_token or
code id_token token.
When using the Hybrid Flow, Access Tokens
returned from the Authorization Endpoint are validated
in the same manner as for the Implicit Flow,
as defined in .
To validate an Authorization Code issued from the Authorization Endpoint with an ID Token,
the Client SHOULD do the following:Hash the octets of the ASCII representation of
the code
with the hash algorithm specified in JWA for the
alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
RS256,
the hash algorithm used is SHA-256.
Take the left-most half of the hash and base64url-encode it.The value of c_hash in the ID Token MUST
match the value produced in the previous step if c_hash
is present in the ID Token.
The contents of the ID Token are as described in .
When using the Hybrid Flow,
these additional requirements for the following ID Token Claims apply
to an ID Token returned from the Authorization Endpoint:
If a nonce parameter is present in the Authentication Request,
Authorization Servers MUST include a nonce Claim in the ID Token.
Access Token hash value.
Its value is the base64url encoding of the left-most half of the
hash of the octets of the ASCII representation of the
access_token value,
where the hash algorithm used is the hash algorithm
used in the alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
RS256, hash the
access_token value
with SHA-256, then take the left-most 128 bits and base64url-encode them.
The at_hash value is a case-sensitive string.
If the ID Token is issued from the Authorization Endpoint with an
access_token value,
which is the case for the response_type value
code id_token token,
this is REQUIRED; otherwise, its inclusion is OPTIONAL.
Code hash value.
Its value is the base64url encoding of the left-most half of the
hash of the octets of the ASCII representation of the
code value,
where the hash algorithm used is the hash algorithm
used in the alg Header Parameter
of the ID Token's JOSE Header.
For instance, if the alg is
HS512, hash the
code value
with SHA-512, then take the left-most 256 bits and base64url-encode them.
The c_hash value is a case-sensitive string.
If the ID Token is issued from the Authorization Endpoint with a
code,
which is the case for the response_type values
code id_token and
code id_token token,
this is REQUIRED; otherwise, its inclusion is OPTIONAL.
When using the Hybrid Flow, the contents of an ID Token
returned from the Authorization Endpoint MUST be validated
in the same manner as for the Implicit Flow,
as defined in .
When using the Hybrid Flow, the Token Endpoint is used
in the same manner as for the Authorization Code Flow,
as defined in ,
with the exception of the differences specified in this section.
When using the Hybrid Flow, Token Requests are made
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, Token Requests are validated
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, Token Responses are made
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, Token Error Responses are made
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, Token Responses are validated
in the same manner as for the Authorization Code Flow,
as defined in .
When using the Hybrid Flow, the contents of an ID Token
returned from the Token Endpoint are
the same as for an ID Token returned from the Authorization Endpoint,
as defined in ,
with the exception of the differences specified in this section.
If an ID Token is returned from both the Authorization Endpoint
and from the Token Endpoint,
which is the case for the response_type values
code id_token and
code id_token token,
the iss and sub
Claim Values MUST be identical in both ID Tokens.
All Claims about the Authentication event present in either
SHOULD be present in both.
If either ID Token contains Claims about the End-User,
any that are present in both SHOULD have the same values in both.
Note that the OP MAY choose to return fewer Claims about the End-User
from the Authorization Endpoint, for instance, for privacy reasons.
The at_hash
and c_hash Claims
MAY be omitted from the ID Token returned from the Token Endpoint
even when these Claims are
present in the ID Token returned from the Authorization Endpoint,
because the ID Token and Access Token values returned from
the Token Endpoint are already cryptographically bound together
by the TLS encryption performed by the Token Endpoint.
When using the Hybrid Flow, the contents of an ID Token
returned from the Token Endpoint MUST be validated
in the same manner as for the Authorization Code Flow,
as defined in .
If an Access Token is returned from both the Authorization Endpoint
and from the Token Endpoint,
which is the case for the response_type values
code token and
code id_token token,
their values MAY be the same
or they MAY be different.
Note that different Access Tokens might be returned
be due to the different security characteristics
of the two endpoints and the lifetimes and
the access to resources granted by them might also be different.
When using the Hybrid Flow, the Access Token
returned from the Token Endpoint
is validated
in the same manner as for the Authorization Code Flow,
as defined in .
In some cases, the login flow is initiated by an OpenID Provider
or another party, rather than the Relying Party.
In this case, the initiator redirects to the RP at its login initiation endpoint,
which requests that the RP send an Authentication Request to a specified OP.
Note that this login initiation endpoint can be a different page at the RP
than the RP's default landing page.
RPs supporting
OpenID Connect Dynamic Client Registration 1.0
register this endpoint value using the
initiate_login_uri Registration parameter.
The party initiating the login request does so by redirecting
to the login initiation endpoint at the RP, passing the following parameters:
REQUIRED.
Issuer Identifier for the OP that the RP is to send
the Authentication Request to.
Its value MUST be a URL using the https scheme.
OPTIONAL.
Hint to the Authorization Server about the End-User to be authenticated.
The meaning of this string-valued parameter is left to the OP's discretion.
In common use cases, the value will contain an e-mail address, phone number, or username
collected by the RP before requesting authentication at the OP.
For example, this hint can be used by an RP after it asks the End-User
for their e-mail address (or other identifier),
passing that identifier as a hint to the OpenID Provider.
It is RECOMMENDED that the hint value match the value provided for discovery.
Other uses MAY include
using the sub claim from the ID Token as the hint value
or potentially other kinds of information about the requested authentication.
OPTIONAL.
URL that the RP is requested to redirect to after authentication.
RPs MUST verify the value of the
target_link_uri to prevent being used as
an open redirector to external sites.
The parameters can either be passed as query parameters using
the HTTP GET method
or be passed as HTML form values that are auto-submitted in the User Agent,
and thus are transmitted via the HTTP POST method.
Other parameters MAY be sent, if defined by extensions.
Any parameters used that are not understood MUST be ignored by the Client.
Clients SHOULD employ frame busting and other techniques to prevent
End-Users from being logged in by third party sites without their knowledge
through attacks such as Clickjacking.
Refer to Section 4.4.1.9 of for more details.
This section specifies how the Client can obtain Claims about the End-User
and the Authentication event.
It also defines a standard set of basic profile Claims.
Pre-defined sets of Claims can be requested using specific scope values
or individual Claims can be requested using the
claims request parameter.
The Claims can come directly from the OpenID Provider
or from distributed sources as well.
This specification defines a set of standard Claims.
They can be requested to be returned either in the
UserInfo Response, per ,
or in the ID Token, per .
MemberTypeDescriptionsubstringSubject - Identifier for the End-User at the Issuer.namestring
End-User's full name in displayable form including all name parts,
possibly including titles and suffixes,
ordered according to the End-User's locale and preferences.
given_namestring
Given name(s) or first name(s) of the End-User.
Note that in some cultures, people can have multiple given names;
all can be present, with the names being separated by space characters.
family_namestring
Surname(s) or last name(s) of the End-User.
Note that in some cultures, people can have multiple family names
or no family name;
all can be present, with the names being separated by space characters.
middle_namestring
Middle name(s) of the End-User.
Note that in some cultures, people can have multiple middle names;
all can be present, with the names being separated by space characters.
Also note that in some cultures, middle names are not used.
nicknamestringCasual name of the End-User that may or may not be the same as the
given_name. For instance, a nickname value of Mike
might be returned alongside a given_name
value of Michael.preferred_usernamestringShorthand name by which the End-User wishes to be referred to at the RP, such as
janedoe or j.doe.
This value MAY be any valid JSON string including
special characters such as @,
/, or whitespace.
The RP MUST NOT rely upon this value being unique,
as discussed in .
profilestring
URL of the End-User's profile page.
The contents of this Web page SHOULD be about the End-User.
picturestring
URL of the End-User's profile picture.
This URL MUST refer to an image file
(for example, a PNG, JPEG, or GIF image file),
rather than to a Web page containing an image.
Note that this URL SHOULD specifically reference
a profile photo of the End-User
suitable for displaying when describing the End-User,
rather than an arbitrary photo taken by the End-User.
websitestring
URL of the End-User's Web page or blog.
This Web page SHOULD contain information published by the End-User
or an organization that the End-User is affiliated with.
emailstring
End-User's preferred e-mail address.
Its value MUST conform to the RFC 5322
addr-spec syntax.
The RP MUST NOT rely upon this value being unique,
as discussed in .
email_verifiedboolean
True if the End-User's e-mail address has been verified; otherwise false.
When this Claim Value is true,
this means that the OP took affirmative steps
to ensure that this e-mail address was controlled by the End-User
at the time the verification was performed.
The means by which an e-mail address is verified is context specific,
and dependent upon the trust framework or contractual agreements
within which the parties are operating.
genderstring End-User's gender. Values defined by this
specification are female and
male. Other values MAY be used
when neither of the defined values are applicable.birthdatestringEnd-User's birthday, represented as an
ISO 8601-1YYYY-MM-DD
format. The year MAY be 0000, indicating that it is omitted.
To represent only the year, YYYY format is allowed. Note that
depending on the underlying platform's date related function, providing just year can
result in varying month and day, so the implementers need to take this factor into account
to correctly process the dates. zoneinfostringString from IANA Time Zone Database
representing the End-User's time zone.
For example, Europe/Paris or
America/Los_Angeles.localestringEnd-User's locale, represented as a
BCP47 language tag.
This is typically an ISO 639 Alpha-2
language code in
lowercase and an ISO 3166-1 Alpha-2
country code in uppercase, separated by a dash. For example,
en-US or fr-CA.
As a compatibility note, some implementations have used an underscore
as the separator rather than a dash, for example,
en_US; Relying Parties MAY choose to
accept this locale syntax as well.phone_numberstring
End-User's preferred telephone number. E.164
is RECOMMENDED as the format of this Claim,
for example, +1 (425) 555-1212
or +56 (2) 687 2400.
If the phone number contains an extension, it is RECOMMENDED that
the extension be represented using the
RFC 3966 extension syntax,
for example, +1 (604) 555-1234;ext=5678.
phone_number_verifiedboolean
True if the End-User's phone number has been verified; otherwise false.
When this Claim Value is true,
this means that the OP took affirmative steps
to ensure that this phone number was controlled by the End-User
at the time the verification was performed.
The means by which a phone number is verified is context specific,
and dependent upon the trust framework or contractual agreements
within which the parties are operating.
When true, the phone_number
Claim MUST be in E.164 format
and any extensions MUST be represented in RFC 3966 format.
addressJSON object
End-User's preferred postal address.
The value of the address member is
a JSON structure containing some or all of
the members defined in .
updated_atnumber
Time the End-User's information was last updated.
Its value is a JSON number representing the number of seconds from
1970-01-01T00:00:00Z as measured in UTC until the date/time.
The Address Claim represents a physical mailing address.
Implementations MAY return only a subset of the
fields of an address, depending upon
the information available and the End-User's privacy
preferences. For
example, the country and region might be returned without returning
more fine-grained address information.
Implementations MAY return just the full address
as a single string in the formatted sub-field,
or they MAY return just the individual component
fields using the other sub-fields,
or they MAY return both.
If both variants are returned,
they SHOULD represent the same address,
with the formatted address indicating how the
component fields are combined.
All the address values defined below are represented as JSON strings.
Full mailing address,
formatted for display or use on a mailing label.
This field MAY contain multiple lines, separated by newlines.
Newlines can be represented either as
a carriage return/line feed pair ("\r\n") or as
a single line feed character ("\n").
Full street address component,
which MAY include house number, street name,
Post Office Box, and multi-line extended street
address information.
This field MAY contain multiple lines, separated by newlines.
Newlines can be represented either as
a carriage return/line feed pair ("\r\n") or as
a single line feed character ("\n").
City or locality component.
State, province,
prefecture, or region component.
Zip code or
postal code component.
Country name component.
While this specification defines only a small set of Claims as
standard Claims, other Claims MAY be used in conjunction
with the standard Claims.
When using such Claims, it is RECOMMENDED that
collision-resistant names be used for the Claim Names,
as described in the
JSON Web Token (JWT) specification.
Alternatively, Private Claim Names can be safely used
when naming conflicts are unlikely to arise,
as described in the JWT specification.
Or, if specific additional Claims will have broad and general applicability,
they can be registered with Registered Claim Names,
per the JWT specification.
Human-readable Claim Values and Claim Values that reference human-readable values
MAY be represented in multiple languages and scripts.
To specify the languages and scripts, BCP47 language tags are added to member names,
delimited by a # character. For example,
family_name#ja-Kana-JP expresses the
Family Name in Katakana in Japanese, which is commonly used to index
and represent the phonetics of the Kanji representation of the same name
represented as family_name#ja-Hani-JP.
As another example, both website and
website#de Claim Values might be returned,
referencing a Web site in an unspecified language and a Web site
in German.
Since Claim Names are case sensitive, it is strongly 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" .
In particular, normally language names are spelled with lowercase characters,
region names are spelled with uppercase characters, and
scripts 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 for Claims
SHOULD only be as specific as necessary.
For instance, using fr might be sufficient
in many contexts, rather than fr-CA or
fr-FR.
Where possible, OPs SHOULD try to match requested Claim locales with
Claims it has. For instance, if the Client asks for a Claim with
a de (German) language tag and the OP
has a value tagged with de-CH (Swiss German)
and no generic German value, it would be appropriate for the OP
to return the Swiss German value to the Client.
(This intentionally moves as much of the complexity of language tag
matching to the OP as possible, to simplify Clients.)
OpenID Connect defines the following Authorization Request parameter
to enable specify the preferred languages and scripts to be used
for the returned Claims:
OPTIONAL.
End-User's preferred languages and scripts for Claims being returned,
represented as a space-separated list of
BCP47 language tag values,
ordered by preference.
An error SHOULD NOT result if some or all of the requested locales
are not supported by the OpenID Provider.
When the OP determines, either through the
claims_locales parameter,
or by other means, that the End-User and Client are
requesting Claims in only one set of languages and scripts,
it is RECOMMENDED that OPs return Claims without language tags
when they employ this language and script.
It is also RECOMMENDED that Clients be written in a manner
that they can handle and utilize Claims using language tags.
The UserInfo Endpoint is an OAuth 2.0 Protected Resource that
returns Claims about the authenticated End-User.
To obtain the requested Claims about the End-User, the Client
makes a request to the UserInfo Endpoint
using an Access Token obtained through OpenID Connect Authentication.
These Claims are normally represented by a JSON object that contains
a collection of name and value pairs for the Claims.
Communication with the UserInfo Endpoint MUST utilize TLS.
See for more information on using TLS.
The UserInfo Endpoint MUST support the use of the
HTTP GET and
HTTP POST methods
defined in RFC 7231.
The UserInfo Endpoint MUST accept Access Tokens as
OAuth 2.0 Bearer Token Usage.The UserInfo Endpoint SHOULD support the use of
Cross-Origin Resource Sharing (CORS)
and/or other methods as appropriate
to enable JavaScript Clients and other Browser-Based Clients to access it.
The Client sends the UserInfo Request using either
HTTP GET or HTTP POST.
The Access Token obtained
from an OpenID Connect Authentication Request MUST be sent as a Bearer Token,
per Section 2 of OAuth 2.0 Bearer Token Usage.
It is RECOMMENDED that the request use the
HTTP GET method and
the Access Token be sent using the
Authorization header field.
The UserInfo Claims MUST be returned as the members of a JSON object
unless a signed or encrypted response was requested during Client Registration.
The Claims defined in can be returned,
as can additional Claims not specified there.
For privacy reasons, OpenID Providers MAY elect to not return
values for some requested Claims.
It is not an error condition to not return a requested Claim.
If a Claim is not returned, that Claim Name SHOULD be
omitted from the JSON object representing the Claims; it
SHOULD NOT be present with a null or empty string value.
The sub (subject) Claim
MUST always be returned in the UserInfo Response.
NOTE: Due to the possibility of token substitution attacks
(see ),
the UserInfo Response is not guaranteed to be about the
End-User identified by the sub (subject)
element of the ID Token.
The sub Claim in the UserInfo Response
MUST be verified to exactly match the
sub Claim in the ID Token;
if they do not match, the UserInfo Response values MUST NOT be used.
Upon receipt of the UserInfo Request, the UserInfo Endpoint MUST
return the JSON Serialization of the UserInfo Response as in
in the HTTP response
body unless a
different format was specified during Registration
.
The UserInfo Endpoint MUST return a content-type header to indicate
which format is being returned.
The content-type of the HTTP response MUST be application/json if the response body is a text
JSON object;
the response body SHOULD be encoded using UTF-8.
If the UserInfo Response is
signed and/or encrypted, then the Claims are returned in a JWT and the
content-type MUST be application/jwt.
The response MAY be encrypted without also being signed.
If both signing and encryption are requested,
the response MUST be signed then encrypted,
with the result being a Nested JWT, as defined in .
If signed, the UserInfo Response
MUST contain the Claims
iss (issuer)
and aud (audience) as members.
The iss value MUST be the OP's Issuer Identifier URL.
The aud value MUST be or include the RP's Client ID value.
When an error condition occurs, the UserInfo Endpoint returns
an Error Response as defined in Section 3 of
OAuth 2.0 Bearer Token Usage.
(HTTP errors unrelated to RFC 6750 are returned to the User Agent using the
appropriate HTTP status code.)
The Client MUST validate the UserInfo Response as follows:
Verify that the OP that responded was the intended OP
through a TLS server certificate check, per
RFC 6125.If the Client has provided a
userinfo_encrypted_response_alg
parameter during Registration, decrypt the UserInfo Response
using the keys specified during Registration.If the response was signed, the Client SHOULD validate the
signature according to JWS.
OpenID Connect Clients use scope values,
as defined in Section 3.3 of OAuth 2.0,
to specify what
access privileges are being requested for Access Tokens. The scopes associated
with Access Tokens determine what resources will be available when they are
used to access OAuth 2.0 protected endpoints.
Protected Resource endpoints MAY perform different actions and
return different information based on the scope values and other parameters
used when requesting the presented Access Token.
For OpenID Connect, scopes
can be used to request that specific sets of information
be made available as Claim Values.
Claims requested by the following scopes are treated by Authorization Servers
as Voluntary Claims.
OpenID Connect defines the following scope values
that are used to request Claims:
OPTIONAL. This scope value
requests access to the End-User's default profile Claims,
which are:
name,
family_name,
given_name,
middle_name,
nickname,
preferred_username,
profile,
picture,
website,
gender,
birthdate,
zoneinfo,
locale, and
updated_at.
OPTIONAL. This scope value requests access to
the email and
email_verified Claims.
OPTIONAL. This scope value requests access to
the address Claim.
OPTIONAL. This scope value requests access to
the phone_number and
phone_number_verified Claims.
Multiple scope values MAY be used by creating a space-delimited,
case-sensitive list of ASCII scope values.
The Claims requested by the
profile,
email,
address, and
phone scope values
are returned from the UserInfo Endpoint,
as described in ,
when a response_type value is used
that results in an Access Token being issued.
However, when no Access Token is issued
(which is the case for the response_type
value id_token),
the resulting Claims are returned in the ID Token.
In some cases, the End-User will be given the option to
have the OpenID Provider decline to provide some or all
information requested by RPs.
To minimize the amount of information that the End-User is being asked
to disclose, an RP can elect to
only request a subset of the information available from the
UserInfo Endpoint.
OpenID Connect defines the following Authorization Request parameter
to enable requesting individual Claims
and specifying parameters that apply to the requested Claims:
OPTIONAL.
This parameter is used to request that specific Claims be returned.
The value is a JSON object listing the requested Claims.
The claims Authentication Request
parameter requests that specific Claims
be returned from the UserInfo Endpoint and/or in the ID Token.
It is represented as a JSON object containing lists of Claims being requested
from these locations.
Properties of the Claims being requested MAY also be specified.
Support for the claims parameter is OPTIONAL.
Should an OP not support this parameter and an RP uses it,
the OP SHOULD return a set of Claims to the RP that it believes would
be useful to the RP and the End-User using whatever heuristics it
believes are appropriate.
The claims_parameter_supported
Discovery result indicates whether the OP supports this parameter.
The claims parameter value is represented
in an OAuth 2.0 request as UTF-8 encoded JSON
(which ends up being form-urlencoded when passed as an OAuth parameter).
When used in a Request Object value, per ,
the JSON is used as the value of the
claims member.
The top-level members of the Claims request JSON object are:
OPTIONAL.
Requests that the listed individual Claims be returned
from the UserInfo Endpoint.
If present, the listed Claims are being requested to be added to
any Claims that are being requested using
scope values.
If not present, the Claims being requested from the UserInfo Endpoint
are only those requested using scope values.
When the userinfo member is used,
the request MUST also use a response_type
value that results in an Access Token being issued to the Client
for use at the UserInfo Endpoint.
OPTIONAL.
Requests that the listed individual Claims be returned
in the ID Token.
If present, the listed Claims are being requested to be added to
the default Claims in the ID Token.
If not present, the default ID Token Claims are requested,
as per the ID Token definition in
and per the additional per-flow ID Token requirements in Sections
,
,
,
and .
Other members MAY be present.
Any members used that are not understood MUST be ignored.
Note that a Claim that is not in the standard set defined in
, the (example)
http://example.info/claims/groups Claim,
is being requested.
Using the claims parameter
is the only way to request specific combinations of
Claims that cannot be specified using scope values.
The userinfo and
id_token members of the
claims request both are JSON objects
with the names of the individual Claims being requested as the member names.
The member values MUST be one of the following:
Indicates that this Claim is being requested in the default manner.
In particular, this is a Voluntary Claim.
For instance, the Claim request:
requests the given_name Claim
in the default manner.
Used to provide additional information about the Claim being
requested. This specification defines the following members:
OPTIONAL.
Indicates whether the Claim being requested is an Essential Claim.
If the value is true,
this indicates that the Claim is an Essential Claim.
For instance, the Claim request:
can be used to specify that it is Essential to return an
auth_time Claim Value.
If the value is false,
it indicates that it is a Voluntary Claim.
The default is false.
By requesting Claims as Essential Claims,
the RP indicates to the End-User
that releasing these Claims will ensure a smooth authorization
for the specific task requested by the End-User.
Note that even if the Claims are not available because
the End-User did not authorize their release or they are not present,
the Authorization Server MUST NOT generate an error when
Claims are not returned, whether they are Essential or Voluntary,
unless otherwise specified in the description of the specific claim.
OPTIONAL.
Requests that the Claim be returned with a particular value.
For instance, the Claim request:
can be used to specify that the request apply to the End-User
with Subject Identifier 248289761001.
The value of the value member
MUST be a valid value for the Claim being requested.
Definitions of individual Claims can include requirements on
how and whether the value
qualifier is to be used when requesting that Claim.
An equality comparison is used to determine whether the requested Claim value matches.
When the Claim value does not match the requested value,
the Claim is not included in the response.
If the Claim was sub,
a mismatch MUST cause the authentication to fail,
as described in .
OPTIONAL.
Requests that the Claim be returned with one of a set of values,
with the values appearing in order of preference.
This is processed equivalently to a value request,
except that a choice of acceptable Claim values is provided.
For instance, the Claim request:
specifies that it is Essential that the acr
Claim be returned with either the value
urn:mace:incommon:iap:silver or
urn:mace:incommon:iap:bronze.
The values in the values member array
MUST be valid values for the Claim being requested.
Definitions of individual Claims can include requirements on
how and whether the values
qualifier is to be used when requesting that Claim.
An equality comparison is used to determine whether the requested Claim values match.
When the Claim value does not match any of the requested values,
the Claim is not included in the response.
Other members MAY be defined to provide additional
information about the requested Claims.
Any members used that are not understood MUST be ignored.
Note that when the claims request parameter
is supported, the scope values that request Claims, as defined in
, are effectively shorthand methods for
requesting sets of individual Claims.
For example, using the scope value openid email
and a response_type that returns an Access Token
is equivalent to using the scope value openid
and the following request for individual Claims.
If the acr Claim is requested
as an Essential Claim for the ID Token
with a value or values parameter requesting
specific Authentication Context Class Reference values and
the implementation supports the claims parameter,
the Authorization Server MUST return an acr
Claim Value that matches one of the requested values.
The Authorization Server MAY ask the End-User to re-authenticate
with additional factors
to meet this requirement. If this is an Essential Claim and the
requirement cannot be met, then the Authorization Server MUST
treat that outcome as a failed authentication attempt.
Note that the RP MAY request the acr
Claim as a Voluntary Claim
by using the acr_values request parameter
or by not including "essential": true in an individual
acr Claim request.
If the Claim is not Essential and a requested value
cannot be provided, the Authorization Server SHOULD return
the session's current acr as
the value of the acr Claim.
If the Claim is not Essential, the Authorization Server is not required to
provide this Claim in its response.
If the client requests the acr Claim using
both the acr_values request parameter and
an individual acr Claim request for the ID Token
listing specific requested values,
the resulting behavior is unspecified.
As described in ,
human-readable Claim Values and Claim Values that reference human-readable values
MAY be represented in multiple languages and scripts.
Within a request for individual Claims, requested languages and scripts
for particular Claims MAY be requested by including Claim Names
that contain #-separated
BCP47 language tags
in the Claims request, using the Claim Name syntax specified in
.
For example, a Family Name in Katakana in Japanese
can be requested using the Claim Name
family_name#ja-Kana-JP
and a Kanji representation of the Family Name in Japanese
can be requested using the Claim Name
family_name#ja-Hani-JP.
A German-language Web site can be requested with the Claim Name
website#de.
If an OP receives a request for human-readable Claims in a language and script
that it does not have, any versions of those Claims returned that do not use
the requested language and script SHOULD use a language tag in the Claim Name.
Three representations of Claim Values are defined by this specification:
Claims that are directly asserted by
the OpenID Provider.
Claims that are asserted by a
Claims Provider other than the OpenID Provider but are returned
by OpenID Provider.
Claims that are asserted by a
Claims Provider other than the OpenID Provider but are returned
as references by the OpenID Provider.
Normal Claims MUST be supported.
Support for Aggregated Claims and Distributed Claims is OPTIONAL.
Normal Claims are represented as members in a JSON object. The
Claim Name is the member name and the Claim Value is the member
value.The following is a non-normative response containing Normal Claims:Aggregated and distributed Claims are represented by
using special _claim_names and
_claim_sources members
of the JSON object containing the Claims.
JSON object whose member
names are the Claim Names for the Aggregated and Distributed
Claims. The member values are references to the member names
in the _claim_sources member from which
the actual Claim Values can be retrieved.
The OP MAY omit some Claims available from referenced Claims Providers
from the set of Claim Names.
JSON object whose
member names are referenced by the member values of the
_claim_names member. The member values
contain sets of Aggregated Claims or reference locations for
Distributed Claims. The member values can have one of the
following formats depending on whether it is providing
Aggregated or Distributed Claims:
JSON object that MUST
contain the JWT member whose value is a JWT that MUST contain all the Claims
in the _claim_names object that references the
corresponding _claim_sources member.
Other members MAY be present.
Any members used that are not understood MUST be ignored.
REQUIRED.
JWT containing Claim Values.
The JWT SHOULD NOT contain a sub (subject)
Claim unless its value is an identifier for the End-User at
the Claims Provider (and not for the OpenID Provider or another party);
this typically means that a sub Claim
SHOULD NOT be provided.
JSON object that
contains the following members and values:
REQUIRED.
OAuth 2.0 resource endpoint from which the associated
Claim can be retrieved. The endpoint URL MUST return
the Claim as a JWT.
OPTIONAL.
Access Token
enabling retrieval of the Claims from the endpoint URL
by using the OAuth 2.0 Bearer Token Usage
protocol. Claims SHOULD be requested using
the Authorization Request header field and Claims Providers
MUST support this method. If the Access Token
is not available, RPs MAY need to retrieve the
Access Token out of band or use an Access Token
that was pre-negotiated between the Claims Provider and
RP, or the Claims Provider MAY reauthenticate the
End-User and/or reauthorize the RP.
Since it is not an error condition to not return a requested Claim,
RPs MUST be prepared to handle the condition that some Claims listed in
_claim_sources are not returned from the Claims Provider.
They SHOULD treat this the same as when any other requested Claim is not returned.
A sub (subject) Claim SHOULD NOT
be returned from the Claims Provider
unless its value is an identifier for the End-User at
the Claims Provider (and not for the OpenID Provider or another party);
this typically means that a sub Claim
SHOULD NOT be provided.
An iss (issuer) Claim SHOULD be included
in any JWT issued by a Claims Provider so that the Claims Provider's
keys can be retrieved for signature validation of the JWT.
The value of the Claim is the Claims Provider's Issuer Identifier URL.
In general, it is up to the OP when it is appropriate to use
Aggregated Claims and Distributed Claims.
In some cases, information about when to use what Claim Types
might be negotiated out of band between RPs and OPs.
In this non-normative example, Claims from Claims Provider A
are combined with other Claims held by the OpenID provider, with the
Claims from Claims Provider A being returned as Aggregated Claims.
Claims Provider A signs the JSON Claims, representing them in a signed JWT:
jwt_header.jwt_part2.jwt_part3.
It is this JWT that is used by the OpenID Provider.
In this non-normative example, the OpenID Provider combines
Normal Claims that it holds with references to Claims held by
two different Claims Providers, B and C, incorporating references
to some of the Claims held by B and C as Distributed Claims.
Note that not returning phone_number, which is held by Claims Provider B,
demonstrates that not all Claims held by a utilized Claims Provider need be included.
The sub (subject) and
iss (issuer) Claims from the ID Token, used together,
are the only Claims that an RP
can rely upon as a stable identifier for the End-User,
since the sub
Claim MUST be locally unique and never reassigned within the Issuer
for a particular End-User, as described in .
Therefore, the only guaranteed unique identifier for a given End-User is the
combination of the iss Claim
and the sub Claim.
All other Claims carry no such guarantees across different issuers in terms of
stability over time or uniqueness across users, and Issuers are permitted to
apply local restrictions and policies. For instance, an Issuer MAY re-use an
email Claim Value across different
End-Users at different points in time, and the claimed
email address for a given End-User MAY change
over time.
Therefore, other Claims such as email,
phone_number,
preferred_username,
and name
MUST NOT be used as unique identifiers for the End-User,
whether obtained from the ID Token or the UserInfo Endpoint.
OpenID Connect defines the following Authorization Request parameters
to enable Authentication Requests to be signed and optionally encrypted:
OPTIONAL.
This parameter enables
OpenID Connect requests to be passed in a single,
self-contained parameter and to be optionally signed and/or encrypted.
The parameter value is a Request Object value,
as specified in .
It represents the request as a JWT whose Claims
are the request parameters.
OPTIONAL.
This parameter enables
OpenID Connect requests to be passed by reference, rather than by value.
The request_uri value is a URL
referencing a resource containing a Request Object value,
which is a JWT containing the request parameters.
This URL MUST use the https scheme
unless the target Request Object is signed in a way that is verifiable by the OP.
Requests using these parameters are represented as JWTs, which are respectively
passed by value or by reference.
The ability to pass requests by reference is particularly useful for large requests.
If one of these parameters is used,
the other MUST NOT be used in the same request.
Note that the Request Objects defined here are compatible with those specified by
The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR).
The request Authorization Request parameter
enables OpenID Connect requests to be passed in a single,
self-contained parameter and to be optionally signed and/or encrypted.
It represents the request as a JWT whose Claims are the request parameters
specified in .
This JWT is called a Request Object.
Support for the request parameter is OPTIONAL.
The request_parameter_supported
Discovery result indicates whether the OP supports this parameter.
Should an OP not support this parameter and an RP uses it,
the OP MUST return the request_not_supported
error.
When the request parameter is used,
the OpenID Connect request parameter values contained in the JWT
supersede those passed using the OAuth 2.0 request syntax.
However, parameters MAY also be passed using the OAuth 2.0 request syntax
even when a Request Object is used;
this would typically be done to enable a cached,
pre-signed (and possibly pre-encrypted) Request Object value
to be used containing the fixed request parameters, while parameters that
can vary with each request, such as state and
nonce, are passed as OAuth 2.0 parameters.
So that the request is a valid OAuth 2.0 Authorization Request,
values for the response_type and
client_id parameters MUST be included
using the OAuth 2.0 request syntax, since they are REQUIRED by OAuth 2.0.
The values for these parameters MUST match those in the Request Object,
if present.
Even if a scope parameter
is present in the Request Object value,
a scope parameter MUST always be passed using
the OAuth 2.0 request syntax containing the
openid scope value to indicate to the
underlying OAuth 2.0 logic that this is an OpenID Connect request.
The Request Object MAY be signed or unsigned (unsecured).
When it is unsecured, this is indicated by use of the
none algorithm
in the JOSE Header. If signed, the Request Object
SHOULD contain the Claims
iss (issuer)
and aud (audience) as members.
The iss value SHOULD be the Client ID of the RP,
unless it was signed by a different party than the RP.
The aud value SHOULD be or include
the OP's Issuer Identifier URL.
The Request Object MAY also be encrypted using JWE
and MAY be encrypted without also being signed.
If both signing and encryption are performed, it MUST be signed then encrypted,
with the result being a Nested JWT, as defined in .
request and
request_uri parameters
MUST NOT be included in Request Objects.
The Client sends the Authorization Request to the
Authorization Endpoint.
The request_uri Authorization Request parameter enables
OpenID Connect requests to be passed by reference, rather than by value.
This parameter is used identically to the
request parameter, other than that
the Request Object value is retrieved from the resource at the specified URL,
rather than passed by value.
The request_uri_parameter_supported
Discovery result indicates whether the OP supports this parameter.
Should an OP not support this parameter and an RP uses it,
the OP MUST return the request_uri_not_supported
error.
When the request_uri parameter is used,
the OpenID Connect request parameter values contained in the referenced JWT
supersede those passed using the OAuth 2.0 request syntax.
However, parameters MAY also be passed using the OAuth 2.0 request syntax
even when a request_uri is used;
this would typically be done to enable a cached,
pre-signed (and possibly pre-encrypted) Request Object value
to be used containing the fixed request parameters, while parameters that
can vary with each request, such as state and
nonce, are passed as OAuth 2.0 parameters.
So that the request is a valid OAuth 2.0 Authorization Request,
values for the response_type and
client_id parameters MUST be included
using the OAuth 2.0 request syntax, since they are REQUIRED by OAuth 2.0.
The values for these parameters MUST match those in the Request Object,
if present.
Even if a scope parameter
is present in the referenced Request Object,
a scope parameter MUST always be passed using
the OAuth 2.0 request syntax containing the
openid scope value to indicate to the
underlying OAuth 2.0 logic that this is an OpenID Connect request.
Servers MAY cache the contents of the resources referenced by Request URIs.
If the contents of the referenced resource could ever change,
the URI SHOULD include the base64url-encoded SHA-256 hash of the
referenced resource contents as the fragment component of the URI.
If the fragment value used for a URI changes, that signals the server
that any cached value for that URI with the old fragment value
is no longer valid.
Note that Clients MAY pre-register
request_uri values using the
request_uris parameter defined in
Section 2.1 of the
OpenID Connect Dynamic Client Registration 1.0
specification.
OPs can require that request_uri values used
be pre-registered with the require_request_uri_registration
discovery parameter.
The entire Request URI SHOULD NOT exceed 512 ASCII characters.
The contents of the resource referenced by the URL MUST be a Request Object.
The scheme used in the
request_uri value MUST be https,
unless the target Request Object is signed in a way that is verifiable by the
Authorization Server.
The request_uri value MUST be reachable by the
Authorization Server and SHOULD be reachable by the Client.
The Client stores the Request Object resource either
locally or remotely at a URL the Server can access.
This URL is the Request URI, request_uri.
If the Request Object includes requested values for Claims,
it MUST NOT be revealed to anybody but the Authorization Server.
As such, the request_uri MUST have
appropriate entropy for its lifetime.
It is RECOMMENDED that it be removed
if it is known that it will not be used again
or after a reasonable timeout
unless access control measures are taken.
The Client sends the Authorization Request to the
Authorization Endpoint.Upon receipt of the Request, the Authorization Server MUST
send an HTTP GET request to the request_uri
to retrieve the referenced Request Object, unless it is already cached, and parse it
to recreate the Authorization Request parameters.Note that the RP SHOULD use a unique URI for each
request utilizing distinct parameters, or otherwise
prevent the Authorization Server from caching the request_uri.
There are several reasons that one might choose to use the
request_uri parameter:
The set of request parameters can become large and can exceed browser
URI size limitations. Passing the request parameters by reference
can solve this problem.
Passing a request_uri value, rather than
a complete request by value, can reduce request latency.
Most requests for Claims from an RP are constant.
The request_uri is a way of creating
and sometimes also signing and encrypting a constant set of
request parameters in advance.
(The request_uri value becomes an "artifact"
representing a particular fixed set of request parameters.)
Pre-registering a fixed set of request parameters at Registration time
enables OPs to cache and pre-validate the request parameters at
Registration time, meaning they need not be retrieved at request time.
Pre-registering a fixed set of request parameters at
Registration time enables OPs to vet the contents of
the request from consumer protection and other points
of views, either itself or by utilizing a third party.
When the request or
request_uri Authorization Request parameters
are used, additional steps must be performed to validate the
Authentication Request beyond those specified in
Sections ,
, or
.
These steps are to validate the JWT containing the Request Object
and to validate the Request Object itself.
If the Authorization Server has advertised JWE encryption algorithms
in the request_object_encryption_alg_values_supported and
request_object_encryption_enc_values_supported elements of its
Discovery document ,
or has supplied encryption algorithms by other means,
these are used by the Client to encrypt the JWT.
The Authorization Server MUST decrypt the JWT in accordance with
the JSON Web Encryption specification.
The result MAY be either a signed or unsigned (unsecured) Request Object.
In the former case, signature validation MUST be performed
as defined in .
The Authorization Server MUST return an error if decryption fails.
To perform Signature Validation,
the alg Header Parameter in the JOSE Header MUST match the value
of the request_object_signing_alg set during
Client Registration or a value that was
pre-registered by other means.
The signature MUST be validated against the appropriate key
for that client_id
and algorithm.
The Authorization Server MUST return an error if signature validation fails.
The Authorization Server MUST assemble
the set of Authorization Request parameters to be used
from the Request Object value
and the OAuth 2.0 Authorization Request parameters
(minus the request or
request_uri parameters).
If the same parameter exists both in
the Request Object and the OAuth Authorization Request parameters,
the parameter in the Request Object is used.
Using the assembled set of Authorization Request parameters,
the Authorization Server then validates the request
the normal manner for the flow being used, as specified in
Sections ,
, or
.
OpenID Connect supports Self-Issued OpenID Providers -
personal, self-hosted OPs that issue self-signed ID Tokens.
Self-Issued OPs use the special Issuer Identifier
https://self-issued.me.
The messages used to communicate with Self-Issued OPs are
mostly the same as those used to communicate with other OPs.
Specifications for the few additional parameters used and
for the values of some parameters in the Self-Issued case
are defined in this section.
If the input identifier for the discovery process
contains the domain self-issued.me, dynamic discovery is not performed.
Instead, then the following static configuration values are used:
NOTE: The OpenID Foundation plans to host the OpenID Provider site
https://self-issued.me/,
including its WebFinger service, so that performing discovery on it
returns the above static discovery information, enabling RPs
to not need any special processing for discovery of the Self-Issued OP.
This site will be hosted on an experimental basis.
Production implementations should not take a dependency upon it
without a subsequent commitment by the OpenID Foundation
to host the site in a manner intended for production use.
When using a Self-Issued OP, registration is not required.
The Client can proceed without registration as if it had
registered with the OP and obtained the following
Client Registration Response:
redirect_uri value of the Client.
0
NOTE: The OpenID Foundation plans to host the (stateless) endpoint
https://self-issued.me/registration/1.0/
that returns the response above, enabling RPs to not need
any special processing for registration with the Self-Issued OP.
This site will be hosted on an experimental basis.
Production implementations should not take a dependency upon it
without a subsequent commitment by the OpenID Foundation
to host the site in a manner intended for production use.
OpenID Connect defines the following Authorization Request parameter
to enable Clients to provide additional registration information to
Self-Issued OpenID Providers:
OPTIONAL.
This parameter is used by the Client to provide information about itself
to a Self-Issued OP that would normally be provided to an OP during
Dynamic Client Registration.
The value is a JSON object containing Client metadata values,
as defined in Section 2.1 of the
OpenID Connect Dynamic Client Registration 1.0
specification.
The registration parameter SHOULD NOT be used
when the OP is not a Self-Issued OP.
None of this information is REQUIRED by Self-Issued OPs,
so the use of this parameter is OPTIONAL.
The registration parameter value is represented
in an OAuth 2.0 request as a UTF-8 encoded JSON object
(which ends up being form-urlencoded when passed as an OAuth parameter).
When used in a Request Object value, per ,
the JSON object is used as the value of the
registration member.
The Registration parameters that would typically be used in requests
to Self-Issued OPs are
policy_uri,
tos_uri, and
logo_uri.
If the Client uses more than one Redirection URI, the
redirect_uris
parameter would be used to register them.
Finally, if the Client is requesting encrypted responses, it would typically use the
jwks_uri,
id_token_encrypted_response_alg and
id_token_encrypted_response_enc parameters.
The self-issued OP's Authorization Endpoint is the URI openid:.
The Client sends the Authentication Request to the Authorization Endpoint
with the following parameters:
REQUIRED.
scope parameter value,
as specified in .
REQUIRED. Constant string value id_token.
REQUIRED.
Client ID value for the Client, which in this case contains the
redirect_uri value of the Client.
Since the Client's
redirect_uri URI value is communicated
as the Client ID,
a redirect_uri parameter
is NOT REQUIRED to also be included in the request.
OPTIONAL.
id_token_hint parameter value,
as specified in .
Encrypting content to Self-Issued OPs is not supported.
OPTIONAL.
claims parameter value,
as specified in .
OPTIONAL.
This parameter is used by the Client to provide information about itself
to a Self-Issued OP that would normally be provided to an OP during
Dynamic Client Registration,
as specified in .
OPTIONAL.
Request Object value, as specified in .
Encrypting content to Self-Issued OPs is not supported.
Other parameters MAY be sent.
Note that all Claims are returned in the ID Token.
The entire URL MUST NOT exceed 2048 ASCII characters.
OpenID Connect defines the following Claim
for use in Self-Issued OpenID Provider Responses:
REQUIRED.
Public key used to check the signature of an ID Token
issued by a Self-Issued OpenID Provider,
as specified in .
The key is a bare key in JWK format
(not an X.509 certificate value).
The sub_jwk value is a JSON object.
Use of the sub_jwk Claim
is NOT RECOMMENDED when the OP is not Self-Issued.
The Self-Issued OpenID Provider response is the same as the normal Implicit Flow
response with the following refinements. Since it is an Implicit Flow
response, the response parameters will be returned in the URL fragment component,
unless a different Response Mode was specified.
The iss (issuer) Claim Value is
https://self-issued.me.
A sub_jwk Claim is present, with its value being
the public key used to check the signature of the ID Token.
The sub (subject) Claim
value is the base64url-encoded representation of
the thumbprint of
the key in the sub_jwk Claim.
This thumbprint value is computed as
the SHA-256 hash of
the octets of the UTF-8 representation of
a JWK constructed containing only the REQUIRED members to represent the key,
with the member names sorted into lexicographic order,
and with no whitespace or line breaks.
For instance,
when the kty value is
RSA, the member names
e,
kty, and
n
are the ones present in the constructed JWK used
in the thumbprint computation and appear in that order;
when the kty value is
EC, the member names
crv,
kty,
x, and
y
are present in that order.
Note that this thumbprint calculation is the same as that defined in
the JWK Thumbprint specification.
No Access Token is returned for accessing a UserInfo Endpoint,
so all Claims returned MUST be in the ID Token.
To validate the ID Token received, the Client MUST do the following:
The Client MUST validate that the value of the iss (issuer) Claim is https://self-issued.me.
If iss contains a different value,
the ID Token is not Self-Issued, and instead
it MUST be validated according to
.
The Client MUST validate that the
aud (audience) Claim
contains the value of the redirect_uri
that the Client sent in the Authentication Request as an audience.
The Client MUST validate the signature of the ID Token according to
JWS using the algorithm specified in the
alg Header Parameter of the JOSE Header,
using the key in the sub_jwk Claim;
the key is a bare key in JWK format
(not an X.509 certificate value).
The alg value SHOULD be the default of
RS256.
It MAY also be ES256.
The Client MUST validate that the sub Claim
value is the base64url-encoded representation of
the thumbprint of
the key in the sub_jwk Claim,
as specified in .
The current time MUST be before the time represented by the
exp Claim
(possibly allowing for some small leeway to account for clock skew).
The iat Claim can be used to reject tokens that
were issued too far away from the current time, limiting the amount of
time that nonces need to be stored to prevent attacks.
The acceptable range is Client specific.
A nonce Claim MUST be present
and its value checked to verify that
it is the same value as the one that was sent in the Authentication Request.
The Client SHOULD check the nonce value
for replay attacks.
The precise method for detecting replay attacks is Client specific.
A Subject Identifier is a locally unique and never
reassigned identifier within the Issuer for the End-User,
which is intended to be consumed by the Client.
Two Subject Identifier types are defined by this specification:
This provides the same sub (subject) value to all Clients.
It is the default if the provider has no subject_types_supported
element in its discovery document.
This provides a different sub
value to each Client, so as not to enable Clients to correlate
the End-User's activities without permission.
The OpenID Provider's Discovery document MUST list
its supported Subject Identifier types in the
subject_types_supported element.
If there is more than one type listed in the array, the Client MAY elect to
provide its preferred identifier type using the
subject_type parameter during Registration.
When pairwise Subject Identifiers are used,
the OpenID Provider MUST calculate a unique
sub (subject) value for each
Sector Identifier. The Subject Identifier value MUST NOT be reversible
by any party other than the OpenID Provider.
Providers that use pairwise sub values
and support
Dynamic Client Registration
SHOULD use the sector_identifier_uri parameter.
It provides a way for a group of websites under common administrative
control to have consistent pairwise sub
values independent of the individual domain names.
It also provides a way for Clients to change
redirect_uri domains without having to
re-register all of their users.
If the Client has not provided a value for
sector_identifier_uri in
Dynamic Client Registration,
the Sector Identifier
used for pairwise identifier calculation is the host component
of the registered redirect_uri.
If there are multiple hostnames in the registered
redirect_uris, the Client MUST register a
sector_identifier_uri.When a sector_identifier_uri
is provided, the host component of that URL is used as
the Sector Identifier for the pairwise identifier calculation.
The value of the sector_identifier_uri
MUST be a URL using the https scheme that points to
a JSON file containing an array of
redirect_uri values.
The values of the registered redirect_uris
MUST be included in the elements of the array.
Any algorithm with the following properties
can be used by OpenID Providers to
calculate pairwise Subject Identifiers:
The Subject Identifier value MUST NOT be reversible
by any party other than the OpenID Provider.
Distinct Sector Identifier values MUST result in
distinct Subject Identifier values.
The algorithm MUST be deterministic.
Three example methods are:
The Sector Identifier can be concatenated with a local account ID and a salt
value that is kept secret by the Provider. The concatenated string is then
hashed using an appropriate algorithm.
Calculate sub = SHA-256 ( sector_identifier || local_account_id || salt ).
The Sector Identifier can be concatenated with a local account ID and a salt
value that is kept secret by the Provider. The concatenated string is then
encrypted using an appropriate algorithm.
Calculate sub = AES-128 ( sector_identifier || local_account_id || salt ).
The Issuer creates a Globally Unique Identifier (GUID) for the pair of
Sector Identifier and local account ID and stores this value.
This section defines a set of Client Authentication methods
that are used by Clients to authenticate to the Authorization Server
when using the Token Endpoint.
During Client Registration, the RP (Client) MAY register a Client Authentication method.
If no method is registered, the default method is client_secret_basic.
These Client Authentication methods are:
Clients that have received a client_secret value
from the Authorization Server authenticate with the Authorization Server
in accordance with Section 2.3.1 of OAuth 2.0 using the HTTP Basic authentication scheme.
Clients that have received a client_secret value
from the Authorization Server, authenticate with the Authorization Server
in accordance with Section 2.3.1 of OAuth 2.0 by including the Client Credentials in the request body.
Clients that have received a client_secret value
from the Authorization Server create a JWT using an
HMAC SHA algorithm, such as HMAC SHA-256.
The HMAC (Hash-based Message Authentication Code) is calculated using
the octets of the UTF-8 representation of
the client_secret as the shared key.
The Client authenticates in accordance with JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants and
Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.
The JWT MUST contain the following REQUIRED Claim Values and
MAY contain the following OPTIONAL Claim Values:
REQUIRED.
Issuer.
This MUST contain the client_id of the OAuth Client.
REQUIRED.
Subject.
This MUST contain the client_id of the OAuth Client.
REQUIRED.
Audience.
The aud (audience) Claim.
Value that identifies the Authorization Server as an intended audience.
The Authorization Server MUST verify that it is an intended audience
for the token.
The Audience SHOULD be the URL of the
Authorization Server's Token Endpoint.
REQUIRED.
JWT ID.
A unique identifier for the token,
which can be used to prevent reuse of the token.
These tokens MUST only be used once,
unless conditions for reuse were negotiated between the parties;
any such negotiation is beyond the scope of this specification.
REQUIRED.
Expiration time on or after which the JWT MUST NOT be
accepted for processing.
OPTIONAL.
Time at which the JWT was issued.
The JWT MAY contain other Claims.
Any Claims used that are not understood MUST be ignored.
The authentication token MUST be sent as the value of the
client_assertion parameter.The value of the
client_assertion_type parameter
MUST be "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
per .
Clients that have registered a public key sign a JWT using
that key.
The Client authenticates in accordance with JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants and
Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.
The JWT MUST contain the following REQUIRED Claim Values and
MAY contain the following OPTIONAL Claim Values:
REQUIRED.
Issuer.
This MUST contain the client_id of the OAuth Client.
REQUIRED.
Subject.
This MUST contain the client_id of the OAuth Client.
REQUIRED.
Audience.
The aud (audience) Claim.
Value that identifies the Authorization Server as an intended audience.
The Authorization Server MUST verify that it is an intended audience
for the token.
The Audience SHOULD be the URL of the
Authorization Server's Token Endpoint.
REQUIRED.
JWT ID.
A unique identifier for the token,
which can be used to prevent reuse of the token.
These tokens MUST only be used once,
unless conditions for reuse were negotiated between the parties;
any such negotiation is beyond the scope of this specification.
REQUIRED.
Expiration time on or after which the JWT MUST NOT be
accepted for processing.
OPTIONAL.
Time at which the JWT was issued.
The JWT MAY contain other Claims.
Any Claims used that are not understood MUST be ignored.
The authentication token MUST be sent as the value of the
client_assertion parameter.The value of the
client_assertion_type parameter
MUST be "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
per .
The Client does not authenticate itself at the Token Endpoint,
either because it uses only the Implicit Flow (and so does not use the Token Endpoint)
or because it is a Public Client with no Client Secret or other authentication mechanism.
Depending on the transport through which the messages are sent, the
integrity of the message might not be guaranteed and the originator of the
message might not be authenticated. To mitigate these risks,
ID Token, UserInfo Response, Request Object,
and Client Authentication JWT values can utilize
JSON Web Signature (JWS) to sign their contents.
To achieve message confidentiality, these values can also use
JSON Web Encryption (JWE) to encrypt their contents.
When the message is both signed and encrypted, it MUST be
signed first and then encrypted, per ,
with the result being a Nested JWT, as specified in .
Note that all JWE encryption methods perform integrity checking.
The OP advertises its supported signing and encryption algorithms
in its Discovery document
or may supply this information by other means.
The RP declares its required signing and encryption algorithms
in its Dynamic Registration request
or may communicate this information by other means.
The OP advertises its public keys
via its Discovery document
or may supply this information by other means.
The RP declares its public keys
via its Dynamic Registration request
or may communicate this information by other means.
The signing party MUST select a signature algorithm
based on the algorithms supported by the recipient.
When using RSA or ECDSA Signatures,
the alg Header Parameter value
of the JOSE Header MUST be set to an appropriate algorithm
as defined in JSON Web Algorithms.
The private key used to sign the content MUST be associated with
a public key used for signature verification published by the sender
in its JWK Set document.
If there are multiple keys in the referenced JWK Set document, a
kid value MUST be provided in the JOSE Header.
The key usage of the respective keys MUST support signing.
When using MAC-based signatures,
the alg Header Parameter value
of the JOSE Header MUST be set to a MAC algorithm,
as defined in JSON Web Algorithms.
The MAC key used is
the octets of the UTF-8 representation of
the client_secret value.
See for a discussion of
entropy requirements for client_secret values.
Symmetric signatures MUST NOT be used by public (non-confidential) Clients
because of their inability to keep secrets.
See for Security Considerations
about the need for signed requests.
Rotation of signing keys can be accomplished with the following approach. The signer publishes
its keys in a JWK Set at its jwks_uri location
and includes the kid of the
signing key in the JOSE Header of each message
to indicate to the verifier which key is to be used to validate the signature. Keys can be rolled over
by periodically adding new keys to the JWK Set at the jwks_uri location.
The signer can begin using a new key at its
discretion and signals the change to the verifier using the kid value.
The verifier knows to go back to the jwks_uri location
to re-retrieve the keys when it sees an unfamiliar
kid value. The JWK Set document at the jwks_uri
SHOULD retain recently decommissioned signing keys for a reasonable period of time to facilitate a
smooth transition.
The encrypting party MUST select an encryption algorithm
based on the algorithms supported by the recipient.
The public key to which the content was encrypted MUST be
a public key used for encryption published by the recipient
in its JWK Set document.
If there are multiple keys in the referenced JWK Set document, a
kid value MUST be provided in the JOSE Header.
Use the supported RSA encryption algorithm to encrypt a random
Content Encryption Key to be used for encrypting
the signed JWT.
The key usage of the respective keys MUST include encryption.
Create an ephemeral Elliptic Curve public key for the epk
element of the JOSE Header.
The other public key used for the key agreement computation MUST be
a public key published by the recipient
in its JWK Set document.
If there are multiple keys in the referenced JWK Set document, a
kid value MUST be provided in the JOSE Header.
Use the ECDH-ES algorithm to agree upon a
Content Encryption Key to be used for encrypting
the signed JWT.
The key usage of the respective keys MUST support encryption.
The symmetric encryption key is derived from the
client_secret value by
using the left-most bits of a truncated SHA-2 hash of
the octets of the UTF-8 representation of
the client_secret.
For keys of 256 or fewer bits, SHA-256 is used;
for keys of 257-384 bits, SHA-384 is used;
for keys of 385-512 bits, SHA-512 is used.
The hash value MUST be truncated retaining the left-most bits to the appropriate bit length
for the AES key wrapping or direct encryption algorithm used,
for instance, truncating the SHA-256 hash
to 128 bits for A128KW.
If a symmetric key with greater than 512 bits is needed, a different method
of deriving the key from the client_secret
would have to be defined by an extension.
Symmetric encryption MUST NOT be used by public (non-confidential) Clients
because of their inability to keep secrets.
See for Security Considerations
about the need for encrypted requests.
Rotating encryption keys necessarily uses a different process than the one for signing keys because
the encrypting party starts the process and thus cannot rely on
a change in kid as a signal
that keys need to change. The encrypting party
still uses the kid Header Parameter in the JWE
to tell the decrypting party which private key to use to decrypt, however, the encrypting party
needs to first select the most appropriate key from those provided in the JWK Set at
the recipient's jwks_uri location.
To rotate keys, the decrypting party can publish new keys
at its jwks_uri location
and remove from the JWK Set those that are being decommissioned.
The jwks_uri SHOULD include a Cache-Control
header in the response that contains a max-age directive,
as defined in RFC 7234,
which enables the encrypting party to safely cache the JWK Set and not have to re-retrieve
the document for every encryption event. The decrypting party SHOULD remove decommissioned keys
from the JWK Set referenced by jwks_uri
but retain them internally for some reasonable
period of time, coordinated with the cache duration, to facilitate a smooth transition between keys
by allowing the encrypting party some time to obtain the new keys. The cache duration SHOULD also
be coordinated with the issuance of new signing keys, as described in .
OpenID Connect defines the following scope value
to request offline access:
OPTIONAL. This scope value requests
that an OAuth 2.0 Refresh Token be issued that can be used to
obtain an Access Token that grants access to the End-User's
UserInfo Endpoint even when the End-User is not present (not logged in).
When offline access is requested, a prompt
parameter value of consent MUST be used
unless other conditions for processing the request permitting offline access
to the requested resources are in place.
The OP MUST always obtain consent to returning a Refresh Token
that enables offline access to the requested resources.
A previously saved user consent is not always sufficient to grant offline access.
Upon receipt of a scope parameter containing the
offline_access value, the Authorization Server:
MUST ensure that the prompt parameter contains
consent
unless other conditions for processing the request permitting offline access
to the requested resources are in place;
unless one or both of these conditions are fulfilled, then
it MUST ignore the offline_access request,
MUST ignore the offline_access request
unless the Client is using a response_type
value that would result in an Authorization Code being returned,
MUST explicitly receive or have consent for offline access when
the registered application_type
is web,
SHOULD explicitly receive or have consent for offline access when
the registered application_type
is native.
The use of Refresh Tokens is not exclusive to the
offline_access use case.
The Authorization Server MAY grant Refresh Tokens
in other contexts that are beyond the scope of this specification.
A request to the Token Endpoint can also use a Refresh Token
by using the grant_type value
refresh_token,
as described in Section 6 of
OAuth 2.0.
This section defines the behaviors for OpenID Connect
Authorization Servers when Refresh Tokens are used.
To refresh an Access Token, the Client MUST
authenticate to the Token Endpoint using the authentication method registered
for its client_id, as documented in
.
The Client sends the parameters via HTTP POST
to the Token Endpoint using
Form Serialization, per .
The Authorization Server MUST validate the Refresh Token,
MUST verify that it was issued to the Client,
and must verify that the Client successfully authenticated
it has a Client Authentication method.
Upon successful validation of the Refresh Token,
the response body is the Token Response of
except that it might not contain an id_token.
If an ID Token is returned as a result of a token refresh request,
the following requirements apply:
its iss Claim Value MUST be the same as
in the ID Token issued when the original authentication occurred,
its sub Claim Value MUST be the same as
in the ID Token issued when the original authentication occurred,
its iat Claim MUST represent
the time that the new ID Token is issued,
its aud Claim Value MUST be the same as
in the ID Token issued when the original authentication occurred,
if the ID Token contains an auth_time Claim,
its value MUST represent the time of the original authentication - not
the time that the new ID token is issued,
if the implementation is using extensions
(which are beyond the scope of this specification)
that result in
the azp (authorized party) Claim being present,
those extensions might specify that
its azp Claim Value MUST be the same as
in the ID Token issued when the original authentication occurred;
likewise, they might specify that
if no azp Claim was present in the original
ID Token, one MUST NOT be present in the new ID Token,
it SHOULD NOT have a nonce Claim,
even when the ID Token issued
at the time of the original authentication
contained nonce;
however, if it is present,
its value MUST be the same as in the ID Token issued
at the time of the original authentication,
and
otherwise, the same rules apply as apply when issuing an ID Token
at the time of the original authentication.
If the Refresh Request is invalid or unauthorized, the
Authorization Server returns the
Token Error Response as defined in Section 5.2 of OAuth 2.0.
Messages are serialized using one of the following methods:
Query String SerializationForm SerializationJSON Serialization
This section describes the syntax of these serialization methods;
other sections describe when they can and must be used.
Note that not all methods can be used for all messages.
In order to serialize the parameters using the Query String
Serialization, the Client constructs the string by adding the
parameters and values to the query component of a URL using the application/x-www-form-urlencoded format as
defined by .
Query String Serialization is typically used in
HTTP GET requests.
The same serialization method is also used when adding
parameters to the fragment component of a URL.
Parameters and their values are Form Serialized by adding the
parameter names and values to the entity body of the HTTP request using
the application/x-www-form-urlencoded format
as defined by .
Form Serialization is typically used in HTTP POST requests.
The parameters are serialized into a JSON object structure by adding each
parameter at the highest structure level. Parameter names and string
values are represented as JSON strings.
Numerical values are represented as JSON numbers.
Boolean values are represented as JSON booleans.
Omitted parameters and parameters with no value SHOULD be omitted
from the object and not represented by
a JSON null value, unless otherwise specified.
A parameter MAY have a JSON object or a JSON array as its value.
Processing some OpenID Connect messages requires comparing
values in the messages to known values. For example, the Claim
Names returned by the UserInfo Endpoint might be compared to
specific Claim Names such as sub. Comparing Unicode strings,
however, has significant security implications.
Therefore, comparisons between JSON strings and other Unicode
strings MUST be performed as specified below:
Remove any JSON applied escaping to produce an array of
Unicode code points.
Unicode Normalization MUST NOT
be applied at any point to either the JSON string or to
the string it is to be compared against.
Comparisons between the two strings MUST be performed as a
Unicode code point to code point equality comparison.
In several places, this specification uses space-delimited
lists of strings. In all such cases, a single ASCII space
character (0x20) MUST be used as the delimiter.
This specification defines features used by both Relying Parties and
OpenID Providers.
It is expected that some OpenID Providers will require
static, out-of-band configuration of RPs using them,
whereas others will support dynamic usage by RPs without
a pre-established relationship between them.
For that reason, the mandatory-to-implement features for OPs
are listed below in two groups:
the first for all OPs and the second for "Dynamic" OpenID Providers.
All OpenID Providers MUST implement the following features defined in this specification.
This list augments the set of features that are already listed elsewhere
as being "REQUIRED" or are described with a "MUST",
and so is not, by itself, a comprehensive set of implementation requirements for OPs.
OPs MUST support signing ID Tokens with the RSA SHA-256 algorithm
(an alg value of
RS256),
unless the OP only supports returning ID Tokens from the Token Endpoint
(as is the case for the Authorization Code Flow)
and only allows Clients to register specifying
none as the requested ID Token signing algorithm.
OPs MUST support the prompt parameter,
as defined in , including the specified
user interface behaviors such as none
and login.
OPs MUST support the display parameter,
as defined in .
(Note that the minimum level of support required for this parameter is
simply that its use must not result in an error.)
OPs MUST support requests for preferred languages and scripts
for the user interface and for Claims via the
ui_locales and
claims_locales request parameters,
as defined in .
(Note that the minimum level of support required for these parameters is
simply to have their use not result in errors.)
OPs MUST support returning the time at which the End-User authenticated
via the auth_time Claim, when requested,
as defined in .
OPs MUST support enforcing a maximum authentication age
via the max_age parameter,
as defined in .
OPs MUST support requests for specific
Authentication Context Class Reference values
via the acr_values parameter,
as defined in .
(Note that the minimum level of support required for this parameter is
simply to have its use not result in an error.)
In addition to the features listed above,
OpenID Providers supporting dynamic establishment of relationships with RPs
that they do not have a pre-configured relationship with
MUST also implement the following features defined in this and related specifications.
These OpenID Providers MUST support the
id_token Response Type and
all that are not Self-Issued OPs MUST also support the
code and
id_token token Response Types.
These OPs MUST support Discovery,
as defined in
OpenID Connect Discovery 1.0.
These OPs MUST support Dynamic Client Registration,
as defined in
OpenID Connect Dynamic Client Registration 1.0.
All dynamic OPs that issue Access Tokens MUST support the UserInfo Endpoint,
as defined in .
(Self-Issued OPs do not issue Access Tokens.)
These OPs MUST publish their public keys as bare JWK keys
(which MAY also be accompanied by X.509 representations of those keys).
These OPs MUST support requests made using a Request Object value
that is retrieved from a Request URI that is provided
with the request_uri parameter,
as defined in .
Some OpenID Connect installations can use a pre-configured set of
OpenID Providers and/or Relying Parties. In those cases, it might not be
necessary to support dynamic discovery of information about identities
or services or dynamic registration of Clients.However, if installations choose to support unanticipated
interactions between Relying Parties and OpenID Providers that do not
have pre-configured relationships, they SHOULD accomplish this by
implementing the facilities defined in the OpenID Connect Discovery 1.0 and OpenID Connect Dynamic Client Registration 1.0
specifications.
In general, it is up to Relying Parties which features they use
when interacting with OpenID Providers.
However, some choices are dictated by the nature of their OAuth Client,
such as whether it is a Confidential Client, capable of keeping secrets,
in which case the Authorization Code Flow may be appropriate,
or whether it is a Public Client, for instance, a
User Agent Based Application or a statically registered Native Application,
in which case the Implicit Flow may be appropriate.
When using OpenID Connect features, those listed as being
"REQUIRED" or are described with a "MUST" are
mandatory to implement, when used by a Relying Party.
Likewise, those features that are described as "OPTIONAL"
need not be used or supported unless they provide value
in the particular application context.
Finally, when interacting with OpenID Providers that support Discovery,
the OP's Discovery document can be used to dynamically determine
which OP features are available for use by the RP.
When using the Authorization Code or Hybrid flows,
an ID Token is returned from the Token Endpoint
in response to a Token Request using an Authorization Code.
Some implementations may choose to encode state about
the ID Token to be returned in the Authorization Code value.
Others may use the Authorization Code value
as an index into a database storing this state.
The nonce parameter value needs to include
per-session state and be unguessable to attackers.
One method to achieve this for Web Server Clients is to store a cryptographically random value
as an HttpOnly session cookie and use a cryptographic hash of the value
as the nonce parameter.
In that case, the nonce in the returned
ID Token is compared to the hash of the session cookie
to detect ID Token replay by third parties.
A related method applicable to JavaScript Clients and other Browser-Based Clients is to store the cryptographically random value
in HTML5 local storage and use a cryptographic hash of this value.
When response parameters are returned in the Redirection URI fragment value,
the Client needs to have the User Agent parse the fragment encoded values
and pass them to on to the Client's processing logic for consumption.
User Agents that have direct access to cryptographic APIs may be able to be
self-contained, for instance, with all Client code being written in JavaScript.
However, if the Client does not run entirely in the User Agent,
one way to achieve this
is to post them to a Web Server Client for validation.
The following is an example of a JavaScript file that a Client might host at its
redirect_uri. This is loaded by the redirect from
the Authorization Server. The fragment component is parsed and then sent by POST to a URI
that will validate and use the information received.
NOTE: Potential compatibility issues that were previously described in
the original version of this specification have since been addressed.
These related OPTIONAL specifications MAY be used in
combination with this specification to provide additional functionality:
OpenID Connect Discovery 1.0 -
Defines how Relying Parties dynamically discover information about OpenID Providers
OpenID Connect Dynamic Client Registration 1.0 -
Defines how Relying Parties dynamically register with OpenID Providers
OAuth 2.0 Form Post Response Mode -
Defines how to return OAuth 2.0 Authorization Response parameters
(including OpenID Connect Authentication Response parameters)
using HTML form values that are auto-submitted by the User Agent
using HTTP POSTOpenID Connect RP-Initiated Logout 1.0 -
Defines how a Relying Party
requests that an OpenID Provider log out the End-User
OpenID Connect Session Management 1.0 -
Defines how to manage OpenID Connect sessions, including postMessage-based logout and RP-initiated logout functionality
OpenID Connect Front-Channel Logout 1.0 -
Defines a front-channel logout mechanism that does not use an OP iframe on RP pages
OpenID Connect Back-Channel Logout 1.0 -
Defines a logout mechanism that uses direct back-channel communication between the OP and RPs being logged out
These implementer's guides are intended to serve as self-contained references
for implementers of basic Web-based Relying Parties:
OpenID Connect Basic Client Implementer's Guide 1.0 -
Implementer's guide containing a subset of this specification
that is intended for use by basic
Web-based Relying Parties using the
OAuth Authorization Code FlowOpenID Connect Implicit Client Implementer's Guide 1.0 -
Implementer's guide containing a subset of this specification
that is intended for use by basic
Web-based Relying Parties using the
OAuth Implicit Flow
This specification references the security considerations defined in
Section 10 of OAuth 2.0, and
Section 5 of OAuth 2.0 Bearer Token Usage.
Furthermore, the OAuth 2.0 Threat Model and Security
Considerations specification provides an extensive list of threats and controls
that apply to this specification as well,
given that it is based upon OAuth 2.0.
ISO/IEC 29115
also provides threats and controls that
implementers need to take into account.
Implementers are highly advised to
read these references in detail and apply the countermeasures described therein.
In addition, the following list of attack vectors and remedies are
also considered.
If appropriate measures are not taken, a request might be disclosed to
an attacker, posing security and privacy threats.In addition to what is stated in Section 5.1.1 of ,
this standard provides a way to provide the confidentiality of the request
end to end through the
use of request or request_uri
parameters, where the content of the request
is an encrypted JWT with the appropriate key and cipher.
This protects even against a compromised User Agent
in the case of indirect request.A malicious Server might masquerade as the legitimate server
using various means. To detect such an attack, the Client needs to authenticate
the server.In addition to what is stated in Section 5.1.2 of ,
this standard provides a way to authenticate the Server through either the
use of Signed or Encrypted JWTs
with an appropriate key and cipher.
An Attacker might generate a bogus token or modify the token contents
(such as Claims values or the signature)
of an existing parseable token, causing the RP to grant
inappropriate access to the Client. For example, an Attacker might modify
the parseable token to extend the validity period; a Client might modify the
parseable token to have access to information that they should not be able to view.
There are two ways to mitigate this attack:The token can be digitally signed by the OP. The Relying
Party SHOULD validate the digital signature to verify that it was
issued by a legitimate OP.The token can be sent over a protected channel such as TLS.
See for more information on using TLS.
In this specification, the token is always sent over a TLS protected channel.
Note however, that this measure is only a defense against third party attackers
and is not applicable to the case where the Client is the attacker.
Access Tokens are credentials used to access Protected
Resources, as defined in Section 1.4 of
OAuth 2.0. Access Tokens represent
an End-User's authorization and MUST NOT be exposed to
unauthorized parties.
The server response might contain authentication data and Claims
that include sensitive Client information. Disclosure of the
response contents can make the Client vulnerable to other types of
attacks.
The server response disclosure can be mitigated in the following two
ways:
Using the code Response Type.
The response is sent over a TLS protected
channel, where the Client is authenticated by the
client_id and
client_secret.For other Response Types,
the signed response can be encrypted with the Client's
public key or a shared secret as an encrypted JWT
with an appropriate key and cipher.A response might be repudiated by the server if the proper mechanisms are not in place.
For example, if a Server does not digitally sign a response, the Server can claim that it was not
generated through the services of the Server.To mitigate this threat, the response MAY be digitally signed by
the Server using a key that supports non-repudiation. The Client SHOULD validate
the digital signature to verify that it was issued by a legitimate
Server and its integrity is intact.Since it is possible for a
compromised or malicious Client to send a request to the wrong party,
a Client that was authenticated
using only a bearer token can repudiate any transaction.
To mitigate this threat, the Server MAY require that the
request be digitally signed by
the Client using a key that supports non-repudiation.
The Server SHOULD validate
the digital signature to verify that it was issued by a legitimate
Client and its integrity is intact.An Attacker uses the Access Token generated for one resource to
obtain access to a second resource.
To mitigate this threat, the Access Token SHOULD be audience
and scope restricted. One way of implementing it is to include
the identifier of the resource for whom it was generated as audience.
The resource verifies that
incoming tokens include its identifier as the audience of the
token.An Attacker attempts to use a one-time use token such as
an Authorization Code that has already
been used once with the intended Resource.
To mitigate this threat, the token SHOULD include a timestamp
and a short validity lifetime.
The Relying Party then checks the timestamp and lifetime values
to ensure that the token is currently valid.Alternatively, the server MAY record the state of the use of
the token and check the status for each request.In addition to the attack patterns described in
Section 4.4.1.1 of ,
an Authorization Code can be captured in the User Agent where the TLS
session is terminated if the User Agent is infected by malware.
However, capturing it is not useful as long as either
Client Authentication or an encrypted response is used.
Token Substitution is a class of attacks in which a malicious user
swaps various tokens, including swapping an Authorization Code for
a legitimate user with another token that the attacker has.
One means of accomplishing this is for the attacker to copy
a token out one session and use it in an HTTP message for
a different session, which is easy to do when the token is
available to the browser; this is known as the "cut and paste" attack.
The Implicit Flow of OAuth 2.0
is not designed to mitigate this risk. In Section 10.16,
it normatively requires that any use of the authorization
process as a form of delegated End-User authentication to the
Client MUST NOT use the Implicit Flow without employing
additional security mechanisms that enable the Client to
determine whether the ID Token and Access Token were issued for its use.
In OpenID Connect, this is mitigated through mechanisms
provided through the ID Token. The ID Token is a signed
security token that provides Claims such as
iss (issuer),
sub (subject),
aud (audience),
at_hash (access token hash), and
c_hash (code hash). Using the ID Token,
the Client is capable of detecting the Token Substitution Attack.
The c_hash in the ID Token enables
Clients to prevent Authorization Code substitution.
The at_hash in the ID Token enables
Clients to prevent Access Token substitution.
Also, a malicious user may attempt to impersonate a more
privileged user by subverting the communication channel
between the Authorization Endpoint and Client, or the Token Endpoint
and Client, for example by swapping the Authorization Code
or reordering the messages, to convince the Token Endpoint
that the attacker's authorization grant corresponds to a grant
sent on behalf of a more privileged user.
For the HTTP binding defined by this specification, the
responses to Token Requests are bound to the corresponding
requests by message order in HTTP, as both the response
containing the token and requests are protected by TLS, which
will detect and prevent packet reordering.
When designing another binding of this specification to a
protocol incapable of strongly binding Token Endpoint
requests to responses, additional mechanisms to
address this issue MUST be utilized. One such mechanism could
be to include an ID Token with a c_hash
Claim in the token request and response.
A timing attack enables the attacker to
obtain an unnecessary large amount of information through the elapsed time
differences in the code paths taken by successful and unsuccessful decryption operations or
successful and unsuccessful signature validation of a message.
It can be used to reduce the effective key length of the
cipher used.Implementations SHOULD NOT terminate the validation process
at the instant of the finding an error but SHOULD continue
running until all the octets have been processed to avoid this attack.There are various crypto related attacks possible depending on the
method used for encryption and signature / integrity checking.
Implementers need to consult the Security Considerations
for the JWT specification and
specifications that it references
to avoid the vulnerabilities
identified in these specifications.
Signatures over encrypted text are not considered valid
in many jurisdictions.
Therefore, for integrity and non-repudiation,
this specification requires signing
the plain text JSON Claims, when signing is performed.
If both signing and encryption are desired, it is performed on
the JWS containing the signed Claims,
with the result being a Nested JWT, as specified in .
Note that since all JWE encryption algorithms provide integrity protection,
there is no need to separately sign the encrypted content.
OpenID Connect supports multiple Issuers per Host and Port combination.
The issuer returned by discovery MUST exactly match the value of
iss in the ID Token.
OpenID Connect treats the path component of any Issuer URI as
being part of the Issuer Identifier. For instance, the subject
"1234" with an Issuer Identifier of "https://example.com" is not
equivalent to the subject "1234" with an Issuer Identifier of
"https://example.com/sales".
It is RECOMMENDED that only a single Issuer per host be used.
However, if a host supports multiple tenants,
multiple Issuers for that host may be needed.
In the Implicit Flow, the Access Token is returned in the
fragment component of the Client's redirect_uri through HTTPS, thus it is
protected between the OP and the User Agent, and between the User Agent and the
RP. The only place it can be captured is the User Agent where the
TLS session is terminated, which is possible if the User Agent is
infected by malware or under the control of a malicious party.
Implementations MUST support TLS.
Which version(s) ought to be implemented will vary over
time and depend on the widespread deployment and known
security vulnerabilities at the time of implementation.
Implementations SHOULD follow the guidance in
BCP 195 ,
which provides recommendations and requirements
for improving the security of deployed services that use TLS.
To protect against information disclosure and tampering,
confidentiality protection MUST be applied using TLS
with a ciphersuite that provides confidentiality and
integrity protection.
Whenever TLS is used, a TLS server certificate check
MUST be performed, per RFC 6125.
Access Tokens might not be revocable by the Authorization Server.
Access Token lifetimes SHOULD therefore be kept to single use or
very short lifetimes.
If ongoing access to the UserInfo Endpoint or other Protected Resources is required,
a Refresh Token can be used. The Client can then exchange the Refresh Token at
the Token Endpoint for a fresh short-lived Access Token that can be used to
access the resource.
The Authorization Server SHOULD clearly identify long-term grants to the User
during Authorization.
The Authorization Server SHOULD provide a mechanism for the End-User to revoke
Access Tokens and Refresh Tokens granted to a Client.
In and , keys are derived
from the client_secret value.
Thus, when used with symmetric signing or encryption operations,
client_secret values MUST contain
sufficient entropy to generate cryptographically strong keys.
Also, client_secret values MUST also contain
at least the minimum of number of octets required for MAC keys for the
particular algorithm used.
So for instance, for HS256, the
client_secret value MUST contain
at least 32 octets (and almost certainly SHOULD contain more,
since client_secret values are
likely to use a restricted alphabet).
In some situations, Clients might need to use signed requests to ensure that
the desired request parameters are delivered to the OP without having
been tampered with. For instance, the max_age
and acr_values provide more assurance about
the nature of the authentication performed when delivered in signed requests.
In some situations, knowing the contents of an OpenID Connect request can,
in and of itself, reveal sensitive information about the End-User.
For instance, knowing that the Client is requesting a particular Claim or
that it is requesting that a particular authentication method be used
can reveal sensitive information about the End-User.
OpenID Connect enables requests to be encrypted to the OpenID Provider
to prevent such potentially sensitive information from being revealed.
HTTP 307 redirects send a POST request to the party being redirected to
that contains all the form data from the previous request.
This can leak credentials intended for the OpenID Provider to the Relying Party.
Therefore, HTTP 307 redirects MUST NOT be used when redirecting to the Redirection URI.
Likewise, while HTTP 302 redirects are typically implemented in a way that does not do this,
the use of HTTP 303 redirect is preferable, as it is defined not to do this.
Note that on iOS, multiple applications can register as handlers for a custom URI scheme,
therefore it is not deterministic that the calling application will receive the Authentication Reply
from the Self-Issued OpenID Provider.
Use of a claimed URI is an alternative to using the openid: custom URI scheme.
While it is possible to assign handlers to custom URI schemes
and it is possible that the operating system could help the End-User select the correct handler,
it is not possible to guarantee that the handler for a given custom URI scheme has not been replaced
by a subsequently installed native application.
At the time of this writing, there appears to be no fool-proof mitigation for this vulnerability.
The UserInfo Response typically contains Personally Identifiable
Information (PII). As such, End-User consent for the release of the information
for the specified purpose should be obtained at or prior to the
authorization time in accordance with relevant regulations. The purpose
of use is typically registered in association with the redirect_uris.Only necessary UserInfo data should be stored at the Client and the
Client SHOULD associate the received data with the purpose of use
statement.
The Resource Server SHOULD make End-Users' UserInfo access logs
available to them so that they can monitor who accessed their data.
To protect the End-User from possible correlation among Clients, the
use of a Pairwise Pseudonymous Identifier (PPID) as the
sub (subject) SHOULD be considered.
Offline access enables access to Claims when the user is not present,
posing greater privacy risk than the Claims transfer when the user is present.
Therefore, it is prudent to obtain explicit consent for
offline access to resources.
This specification mandates the use of the prompt
parameter to obtain consent unless it is already known that the
request complies with the conditions for processing the request in each jurisdiction.
When an Access Token is returned via the User Agent
using the Implicit Flow or Hybrid Flow, there is
a greater risk of it being exposed to an attacker, who could
later use it to access the UserInfo endpoint.
If the Access Token does not enable offline access and the server
can differentiate whether the Client request has been made
offline or online, the risk will be substantially reduced.
Therefore, this specification mandates ignoring
the offline access request when the Access Token is
transmitted through the User Agent.
Note that differentiating between online and offline access
from the server can be difficult especially for native clients.
The server may well have to rely on heuristics.
Also, the risk of exposure for the Access Token delivered
through the User Agent for the Response Types of
code token and
token is the same.
Thus, the implementations should be prepared to detect
whether the Access Token was issued through the User Agent
or directly from the Token Endpoint and deny offline access
if the token was issued through the User Agent.
Note that although these provisions require an explicit
consent dialogue through the prompt parameter,
the mere fact that the user pressed an "accept" button etc.,
might not constitute a valid consent.
Developers should be aware that for the act of consent to
be valid, typically, the impact of the terms have to be
understood by the End-User, the consent must be freely given
and not forced (i.e., other options have to be available),
and the terms must fair and equitable.
In general, it is advisable for the service to follow the
required privacy principles in each jurisdiction and rely on
other conditions for processing the request than simply explicit consent,
as online self-service "explicit consent" often does not
form a valid consent in some jurisdictions.
This specification registers the following Claims
in the IANA
"JSON Web Token Claims" registry
established by .
Claim Name: name
Claim Description: Full name
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: given_name
Claim Description: Given name(s) or first name(s)
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: family_name
Claim Description: Surname(s) or last name(s)
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: middle_name
Claim Description: Middle name(s)
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: nickname
Claim Description: Casual name
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: preferred_username
Claim Description: Shorthand name by which the End-User wishes to be referred to
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: profile
Claim Description: Profile page URL
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: picture
Claim Description: Profile picture URL
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: website
Claim Description: Web page or blog URL
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: email
Claim Description: Preferred e-mail address
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: email_verified
Claim Description: True if the e-mail address has been verified; otherwise false
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: gender
Claim Description: Gender
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: birthdate
Claim Description: Birthday
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: zoneinfo
Claim Description: Time zone
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: locale
Claim Description: Locale
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: phone_number
Claim Description: Preferred telephone number
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: phone_number_verified
Claim Description: True if the phone number has been verified; otherwise false
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: address
Claim Description: Preferred postal address
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: updated_at
Claim Description: Time the information was last updated
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: azp
Claim Description: Authorized party - the party to which the ID Token was issued
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: nonce
Claim Description: Value used to associate a Client session with an ID Token
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: auth_time
Claim Description: Time when the authentication occurred
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: at_hash
Claim Description: Access Token hash value
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: c_hash
Claim Description: Code hash value
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: acr
Claim Description: Authentication Context Class Reference
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: amr
Claim Description: Authentication Methods References
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: sub_jwk
Claim Description: Public key used to check the signature of an ID Token
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: _claim_names
Claim Description: JSON object whose member names are the Claim Names for the Aggregated and Distributed Claims
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
Claim Name: _claim_sources
Claim Description: JSON object whose member names are referenced by the member values of the _claim_names member
Change Controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net
Specification Document(s): of this specification
This specification registers the following parameters
in the IANA
"OAuth Parameters" registry
established by RFC 6749.
Parameter name: nonceParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: displayParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: promptParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: max_ageParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: ui_localesParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: claims_localesParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: id_token_hintParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: login_hintParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: acr_valuesParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: claimsParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: registrationParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: requestParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: request_uriParameter usage location: Authorization RequestChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: NoneParameter name: id_tokenParameter usage location: Authorization Response,
Access Token ResponseChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationRelated information: None
This specification registers the following errors
in the IANA
"OAuth Extensions Error" registry
established by RFC 6749.
Error name: interaction_requiredError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: login_requiredError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: account_selection_requiredError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: consent_requiredError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: invalid_request_uriError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: invalid_request_objectError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: request_not_supportedError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: request_uri_not_supportedError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specificationError name: registration_not_supportedError usage location: Authorization EndpointRelated protocol extension: OpenID ConnectChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netSpecification document(s): of this specification
This specification registers the following URI scheme
in the IANA
"Uniform Resource Identifier (URI) Schemes" registry
established by RFC 7595.
Scheme name: openidStatus: PermanentApplications/protocols that use this scheme name: OpenID ConnectContact: Michael B. Jones - michael_b_jones@hotmail.comChange controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.netReferences: of this specificationKey words for use in RFCs to Indicate Requirement LevelsIn many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.Date and Time on the Internet: TimestampsThis document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.UTF-8, a transformation format of ISO 10646ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.The tel URI for Telephone NumbersThis document specifies the URI (Uniform Resource Identifier) scheme "tel". The "tel" URI describes resources identified by telephone numbers. This document obsoletes RFC 2806. [STANDARDS-TRACK]Uniform Resource Identifier (URI): Generic SyntaxA Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]Internet Message FormatThis document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]Tags for Identifying LanguagesThis document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.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)Many application technologies enable secure communication between two entities by means of Internet Public Key Infrastructure Using X.509 (PKIX) certificates in the context of Transport Layer Security (TLS). This document specifies procedures for representing and verifying the identity of application services in such interactions. [STANDARDS-TRACK]An IANA Registry for Level of Assurance (LoA) ProfilesThis document establishes an IANA registry for Level of Assurance (LoA) Profiles. The registry is intended to be used as an aid to discovering such LoA definitions in protocols that use an LoA concept, including Security Assertion Markup Language (SAML) 2.0 and OpenID Connect. This document is not an Internet Standards Track specification; it is published for informational purposes.The OAuth 2.0 Authorization FrameworkThe OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]The OAuth 2.0 Authorization Framework: Bearer Token UsageThis specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]OAuth 2.0 Threat Model and Security ConsiderationsThis document gives additional security considerations for OAuth, beyond those in the OAuth 2.0 specification, based on a comprehensive threat model for the OAuth 2.0 protocol. This document is not an Internet Standards Track specification; it is published for informational purposes.The JavaScript Object Notation (JSON) Data Interchange FormatJavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and RoutingThe Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.Hypertext Transfer Protocol (HTTP/1.1): Semantics and ContentThe Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.Hypertext Transfer Protocol (HTTP/1.1): CachingThe Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.Authentication Method Reference ValuesThe "amr" (Authentication Methods References) claim is defined and registered in the IANA "JSON Web Token Claims" registry, but no standard Authentication Method Reference values are currently defined. This specification establishes a registry for Authentication Method Reference values and defines an initial set of Authentication Method Reference values.Deprecating TLS 1.0 and TLS 1.1
This document formally deprecates Transport Layer Security (TLS) versions 1.0 (RFC 2246) and 1.1 (RFC 4346). Accordingly, those documents have been moved to Historic status. These versions lack support for current and recommended cryptographic algorithms and mechanisms, and various government and industry profiles of applications using TLS now mandate avoiding these old TLS versions. TLS version 1.2 became the recommended version for IETF protocols in 2008 (subsequently being obsoleted by TLS version 1.3 in 2018), providing sufficient time to transition away from older versions. Removing support for older versions from implementations reduces the attack surface, reduces opportunity for misconfiguration, and streamlines library and product maintenance.
This document also deprecates Datagram TLS (DTLS) version 1.0 (RFC 4347) but not DTLS version 1.2, and there is no DTLS version 1.1.
This document updates many RFCs that normatively refer to TLS version 1.0 or TLS version 1.1, as described herein. This document also updates the best practices for TLS usage in RFC 7525; hence, it is part of BCP 195.
Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)
Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are used to protect data exchanged over a wide range of application protocols and can also form the basis for secure transport protocols. Over the years, the industry has witnessed several serious attacks on TLS and DTLS, including attacks on the most commonly used cipher suites and their modes of operation. This document provides the latest recommendations for ensuring the security of deployed services that use TLS and DTLS. These recommendations are applicable to the majority of use cases.
RFC 7525, an earlier version of the TLS recommendations, was published when the industry was transitioning to TLS 1.2. Years later, this transition is largely complete, and TLS 1.3 is widely available. This document updates the guidance given the new environment and obsoletes RFC 7525. In addition, this document updates RFCs 5288 and 6066 in view of recent attacks.
HTML 4.01 SpecificationUnicode Normalization FormsOpenID Connect Discovery 1.0NAT.ConsultingYubicoSelf-Issued ConsultingIllumilaOpenID Connect Dynamic Client Registration 1.0NAT.ConsultingYubicoSelf-Issued ConsultingJSON Web Token (JWT)JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.JSON Web Signature (JWS)JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.JSON Web Encryption (JWE)JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.JSON Web Key (JWK)A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.JSON Web Algorithms (JWA)This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization GrantsThis specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.Assertion Framework for OAuth 2.0 Client Authentication and Authorization GrantsThis specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.ISO/IEC 29115:2013.
Information technology - Security techniques - Entity authentication
assurance frameworkInternational Organization for StandardizationISO 639:2023. Code for individual languages and language groupsInternational Organization for
StandardizationISO 3166-1:2020. Codes for the representation of names of
countries and their subdivisions - Part 1: Country codesInternational Organization for
StandardizationISO 8601-1:2019/Amd 1:2022. Date and time - Representations for information interchange - Part 1: Basic rulesInternational Organization for
StandardizationE.164: The international public telecommunication numbering planInternational Telecommunication UnionTime Zone DatabaseIANAOAuth 2.0 Multiple Response Type Encoding PracticesGoogleGoogle FacebookMicrosoftLanguage Subtag RegistryIANACross-Origin Resource SharingOpera Software ASAJSON Web Token ClaimsIANAOAuth ParametersIANAUniform Resource Identifier (URI) SchemesIANAAuthentication Method Reference ValuesIANAASCII format for Network InterchangeUniversity California Los Angeles (UCLA)The Unicode StandardThe Unicode ConsortiumOpenID Connect Core 1.0 incorporating errata set 1Nomura Research Institute, Ltd.Ping IdentityMicrosoftGoogleSalesforceOpenID Connect Core 1.0 (final)Nomura Research Institute, Ltd.Ping IdentityMicrosoftGoogleSalesforceInternet Security Glossary, Version 2This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.Guidelines and Registration Procedures for URI SchemesThis document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)The authorization request in OAuth 2.0 described in RFC 6749 utilizes query parameter serialization, which means that authorization request parameters are encoded in the URI of the request and sent through user agents such as web browsers. While it is easy to implement, it means that a) the communication through the user agents is not integrity protected and thus, the parameters can be tainted, b) the source of the communication is not authenticated, and c) the communication through the user agents can be monitored. Because of these weaknesses, several attacks to the protocol have now been put forward.This document introduces the ability to send request parameters in a JSON Web Token (JWT) instead, which allows the request to be signed with JSON Web Signature (JWS) and encrypted with JSON Web Encryption (JWE) so that the integrity, source authentication, and confidentiality properties of the authorization request are attained. The request can be sent by value or by reference.OpenID Connect Basic Client Implementer's Guide 1.0NAT.ConsultingYubicoSelf-Issued ConsultingGoogleDisneyOpenID Connect Implicit Client Implementer's Guide 1.0NAT.ConsultingYubicoSelf-Issued ConsultingGoogleDisneyOpenID Connect RP-Initiated Logout 1.0MicrosoftGoogleMicrosoftNAT.ConsultingYubicoOpenID Connect Session Management 1.0GoogleMicrosoftNAT.ConsultingYubicoMicrosoftOpenID Connect Front-Channel Logout 1.0MicrosoftOpenID Connect Back-Channel Logout 1.0Self-Issued ConsultingYubicoOAuth 2.0 Form Post Response ModeMicrosoftPing IdentityOpenID Authentication 2.0OpenID FoundationOpenID Provider
Authentication Policy Extension 1.0Six Apart, Ltd.Microsoft CorporationIndependentJanRainNomura Research Institute, Ltd.ITU-T Recommendation X.1252 - Cyberspace security - Identity management
- Baseline identity management terms and definitionsInternational Telecommunication UnionJSON Web Key (JWK) ThumbprintThis specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.
The following are non-normative examples of Authorization Requests with
different response_type values and their responses
(with line wraps within values for display purposes only):
The value of the id_token parameter is the ID Token,
which is a signed JWT,
containing three base64url-encoded segments separated by period ('.') characters.
The first segment represents the JOSE Header.
Base64url decoding it will result in the following set of Header Parameters:
The alg value represents the algorithm
that was used to sign the JWT, in this case
RS256, representing RSASSA-PKCS1-v1_5 using SHA-256.
The kid value is a key identifier used
in identifying the key to be used to verify the signature.
If the kid value is unknown to the RP,
it needs to retrieve the contents of the OP's JWK Set again
to obtain the OP's current set of keys.
The third segment represents the ID Token signature,
which is verified as described in .
As a successor version of OpenID, this specification heavily relies
on ideas explored in OpenID Authentication 2.0. Please
refer to Appendix C of OpenID Authentication 2.0 for the full list of
the contributors for that specification.
In addition, the OpenID Community would like to thank the following people for
their contributions to this specification:
Naveen Agarwal (Naveen.Agarwal@microsoft.com), Microsoft (was at Google)Amanda Anganes (aanganes@mitre.org), MITRECasper Biering (cb@peercraft.com), PeercraftJohn Bradley (ve7jtb@ve7jtb.com), Yubico (was at Ping Identity)Tim Bray (tbray@textuality.com), independent (was at Google)Johnny Bufu (johnny.bufu@gmail.com), independent (was at Janrain)Brian Campbell (bcampbell@pingidentity.com), Ping IdentityBlaine Cook (romeda@gmail.com), independentBreno de Medeiros (breno@google.com), GooglePamela Dingle (Pamela.Dingle@microsoft.com), Microsoft (was at Ping Identity)Vladimir Dzhuvinov (vladimir@connect2id.com), Connect2id (was at Nimbus Directory Services)George Fletcher (gffletch@aol.com), Capital One (was at AOL)Roland Hedberg (roland@catalogix.se), independent (was at University of Umeå)Ryo Ito (ryo.ito@mixi.co.jp), mixi, Inc.Edmund Jay (ejay@mgi1.com), IllumilaMichael B. Jones (michael_b_jones@hotmail.com), Self-Issued Consulting (was at Microsoft)Torsten Lodderstedt (torsten@lodderstedt.net), independent (was at Deutsche Telekom)James Manger (James.H.Manger@team.telstra.com), TelstraNov Matake (nov@matake.jp), independentChuck Mortimore (charliemortimore@gmail.com), Disney (was at Salesforce)Anthony Nadalin (nadalin@prodigy.net), independent (was at Microsoft)Hideki Nara (hdknr@ic-tact.co.jp), Tact CommunicationsAxel Nennker (axel.nennker@telekom.de), Deutsche TelekomDavid Recordon (recordond@gmail.com), independent (was at Facebook)Justin Richer (justin@bspk.io), Bespoke Engineering (was at MITRE)Nat Sakimura (nat@nat.consulting), NAT.Consulting (was at NRI)Luke Shepard (luke@lukeshepard.com), FacebookAndreas Åkre Solberg (Andreas.Solberg@sikt.no), Sikt (was at UNINET)Paul Tarjan (paul@paultarjan.com), FacebookCopyright (c) 2023 The OpenID Foundation.
The OpenID Foundation (OIDF) grants to any Contributor, developer,
implementer, or other interested party a non-exclusive, royalty free,
worldwide copyright license to reproduce, prepare derivative works from,
distribute, perform and display, this Implementers Draft or
Final Specification solely for the purposes of (i) developing
specifications, and (ii) implementing Implementers Drafts and
Final Specifications based on such documents, provided that attribution
be made to the OIDF as the source of the material, but that such attribution
does not indicate an endorsement by the OIDF.
The technology described in this specification was
made available from contributions from various sources,
including members of the OpenID Foundation and others.
Although the OpenID Foundation has taken steps to help ensure
that the technology is available for distribution, it takes
no position regarding the validity or scope of any intellectual
property or other rights that might be claimed to pertain to
the implementation or use of the technology described in
this specification or the extent to which any license under
such rights might or might not be available; neither does it
represent that it has made any independent effort to identify
any such rights. The OpenID Foundation and the contributors
to this specification make no (and hereby expressly disclaim any)
warranties (express, implied, or otherwise), including implied
warranties of merchantability, non-infringement, fitness for
a particular purpose, or title, related to this specification,
and the entire risk as to implementing this specification is
assumed by the implementer. The OpenID Intellectual
Property Rights policy requires contributors to offer
a patent promise not to assert certain patent claims against
other contributors and against implementers. The OpenID Foundation invites
any interested party to bring to its attention any copyrights,
patents, patent applications, or other proprietary rights
that may cover technology that may be required to practice
this specification.