identity 1.0 documentation

SAML 2.0 Bearer Assertion Profiles for OAuth 2.0

«  JSON Web Token (JWT) Bearer Token Profiles for OAuth 2.0   ::   Contents   ::   Assertion Framework for OAuth 2.0  »

SAML 2.0 Bearer Assertion Profiles for OAuth 2.0

based on http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10

1. Introduction

The Security Assertion Markup Language (SAML) 2.0 [OASIS.saml-core-2.0-os] is an XML-based framework that allows identity and security information to be shared across security domains. The SAML specification, while primarily targeted at providing cross domain Web browser single sign-on, was also designed to be modular and extensible to facilitate use in other contexts.

The Assertion, an XML security token, is a fundamental construct of SAML that is often adopted for use in other protocols and specifications. An Assertion is generally issued by an identity provider and consumed by a service provider who relies on its content to identify the Assertion’s subject for security related purposes.

The OAuth 2.0 Authorization Protocol [RFC6749] provides a method for making authenticated HTTP requests to a resource using an access token. Access tokens are issued to third-party clients by an authorization server (AS) with the (sometimes implicit) approval of the resource owner.

In OAuth, an authorization grant is an abstract term used to describe intermediate credentials that represent the resource owner authorization. An authorization grant is used by the client to obtain an access token.

Several authorization grant types are defined to support a wide range of client types and user experiences. OAuth also allows for the definition of new extension grant types to support additional clients or to provide a bridge between OAuth and other trust frameworks.

Finally, OAuth allows the definition of additional authentication mechanisms to be used by clients when interacting with the authorization server.

The OAuth 2.0 Assertion Profile [I-D.ietf-oauth-assertions] is an abstract extension to OAuth 2.0 that provides a general framework for the use of Assertions as client credentials and/or authorization grants with OAuth 2.0. This specification profiles the OAuth 2.0 Assertion Profile [I-D.ietf-oauth-assertions] to define an extension grant type that uses a SAML 2.0 Bearer Assertion to request an OAuth 2.0 access token as well as for use as client credentials.

The format and processing rules for the SAML Assertion defined in this specification are intentionally similar, though not identical, to those in the Web Browser SSO Profile defined in SAML Profiles [OASIS.saml-profiles-2.0-os]. This specification is reusing, to the extent reasonable, concepts and patterns from that well-established Profile.

This document defines how a SAML Assertion can be used to request an access token when a client wishes to utilize an existing trust relationship, expressed through the semantics of (and digital signature calculated over) the SAML Assertion, without a direct user approval step at the authorization server.

It also defines how a SAML Assertion can be used as a client authentication mechanism. The use of an Assertion for client authentication is orthogonal to and separable from using an Assertion as an authorization grant. They can be used either in combination or separately. Client assertion authentication is nothing more than an alternative way for a client to authenticate to the token endpoint and must be used in conjunction with some grant type to form a complete and meaningful protocol request. Assertion authorization grants may be used with or without client authentication or identification. Whether or not client authentication is needed in conjunction with an assertion authorization grant, as well as the supported types of client authentication, are policy decisions at the discretion of the authorization server.

The process by which the client obtains the SAML Assertion, prior to exchanging it with the authorization server or using it for client authentication, is out of scope.

( draft 15, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-15#section-1 )

2. HTTP Parameter Bindings for Transporting Assertions

The OAuth 2.0 Assertion Profile [I-D.ietf.oauth-assertions] defines generic HTTP parameters for transporting assertions during interactions with a token endpoint.

This section defines the values of those parameters for use with SAML 2.0 Bearer Assertions.

(Draft 10, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10#section-2 )

2.1. Using SAML Assertions as Authorization Grants

To use a SAML Bearer Assertion as an authorization grant, use the following parameter values and encodings.

The value of “grant_type” parameter MUST be “urn:ietf:params:oauth:grant-type:saml2-bearer

The value of the “assertion” parameter MUST contain a single SAML 2.0 Assertion. The SAML Assertion XML data MUST be encoded using base64url, where the encoding adheres to the definition in Section 5 of RFC4648 [RFC4648] and where the padding bits are set to zero.

To avoid the need for subsequent encoding steps (by “application/x-www-form-urlencoded” [W3C.REC-html401-19991224], for example), the base64url encoded data SHOULD NOT be line wrapped and pad characters (“=”) SHOULD NOT be included.

Note

No padding for base64url

(draft 10 , http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10#section-2.1 )

2.2. Using SAML Assertions for Client Authentication

To use a SAML Bearer Assertion for client authentication grant, use the following parameter values and encodings.

The value of “client_assertion_type” parameter MUST be “urn:ietf:params:oauth:client-assertion-type:saml2-bearer

The value of the “client_assertion” parameter MUST contain

a single SAML 2.0 Assertion. The SAML Assertion XML data MUST be encoded using base64url, where the encoding adheres to the definition in Section 5 of RFC4648 [RFC4648] and where the padding bits are set to zero.

To avoid the need for subsequent encoding steps (by “application/x-www-form-urlencoded” [W3C.REC-html401-19991224], for example), the base64url encoded data SHOULD NOT be line wrapped and pad characters (“=”) SHOULD NOT be included.

Note

  • no padding for Base64url

( Draft 10, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10#section-2.2 )

3. Assertion Format and Processing Requirements

In order to issue an access token response as described in The OAuth 2.0 Authorization Protocol [I-D.ietf.oauth-v2] or to rely on an assertion for client authentication, the authorization server MUST validate the Assertion according to the criteria below. Application of additional restrictions and policy are at the discretion of the authorization server.

  • The Assertion‘s <Issuer> element MUST contain a unique identifier for the entity that issued the Assertion.

  • The Assertion MUST contain <Conditions> element with an <AudienceRestriction> element with an <Audience> element containing a URI reference that identifies the authorization server, or the service provider SAML entity of its controlling domain, as an intended audience. The token endpoint URL of the authorization server MAY be used as an acceptable value for an <Audience> element. The authorization server MUST verify that it is an intended audience for the Assertion.

  • The Assertion MUST contain a <Subject> element. The subject MAY identify the resource owner for whom the access token is being requested. For client authentication, the Subject MUST be the client_id of the OAuth client. When using assertions as an authorization grant, the Subject SHOULD identify an authorized accessor for whom the access token is being requested (typically the resource owner, or an authorized delegate). Additional information identifying the subject/principal of the transaction MAY be included in an <AttributeStatement>.

  • The Assertion MUST have an expiry that limits the time window during which it can be used. The expiry can be expressed either as the NotOnOrAfter attribute of the <Conditions> element or as the NotOnOrAfter attribute of a suitable <SubjectConfirmationData> element.

  • The <Subject> element MUST contain at least one <SubjectConfirmation> element that allows the authorization server to confirm it as a Bearer Assertion. Such a <SubjectConfirmation> element MUST have a Method attribute with a value of “urn:oasis:names:tc:SAML:2.0:cm:bearer”. The <SubjectConfirmation> element MUST contain a <SubjectConfirmationData> element, unless the Assertion has a suitable NotOnOrAfter attribute on the <Conditions> element, in which case the <SubjectConfirmationData> element MAY be omitted. When present, the <SubjectConfirmationData> element MUST have a Recipient attribute with a value indicating the token endpoint URL of the authorization server.

    The authorization server MUST verify that the value of the Recipient attribute matches the token endpoint URL (or an acceptable alias) to which the Assertion was delivered.

    The <SubjectConfirmationData> element MUST have a NotOnOrAfter attribute that limits the window during which the Assertion can be confirmed.

    The <SubjectConfirmationData> element MAY also contain an Address attribute limiting the client address from which the Assertion can be delivered. Verification of the Address is at the discretion of the authorization server.

  • The authorization server MUST verify that occurrences of the NotOnOrAfter instant has not passed, subject to allowable clock skew between systems. An invalid NotOnOrAfter instant on the <Conditions> element invalidates the entire assertion.

    An invalid NotOnOrAfter instant on a <SubjectConfirmationData> element only invalidates the individual <SubjectConfirmation>. The authorization server MAY reject assertions with a NotOnOrAfter instant that is unreasonably far in the future. The authorization server MAY ensure that Bearer Assertions are not replayed, by maintaining the set of used ID values for the length of time for which the Assertion would be considered valid based on the applicable NotOnOrAfter instant.

  • If the Assertion issuer authenticated the subject, the Assertion SHOULD contain a single <AuthnStatement> representing that authentication event.

  • If the Assertion was issued with the intention that the presenter act autonomously on behalf of the subject, an <AuthnStatement> SHOULD NOT be included.

    The presenter SHOULD be identified in the <NameID> or similar element, the <SubjectConfirmation> element, or by other available means like [OASIS.saml-deleg-cs].

  • Other statements, in particular <AttributeStatement> elements, MAY be included in the Assertion.

  • The Assertion MUST be digitally signed by the issuer and the authorization server MUST verify the signature.

  • Encrypted elements MAY appear in place of their plain text counterparts as defined in [OASIS.saml-core-2.0-os].

  • The authorization server MUST verify that the Assertion is valid in all other respects per [OASIS.saml-core-2.0-os], such as (but not limited to) evaluating all content within the Conditions element including the NotOnOrAfter and NotBefore attributes, rejecting unknown condition types, etc.

Note

SAML OAuth/Connect
<Issser> iss
<AudienceRestriction> aud
<Subject> user_id (grant) / client_id(client authentication)
<SubjectConfirmationData NotOnOrAfter /> expires_in

3.1. Authorization Grant Processing

If present, the authorization server MUST also validate the client credentials.

Authorization servers SHOULD issue access tokens with a limited lifetime and require clients to refresh them by requesting a new access token using the same assertion, if it is still valid, or with a new assertion. The authorization server SHOULD NOT issue a refresh token.

Note

No refresh token!

If the Assertion is not valid, or its subject confirmation requirements cannot be met, the authorization server MUST construct an error response as defined in [I-D.ietf.oauth-v2].

The value of the error parameter MUST be the “invalid_grant” error code. The authorization server MAY include additional information regarding the reasons the Assertion was considered invalid using the error_description or error_uri parameters.

For example:

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store

{
  "error":"invalid_grant",
  "error_description":"Audience validation failed"
}

(Draft 10, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10#section-3.1 )

3.2. Client Authentication Processing

If the client Assertion is not valid, or its subject confirmation requirements cannot be met, the authorization server MUST construct an error response as defined in [I-D.ietf.oauth-v2]. The value of the error parameter MUST be the “invalid_client” error code. The authorization server MAY include additional information regarding the reasons the Assertion was considered invalid using the error_description or error_uri parameters.

(Draft 10, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-10#section-3.2 )

7. References

7.1. Normative References

[I-D.ietf-oauth-assertions]
Campbell, B., Mortimore, C., Jones, M., and Y. Goland, “Assertion Framework for OAuth 2.0”, draft-ietf-oauth-assertions-06 (work in progress), September 2012.
[OASIS.saml-core-2.0-os]
Cantor, S., Kemp, J., Philpott, R., and E. Maler, “Assertions and Protocol for the OASIS Security Assertion Markup Language (SAML) V2.0”, OASIS Standard saml-core- 2.0-os, March 2005.
[RFC2119]
Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, March 1997.
[RFC4648]
Josefsson, S., “The Base16, Base32, and Base64 Data Encodings”, RFC 4648, October 2006.
[RFC6749]
Hardt, D., “The OAuth 2.0 Authorization Framework”, RFC 6749, October 2012.
[RFC6755]
Campbell, B. and H. Tschofenig, “An IETF URN Sub-Namespace for OAuth”, RFC 6755, October 2012.

(draft 15, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-15#section-7.1 )

7.2. Informative References

[OASIS.saml-deleg-cs]
Cantor, S., Ed., “SAML V2.0 Condition for Delegation Restriction”, Nov 2009.
[OASIS.saml-profiles-2.0-os]
Hughes, J., Cantor, S., Hodges, J., Hirsch, F., Mishra, P., Philpott, R., and E. Maler, “Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0”, OASIS Standard OASIS.saml-profiles-2.0-os, March 2005.
[OASIS.saml-sec-consider-2.0-os]
Hirsch, F., Philpott, R., and E. Maler, “Security and Privacy Considerations for the OASIS Security Markup Language (SAML) V2.0”, OASIS Standard saml-sec-consider- 2.0-os, March 2005.
[W3C.REC-html401-19991224]
Hors, A., Raggett, D., and I. Jacobs, “HTML 4.01 Specification”, World Wide Web Consortium Recommendation REC-html401-19991224, December 1999, <http://www.w3.org/TR/1999/REC-html401-19991224>.

(draft 15, http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-15#section-7.2 )

«  JSON Web Token (JWT) Bearer Token Profiles for OAuth 2.0   ::   Contents   ::   Assertion Framework for OAuth 2.0  »