draft-ietf-oauth-saml2-bearer-04.txt | draft-ietf-oauth-saml2-bearer-05.txt | |||
---|---|---|---|---|
B. Campbell, Ed. | B. Campbell, Ed. | |||
Internet-Draft Ping Identity Corp. | Internet-Draft Ping Identity Corp. | |||
Intended status: Standards Track C. Mortimore | Intended status: Standards Track C. Mortimore | |||
Expires: November 24, 2011 Salesforce.com | Expires: February 2, 2012 Salesforce.com | |||
May 23, 2011 | Aug 2011 | |||
SAML 2.0 Bearer Assertion Grant Type Profile for OAuth 2.0 | SAML 2.0 Bearer Assertion Profiles for OAuth 2.0 | |||
draft-ietf-oauth-saml2-bearer-04 | draft-ietf-oauth-saml2-bearer-05 | |||
Abstract | Abstract | |||
This specification defines the use of a SAML 2.0 Bearer Assertion as | This specification defines the use of a SAML 2.0 Bearer Assertion as | |||
means for requesting an OAuth 2.0 access token. | means for requesting an OAuth 2.0 access token as well as for use as | |||
a means of client authentication. | ||||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on November 24, 2011. | This Internet-Draft will expire on February 2, 2012. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 4 | |||
2. SAML Assertion Access Token Request . . . . . . . . . . . . . 4 | 2. HTTP Parameter Bindings for Transporting Assertions . . . . . 4 | |||
2.1. Client Requests Access Token . . . . . . . . . . . . . . . 4 | 2.1. Using SAML Assertions as Authorization Grants . . . . . . 4 | |||
2.2. Assertion Format and Processing Requirements . . . . . . . 5 | 2.2. Using SAML Assertions for Client Authentication . . . . . 4 | |||
2.3. Error Response . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Assertion Format and Processing Requirements . . . . . . . . . 5 | |||
2.4. Example (non-normative) . . . . . . . . . . . . . . . . . 7 | 3.1. Authorization Grant Processing . . . . . . . . . . . . . . 7 | |||
3. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 3.2. Client Authentication Processing . . . . . . . . . . . . . 8 | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 4. Authorization Grant Example (non-normative) . . . . . . . . . 8 | |||
4.1. Parameter Registration Request . . . . . . . . . . . . . . 9 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 9 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 10 | 6.1. Sub-Namspace Registration of | |||
5. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | urn:ietf:params:oauth:grant-type:saml2-bearer . . . . . . 10 | |||
5.1. Normative References . . . . . . . . . . . . . . . . . . . 12 | 6.2. Sub-Namspace Registration of | |||
5.2. Informative References . . . . . . . . . . . . . . . . . . 12 | urn:ietf:params:oauth:client-assertion-type:saml2-bearer . 10 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 13 | Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 11 | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 11 | ||||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
7.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | ||||
7.2. Informative References . . . . . . . . . . . . . . . . . . 15 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
1. Introduction | 1. Introduction | |||
The Security Assertion Markup Language (SAML) 2.0 | The Security Assertion Markup Language (SAML) 2.0 | |||
[OASIS.saml-core-2.0-os] is an XML-based framework that allows | [OASIS.saml-core-2.0-os] is an XML-based framework that allows | |||
identity and security information to be shared across security | identity and security information to be shared across security | |||
domains. The SAML specification, while primarily targeted at | domains. The SAML specification, while primarily targeted at | |||
providing cross domain Web browser single sign-on, was also designed | providing cross domain Web browser single sign-on, was also designed | |||
to be modular and extensible to facilitate use in other contexts. | to be modular and extensible to facilitate use in other contexts. | |||
skipping to change at page 3, line 27 | skipping to change at page 3, line 27 | |||
provider and consumed by a service provider who relies on its content | provider and consumed by a service provider who relies on its content | |||
to identify the Assertion's subject for security related purposes. | to identify the Assertion's subject for security related purposes. | |||
The OAuth 2.0 Authorization Protocol [I-D.ietf.oauth-v2] provides a | The OAuth 2.0 Authorization Protocol [I-D.ietf.oauth-v2] provides a | |||
method for making authenticated HTTP requests to a resource using an | method for making authenticated HTTP requests to a resource using an | |||
access token. Access tokens are issued to third-party clients by an | access token. Access tokens are issued to third-party clients by an | |||
authorization server (AS) with the (sometimes implicit) approval of | authorization server (AS) with the (sometimes implicit) approval of | |||
the resource owner. In OAuth, an authorization grant is an abstract | the resource owner. In OAuth, an authorization grant is an abstract | |||
term used to describe intermediate credentials that represent the | term used to describe intermediate credentials that represent the | |||
resource owner authorization. An authorization grant is used by the | resource owner authorization. An authorization grant is used by the | |||
client to obtain an access token. | 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. | ||||
Several authorization grant types are defined to support a wide range | The OAuth 2.0 Assertion Profile [I-D.ietf.oauth-assertions] is an | |||
of client types and user experiences. OAuth also allows for the | abstract extension to OAuth 2.0 that provides a general framework for | |||
definition of new extension grant types to support additional clients | the use of assertions as client credentials and/or authorization | |||
or to provide a bridge between OAuth and other trust frameworks. | 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 usues 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 specification defines an extension grant type that profiles the | This document defines how a SAML Assertion can be used to request an | |||
use of a SAML 2.0 Bearer Assertion in requesting an OAuth 2.0 access | access token when a client wishes to utilize an existing trust | |||
token. The format and processing rules for the SAML Assertion | relationship, expressed through the semantics of (and digital | |||
defined in this specification are intentionally similar, though not | signature calculated over) the SAML Assertion, without a direct user | |||
identical, to those in the Web Browser SSO Profile defined in SAML | approval step at the authorization server. It also defines how a | |||
Profiles [OASIS.saml-profiles-2.0-os]. This specification is | SAML Assertion can be used as a client authentication mechanism. The | |||
reusing, to the extent reasonable, concepts and patterns from that | use of an Assertion for client authentication is orthogonal and | |||
well-established Profile. | separable from using an Assertion as an authorization grant and can | |||
be used either in combination or in isolation. | ||||
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. | ||||
1.1. Notational Conventions | 1.1. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
Unless otherwise noted, all the protocol parameter names and values | Unless otherwise noted, all the protocol parameter names and values | |||
are case sensitive. | are case sensitive. | |||
2. SAML Assertion Access Token Request | 2. HTTP Parameter Bindings for Transporting Assertions | |||
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. | ||||
The process by which the client obtains the SAML Assertion, prior to | ||||
exchanging it with the authorization server, is out of scope. | ||||
+--------+ +---------------+ | ||||
| | | | | ||||
| |>--(A)-- SAML 2.0 Assertion ----->| Authorization | | ||||
| Client | | Server | | ||||
| |<--(B)---- Access Token ---------<| | | ||||
| | | | | ||||
+--------+ +---------------+ | ||||
Figure 1: Assertion Access Token Request | 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. | ||||
The request/response flow illustrated in Figure 1 includes the | 2.1. Using SAML Assertions as Authorization Grants | |||
following steps: | ||||
(A) The client sends an access token request to the authorization | To use a SAML Bearer Assertion as an authorization grant, use the | |||
server that includes a SAML 2.0 Assertion and a grant_type of | following paramter values and encodings. | |||
"http://oauth.net/grant_type/saml/2.0/bearer". | ||||
(B) The authorization server validates the Assertion per the | The value of "grant_type" parameter MUST be | |||
processing rules defined in this specification and issues an | "urn:ietf:params:oauth:grant-type:saml2-bearer" | |||
access token. | ||||
2.1. Client Requests Access Token | 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. | ||||
The client includes the Assertion in the access token request, the | 2.2. Using SAML Assertions for Client Authentication | |||
core details of which are defined in OAuth [I-D.ietf.oauth-v2], by | ||||
specifying "http://oauth.net/grant_type/saml/2.0/bearer" as the | ||||
absolute URI value of the "grant_type" parameter and by adding the | ||||
following parameter: | ||||
assertion | To use a SAML Bearer Assertion for client authentication grant, use | |||
REQUIRED. The value of the assertion parameter MUST contain a | the following paramter values and encodings. | |||
single SAML 2.0 Assertion. When used with the | ||||
"http://oauth.net/grant_type/saml/2.0/bearer" grant type, the | ||||
assertion MUST be a 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 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. | ||||
scope | The value of "client_assertion_type" parameter MUST be | |||
OPTIONAL. The scope of the access request expressed as a list | "urn:ietf:params:oauth:client-assertion-type:saml2-bearer" | |||
of space-delimited, case sensitive strings. The value is | ||||
defined by the authorization server. If the value contains | ||||
multiple space-delimited strings, their order does not matter, | ||||
and each string adds an additional access range to the | ||||
requested scope. | ||||
Authorization servers SHOULD issue access tokens with a limited | The value of the "client_assertion" parameter MUST contain a single | |||
lifetime and require clients to refresh them by requesting a new | SAML 2.0 Assertion. The SAML Assertion XML data MUST be encoded | |||
access token using the same assertion, if it is still valid, or with | using base64url, where the encoding adheres to the definition in | |||
a new assertion. The authorization server SHOULD NOT issue a refresh | Section 5 of RFC4648 [RFC4648] and where the padding bits are set to | |||
token. | 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. | ||||
2.2. Assertion Format and Processing Requirements | 3. Assertion Format and Processing Requirements | |||
Prior to issuing an access token response as described in | In order to issue an access token response as described in The OAuth | |||
[I-D.ietf.oauth-v2], the authorization server MUST validate the | 2.0 Authorization Protocol [I-D.ietf.oauth-v2] or to rely on an | |||
Assertion according to the criteria below. If present, the | assertion for client authentication, the authorization server MUST | |||
authorization server MUST also validate the client credentials. | validate the Assertion according to the criteria below. Application | |||
Application of additional restrictions and policy are at the | of additional restrictions and policy are at the discretion of the | |||
discretion of the authorization server. | authorization server. | |||
o The Assertion's <Issuer> element MUST contain a unique identifier | o The Assertion's <Issuer> element MUST contain a unique identifier | |||
for the entity that issued the Assertion. The Format attribute | for the entity that issued the Assertion. | |||
MUST be omitted or have a value of | ||||
"urn:oasis:names:tc:SAML:2.0:nameid-format:entity". | o The Assertion MUST contain 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. | ||||
o The Assertion MUST contain a <Subject> element. The subject MAY | o The Assertion MUST contain a <Subject> element. The subject MAY | |||
identify the resource owner for whom the access token is being | identify the resource owner for whom the access token is being | |||
requested. | 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>. | ||||
o The <Subject> element MUST contain at least one | o The Assertion MUST have an expiry that limits the time window | |||
<SubjectConfirmation> element that allows the authorization server | during which the it can be used. The expiry can be expressed | |||
to confirm it as a Bearer Assertion. Conditions for bearer | either as the NotOnOrAfter attribute of the <Conditions> element | |||
subject confirmation are described below. | or as the NotOnOrAfter attribute of a suitable | |||
<SubjectConfirmationData> element. | ||||
* The <SubjectConfirmation> MUST have a Method attribute with a | If the Assertion has a NotOnOrAfter attribute on the <Conditions> | |||
element, the authorization server MUST verify that the | ||||
NotOnOrAfter instant has not passed, subject to allowable clock | ||||
skew between systems. The authorization server SHOULD reject | ||||
assertions with an expiry instant that is unreasonably far in the | ||||
future. | ||||
If the Assertion does not have a NotOnOrAfter attribute on the | ||||
<Conditions> element, then the Assertion's <Subject> element MUST | ||||
contain at least one <SubjectConfirmation> element that allows the | ||||
authorization server to confirm it as a Bearer Assertion. | ||||
Conditions for bearer subject confirmation are described below. | ||||
* The <SubjectConfirmation< MUST have a Method attribute with a | ||||
value of "urn:oasis:names:tc:SAML:2.0:cm:bearer" and MUST | value of "urn:oasis:names:tc:SAML:2.0:cm:bearer" and MUST | |||
contain a <SubjectConfirmationData> element. | contain a <SubjectConfirmationData> element. | |||
* The <SubjectConfirmationData> element MUST have a Recipient | * The <SubjectConfirmationData> element MUST have a Recipient | |||
attribute with a value indicating the token endpoint URL of the | attribute with a value indicating the token endpoint URL of the | |||
authorization server. The authorization server MUST verify | authorization server. The authorization server MUST verify | |||
that the value of the Recipient attribute matches the token | that the value of the Recipient attribute matches the token | |||
endpoint URL (or an acceptable alias) to which the Assertion | endpoint URL (or an acceptable alias) to which the Assertion | |||
was delivered. | was delivered. | |||
skipping to change at page 6, line 33 | skipping to change at page 7, line 5 | |||
* The <SubjectConfirmationData> element MAY also contain an | * The <SubjectConfirmationData> element MAY also contain an | |||
Address attribute limiting the client address from which the | Address attribute limiting the client address from which the | |||
Assertion can be delivered. Verification of the Address is at | Assertion can be delivered. Verification of the Address is at | |||
the discretion of the authorization server. | the discretion of the authorization server. | |||
o If the Assertion issuer authenticated the subject, the Assertion | o If the Assertion issuer authenticated the subject, the Assertion | |||
SHOULD contain a single <AuthnStatement> representing that | SHOULD contain a single <AuthnStatement> representing that | |||
authentication event. | authentication event. | |||
o If the Assertion was issued with the intention that the client act | o If the Assertion was issued with the intention that the presenter | |||
autonomously on behalf of the subject, an <AuthnStatement> SHOULD | act autonomously on behalf of the subject, an <AuthnStatement> | |||
NOT be included. The client SHOULD be identified in the <NameID> | SHOULD NOT be included. The presenter SHOULD be identified in the | |||
or similar element, the <SubjectConfirmation> element, or by other | <NamseID> or similar element, the <SubjectConfirmation> element, | |||
available means like [OASIS.saml-deleg-cs]. | or by other available means like [OASIS.saml-deleg-cs]. | |||
o Other statements, in particular <AttributeStatement> elements, MAY | o Other statements, in particular <AttributeStatement> elements, MAY | |||
be included in the Assertion. | be included in the Assertion. | |||
o The Assertion MUST contain 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 | ||||
authorization server MUST verify that it is an intended audience | ||||
for the Assertion. | ||||
o The Assertion MUST be digitally signed by the issuer and the | o The Assertion MUST be digitally signed by the issuer and the | |||
authorization server MUST verify the signature. | authorization server MUST verify the signature. | |||
o Encrypted elements MAY appear in place of their plain text | o Encrypted elements MAY appear in place of their plain text | |||
counterparts as defined in [OASIS.saml-core-2.0-os]. | counterparts as defined in [OASIS.saml-core-2.0-os]. | |||
o The authorization server MUST verify that the Assertion is valid | o The authorization server MUST verify that the Assertion is valid | |||
in all other respects per [OASIS.saml-core-2.0-os], such as (but | in all other respects per [OASIS.saml-core-2.0-os], such as (but | |||
not limited to) evaluating all content within the Conditions | not limited to) evaluating all content within the Conditions | |||
element including the NotOnOrAfter and NotBefore attributes, | element including the NotOnOrAfter and NotBefore attributes, | |||
rejecting unknown condition types, etc. | rejecting unknown condition types, etc. | |||
2.3. Error Response | 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. | ||||
If the Assertion is not valid, or its subject confirmation | If the Assertion is not valid, or its subject confirmation | |||
requirements cannot be met, the authorization server MUST construct | requirements cannot be met, the authorization server MUST construct | |||
an error response as defined in [I-D.ietf.oauth-v2]. The value of | 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 | the error parameter MUST be the "invalid_grant" error code. The | |||
authorization server MAY include additional information regarding the | authorization server MAY include additional information regarding the | |||
reasons the Assertion was considered invalid using the | reasons the Assertion was considered invalid using the | |||
error_description or error_uri parameters. | error_description or error_uri parameters. | |||
For example: | For example: | |||
HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
Content-Type: application/json | Content-Type: application/json | |||
Cache-Control: no-store | Cache-Control: no-store | |||
{ | { | |||
"error":"invalid_grant", | "error":"invalid_grant", | |||
"error_description":"Audience validation failed" | "error_description":"Audience validation failed" | |||
} | } | |||
2.4. Example (non-normative) | 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. | ||||
4. Authorization Grant Example (non-normative) | ||||
Though non-normative, the following examples illustrate what a | Though non-normative, the following examples illustrate what a | |||
conforming Assertion and access token request would look like. | conforming Assertion and access token request would look like. | |||
Below is an example SAML 2.0 Assertion (whitespace formatting is for | Below is an example SAML 2.0 Assertion (whitespace formatting is for | |||
display purposes only): | display purposes only): | |||
<Assertion IssueInstant="2010-10-01T20:07:34.619Z" | <Assertion IssueInstant="2010-10-01T20:07:34.619Z" | |||
ID="ef1xsbZxPV2oqjd7HTLRLIBlBb7" | ID="ef1xsbZxPV2oqjd7HTLRLIBlBb7" | |||
Version="2.0" | Version="2.0" | |||
skipping to change at page 8, line 42 | skipping to change at page 9, line 42 | |||
</Conditions> | </Conditions> | |||
<AuthnStatement AuthnInstant="2010-10-01T20:07:34.371Z"> | <AuthnStatement AuthnInstant="2010-10-01T20:07:34.371Z"> | |||
<AuthnContext> | <AuthnContext> | |||
<AuthnContextClassRef> | <AuthnContextClassRef> | |||
urn:oasis:names:tc:SAML:2.0:ac:classes:X509 | urn:oasis:names:tc:SAML:2.0:ac:classes:X509 | |||
</AuthnContextClassRef> | </AuthnContextClassRef> | |||
</AuthnContext> | </AuthnContext> | |||
</AuthnStatement> | </AuthnStatement> | |||
</Assertion> | </Assertion> | |||
Figure 2: Example SAML 2.0 Assertion | Figure 1: Example SAML 2.0 Assertion | |||
To present the Assertion shown in the previous example as part of an | To present the Assertion shown in the previous example as part of an | |||
access token request, for example, the client might make the | access token request, for example, the client might make the | |||
following HTTPS request (line breaks are for display purposes only): | following HTTPS request (line breaks are for display purposes only): | |||
POST /token.oauth2 HTTP/1.1 | POST /token.oauth2 HTTP/1.1 | |||
Host: authz.example.net | Host: authz.example.net | |||
Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
grant_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fsaml%2F2.0%2F | grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Asaml2- | |||
bearer&assertion=PEFzc2VydGlvbiBJc3N1ZUluc3RhbnQ9IjIwMTEtMDUtM | bearer&assertion=PEFzc2VydGlvbiBJc3N1ZUluc3RhbnQ9IjIwMTEtMDU | |||
[...omitted for brevity...]V0aG5TdGF0ZW1lbnQ-PC9Bc3NlcnRpb24- | [...omitted for brevity...]aG5TdGF0ZW1lbnQ-PC9Bc3NlcnRpb24- | |||
Figure 3: Example Request | Figure 2: Example Request | |||
3. Security Considerations | 5. Security Considerations | |||
No additional considerations beyond those described within the OAuth | No additional considerations beyond those described within the OAuth | |||
2.0 Protocol Framework [I-D.ietf.oauth-v2] and in the Security and | 2.0 Protocol Framework [I-D.ietf.oauth-v2] and in the Security and | |||
Privacy Considerations for the OASIS Security Assertion Markup | Privacy Considerations for the OASIS Security Assertion Markup | |||
Language (SAML) V2.0 [OASIS.saml-sec-consider-2.0-os]. | Language (SAML) V2.0 [OASIS.saml-sec-consider-2.0-os]. | |||
4. IANA Considerations | 6. IANA Considerations | |||
4.1. Parameter Registration Request | 6.1. Sub-Namspace Registration of | |||
urn:ietf:params:oauth:grant-type:saml2-bearer | ||||
The following is the parameter registration request, as defined in | This is a request to IANA to please register the value grant- | |||
The OAuth Parameters Registry of The OAuth 2.0 Authorization Protocol | type:saml2-bearer in the registry urn:ietf:params:oauth established | |||
[I-D.ietf.oauth-v2], for the "assertion" parameter: | in [I-D.ietf.oauth-urn-sub-ns] | |||
o Parameter name: assertion | o URN: urn:ietf:params:oauth:grant-type:saml2-bearer | |||
o Parameter usage location: token request | o Common Name: SAML 2.0 Bearer Assertion Grant Type Profile for | |||
OAuth 2.0 | ||||
o Change controller: IETF | o Change controller: IETF | |||
o Specification document(s): draft-ietf-oauth-saml2-bearer | o Description: [[this document]] | |||
6.2. Sub-Namspace Registration of | ||||
urn:ietf:params:oauth:client-assertion-type:saml2-bearer | ||||
This is a request to IANA to please register the value client- | ||||
assertion-type:saml2-bearer in the registry urn:ietf:params:oauth | ||||
established in [I-D.ietf.oauth-urn-sub-ns] | ||||
o URN: urn:ietf:params:oauth:client-assertion-type:saml2-bearer | ||||
o Common Name: SAML 2.0 Bearer Assertion Profile for OAuth 2.0 | ||||
Client Authentication | ||||
o Change controller: IETF | ||||
o Description: [[this document]] | ||||
Appendix A. Contributors | Appendix A. Contributors | |||
The following people contributed wording and concepts to this | The following people contributed wording and concepts to this | |||
document: Paul Madsen, Patrick Harding, Peter Motykowski, Eran | document: Paul Madsen, Patrick Harding, Peter Motykowski, Eran | |||
Hammer-Lahav, Peter Saint-Andre, Ian Barnett, Eric Fazendin, Torsten | Hammer-Lahav, Peter Saint-Andre, Ian Barnett, Eric Fazendin, Torsten | |||
Lodderstedt, Susan Harper, Scott Cantor, and David Waite | Lodderstedt, Susan Harper, Scott Tomilson, Scott Cantor, Michael | |||
Jones, Hannes Tschofenig and David Waite. | ||||
Appendix B. Document History | Appendix B. Document History | |||
[[ to be removed by RFC editor before publication as an RFC ]] | [[ to be removed by RFC editor before publication as an RFC ]] | |||
draft-ietf-oauth-saml2-bearer-05 | ||||
o Allow for subject confirmation data to be optional when Conditions | ||||
contain audience and NotOnOrAfter | ||||
o Rework most of the spec to profile draft-ietf-oauth-assertions for | ||||
both authn and authz including (but not limited to): | ||||
* remove requirement for issuer to be | ||||
urn:oasis:names:tc:SAML:2.0:nameid-format:entity | ||||
* change wording on Subject requirements | ||||
o using a MAY, explicitly say that the Audience can be token | ||||
endpoint URL of the authorization server | ||||
o Change title to be more generic (allowing for client authn too) | ||||
o added client authentication to the abstract | ||||
o register and use urn:ietf:params:oauth:grant-type:saml2-bearer for | ||||
grant type rather than http://oauth.net/grant_type/saml/2.0/bearer | ||||
o register urn:ietf:params:oauth:client-assertion-type:saml2-bearer | ||||
o remove scope paramter as it is defined in | ||||
http://tools.ietf.org/html/draft-ietf-oauth-assertions | ||||
o remove assertion param registration because it [should] be in | ||||
http://tools.ietf.org/html/draft-ietf-oauth-assertions | ||||
o fix typo(s) and update/add references | ||||
draft-ietf-oauth-saml2-bearer-04 | draft-ietf-oauth-saml2-bearer-04 | |||
o Changed the grant_type URI from | o Changed the grant_type URI from | |||
"http://oauth.net/grant_type/assertion/saml/2.0/bearer" to | "http://oauth.net/grant_type/assertion/saml/2.0/bearer" to | |||
"http://oauth.net/grant_type/saml/2.0/bearer" - dropping the word | "http://oauth.net/grant_type/saml/2.0/bearer" - dropping the word | |||
assertion from the path. Recent versions of draft-ietf-oauth-v2 | assertion from the path. Recent versions of draft-ietf-oauth-v2 | |||
no longer refer to extension grants using the word assertion so | no longer refer to extension grants using the word assertion so | |||
this URI is more reflective of that. It also more closely aligns | this URI is more reflective of that. It also more closely aligns | |||
with the grant type URI in draft-jones-oauth-jwt-bearer-00 which | with the grant type URI in draft-jones-oauth-jwt-bearer-00 which | |||
is "http://oauth.net/grant_type/jwt/1.0/bearer". | is "http://oauth.net/grant_type/jwt/1.0/bearer". | |||
skipping to change at page 12, line 14 | skipping to change at page 14, line 18 | |||
o Changed title to include "Grant Type" in it. | o Changed title to include "Grant Type" in it. | |||
o Editorial updates based on feedback from the WG and others | o Editorial updates based on feedback from the WG and others | |||
(including capitalization of Assertion when referring to SAML). | (including capitalization of Assertion when referring to SAML). | |||
draft-campbell-oauth-saml-00 | draft-campbell-oauth-saml-00 | |||
o Initial I-D | o Initial I-D | |||
5. References | 7. References | |||
5.1. Normative References | 7.1. Normative References | |||
[I-D.ietf.oauth-assertions] | ||||
Mortimore, C., Ed., Campbell, B., Jones, M., and Y. | ||||
Goland, "OAuth 2.0 Assertion Profile", | ||||
ID draft-ietf-oauth-assertions-00 (work in progress), | ||||
July 2011. | ||||
[I-D.ietf.oauth-urn-sub-ns] | ||||
Campbell, B., Ed. and H. Tschofenig, "An IETF URN Sub- | ||||
Namespace for OAuth", | ||||
ID draft-campbell-oauth-urn-sub-ns-01 (work in progress), | ||||
Aug 2011. | ||||
[I-D.ietf.oauth-v2] | [I-D.ietf.oauth-v2] | |||
Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, "The | Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, "The | |||
OAuth 2.0 Authorization Protocol", | OAuth 2.0 Authorization Protocol", | |||
ID draft-ietf-oauth-v2-16 (work in progress), May 2011. | ID draft-ietf-oauth-v2-16 (work in progress), May 2011. | |||
[OASIS.saml-core-2.0-os] | [OASIS.saml-core-2.0-os] | |||
Cantor, S., Kemp, J., Philpott, R., and E. Maler, | Cantor, S., Kemp, J., Philpott, R., and E. Maler, | |||
"Assertions and Protocol for the OASIS Security Assertion | "Assertions and Protocol for the OASIS Security Assertion | |||
Markup Language (SAML) V2.0", OASIS Standard saml-core- | Markup Language (SAML) V2.0", OASIS Standard saml-core- | |||
2.0-os, March 2005. | 2.0-os, March 2005. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, October 2006. | Encodings", RFC 4648, October 2006. | |||
5.2. Informative References | 7.2. Informative References | |||
[OASIS.saml-deleg-cs] | [OASIS.saml-deleg-cs] | |||
Cantor, S., Ed., "SAML V2.0 Condition for Delegation | Cantor, S., Ed., "SAML V2.0 Condition for Delegation | |||
Restriction", Nov 2009. | Restriction", Nov 2009. | |||
[OASIS.saml-profiles-2.0-os] | [OASIS.saml-profiles-2.0-os] | |||
Hughes, J., Cantor, S., Hodges, J., Hirsch, F., Mishra, | Hughes, J., Cantor, S., Hodges, J., Hirsch, F., Mishra, | |||
P., Philpott, R., and E. Maler, "Profiles for the OASIS | P., Philpott, R., and E. Maler, "Profiles for the OASIS | |||
Security Assertion Markup Language (SAML) V2.0", OASIS | Security Assertion Markup Language (SAML) V2.0", OASIS | |||
Standard OASIS.saml-profiles-2.0-os, March 2005. | Standard OASIS.saml-profiles-2.0-os, March 2005. | |||
[OASIS.saml-sec-consider-2.0-os] | [OASIS.saml-sec-consider-2.0-os] | |||
Hirsch, F., Philpott, R., and E. Maler, "Security and | Hirsch, F., Philpott, R., and E. Maler, "Security and | |||
Privacy Considerations for the OASIS Security Markup | Privacy Considerations for the OASIS Security Markup | |||
Language (SAML) V2.0", OASIS Standard saml-sec-consider- | Language (SAML) V2.0", OASIS Standard saml-sec-consider- | |||
2.0-os, March 2005. | 2.0-os, March 2005. | |||
[W3C.REC-html401-19991224] | [W3C.REC-html401-19991224] | |||
Hors, A., Jacobs, I., and D. Raggett, "HTML 4.01 | Hors, A., Raggett, D., and I. Jacobs, "HTML 4.01 | |||
Specification", World Wide Web Consortium | Specification", World Wide Web Consortium | |||
Recommendation REC-html401-19991224, December 1999, | Recommendation REC-html401-19991224, December 1999, | |||
<http://www.w3.org/TR/1999/REC-html401-19991224>. | <http://www.w3.org/TR/1999/REC-html401-19991224>. | |||
Authors' Addresses | Authors' Addresses | |||
Brian Campbell (editor) | Brian Campbell (editor) | |||
Ping Identity Corp. | Ping Identity Corp. | |||
Email: brian.d.campbell@gmail.com | Email: brian.d.campbell@gmail.com | |||
End of changes. 44 change blocks. | ||||
140 lines changed or deleted | 241 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |