| < draft-richer-oauth-introspection-03.txt | draft-richer-oauth-introspection-04.txt > | |||
|---|---|---|---|---|
| OAuth Working Group J. Richer, Ed. | OAuth Working Group J. Richer, Ed. | |||
| Internet-Draft The MITRE Corporation | Internet-Draft The MITRE Corporation | |||
| Intended status: Standards Track February 21, 2013 | Intended status: Standards Track May 01, 2013 | |||
| Expires: August 25, 2013 | Expires: November 02, 2013 | |||
| OAuth Token Introspection | OAuth Token Introspection | |||
| draft-richer-oauth-introspection-03 | draft-richer-oauth-introspection-04 | |||
| Abstract | Abstract | |||
| This specification defines a method for a client or protected | This specification defines a method for a client or protected | |||
| resource to query an OAuth authorization server to determine meta- | resource to query an OAuth authorization server to determine meta- | |||
| information about an OAuth token. | information about an OAuth token. | |||
| Requirements Language | Requirements Language | |||
| 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]. | |||
| 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 August 25, 2013. | This Internet-Draft will expire on November 02, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Introspection Endpoint . . . . . . . . . . . . . . . . . . . . 3 | 2. Introspection Endpoint . . . . . . . . . . . . . . . . . . . 2 | |||
| 2.1. Introspection Request . . . . . . . . . . . . . . . . . . . 3 | 2.1. Introspection Request . . . . . . . . . . . . . . . . . . 3 | |||
| 2.2. Introspection Response . . . . . . . . . . . . . . . . . . 4 | 2.2. Introspection Response . . . . . . . . . . . . . . . . . 3 | |||
| 2.3. Non-normative Example . . . . . . . . . . . . . . . . . . . 4 | 2.3. Non-normative Example . . . . . . . . . . . . . . . . . . 4 | |||
| 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 6 | 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . . 6 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Normative References . . . . . . . . . . . . . . . . . . . . . 6 | 6. Normative References . . . . . . . . . . . . . . . . . . . . 6 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 6 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1. Introduction | 1. Introduction | |||
| In OAuth, the contents of tokens are opaque to clients. This means | In OAuth, the contents of tokens are opaque to clients. This means | |||
| that the client does not need to know anything about the content or | that the client does not need to know anything about the content or | |||
| structure of the token itself, if there is any. However, there is | structure of the token itself, if there is any. However, there is | |||
| still a large amount of metadata that may be attached to a token, | still a large amount of metadata that may be attached to a token, | |||
| such as its current validity, approved scopes, and extra information | such as its current validity, approved scopes, and extra information | |||
| about the authentication context in which the token was issued. | about the authentication context in which the token was issued. | |||
| These pieces of information are often vital to Protected Resources | These pieces of information are often vital to Protected Resources | |||
| skipping to change at page 3, line 29 ¶ | skipping to change at page 3, line 4 ¶ | |||
| This specification defines an Introspection Endpoint that allows the | This specification defines an Introspection Endpoint that allows the | |||
| holder of a token to query the Authorization Server to discover the | holder of a token to query the Authorization Server to discover the | |||
| set of metadata for a token. A Protected Resource may use the | set of metadata for a token. A Protected Resource may use the | |||
| mechanism described in this draft to query the Introspection Endpoint | mechanism described in this draft to query the Introspection Endpoint | |||
| in a particular authorization decision context and ascertain the | in a particular authorization decision context and ascertain the | |||
| relevant metadata about the token in order to make this authorization | relevant metadata about the token in order to make this authorization | |||
| decision appropriately. | decision appropriately. | |||
| 2. Introspection Endpoint | 2. Introspection Endpoint | |||
| The Introspection Endpoint is an OAuth 2 Endpoint that responds to | The Introspection Endpoint is an OAuth 2 Endpoint that responds to | |||
| HTTP GET and HTTP POST requests from token holders. The endpoint | HTTP POST requests (and optionally HTTP GET requests) from token | |||
| takes a single parameter representing the token (and optionally | holders, particularly including Resource Servers and Clients. The | |||
| further authentication) and returns a JSON document representing the | endpoint takes a single parameter representing the token (and | |||
| meta information surrounding the token. | optionally further authentication) and returns a JSON document | |||
| representing the meta information surrounding the token. | ||||
| The endpoint MUST be protected by TLS or equivalent. | ||||
| 2.1. Introspection Request | 2.1. Introspection Request | |||
| token REQUIRED. The string value of the token. | token REQUIRED. The string value of the token. | |||
| resource_id OPTIONAL. A service-specific string identifying the | resource_id OPTIONAL. A service-specific string identifying the | |||
| resource that the client doing the introspection is asking about. | resource that the client doing the introspection is asking about. | |||
| token_type_hint OPTIONAL. A hint about the type of the token | ||||
| submitted for revocation. Clients MAY pass this parameter in | ||||
| order to help the authorization server to optimize the token | ||||
| lookup. If the server is unable to locate the token using the | ||||
| given hint, it MUST extend its search accross all of its supported | ||||
| token types. An authorization server MAY ignore this parameter, | ||||
| particularly if it is able to detect the token type automatically. | ||||
| Values for this field are defined in OAuth Token Revocation | ||||
| [Revocation]. | ||||
| The endpoint MAY allow other parameters to provide context to the | The endpoint MAY allow other parameters to provide context to the | |||
| query. For instance, an authorization service may need to know the | query. For instance, an authorization service may need to know the | |||
| IP address of the Client in order to determine the appropriateness of | IP address of the Client in order to determine the appropriateness of | |||
| the token being presented. | the token being presented. | |||
| The endpoint SHOULD also require some form of authentication to | The endpoint SHOULD also require some form of authentication to | |||
| access this endpoint, such as the Client Authentication as described | access this endpoint, such as the Client Authentication as described | |||
| in OAuth 2 Core Specification [RFC6749] or a separate OAuth2 Access | in OAuth 2 Core Specification [RFC6749] or a separate OAuth 2.0 | |||
| Token. The methods of managing and validating these authentication | Access Token. The methods of managing and validating these | |||
| credentials are out of scope of this specification. | authentication credentials are out of scope of this specification. | |||
| 2.2. Introspection Response | 2.2. Introspection Response | |||
| The server responds with a JSON object [RFC4627] in | The server responds with a JSON object [RFC4627] in "application/ | |||
| "application/json" format with the following top-level members. | json" format with the following top-level members. Specific | |||
| Specific implementations MAY extend this structure with their own | implementations MAY extend this structure with their own service- | |||
| service-specific pieces of information. | specific pieces of information. | |||
| active REQUIRED. Boolean indicator of whether or not the presented | active REQUIRED. Boolean indicator of whether or not the presented | |||
| token is currently active. | token is currently active. | |||
| expires_at OPTIONAL. Integer timestamp, measured in the number of | exp OPTIONAL. Integer timestamp, measured in the number of seconds | |||
| seconds since January 1 1970 UTC, indicating when this token will | since January 1 1970 UTC, indicating when this token will expire. | |||
| expire. | ||||
| issued_at OPTIONAL. Integer timestamp, measured in the number of | iat OPTIONAL. Integer timestamp, measured in the number of seconds | |||
| seconds since January 1 1970 UTC, indicating when this token was | since January 1 1970 UTC, indicating when this token was | |||
| originally issued. | originally issued. | |||
| scope OPTIONAL. A space-separated list of strings representing the | scope OPTIONAL. A space-separated list of strings representing the | |||
| scopes associated with this token, in the format described in | scopes associated with this token, in the format described in | |||
| Section 3.3 of OAuth 2.0 [RFC6749]. | Section 3.3 of OAuth 2.0 [RFC6749]. | |||
| client_id OPTIONAL. Client Identifier for the OAuth Client that | client_id OPTIONAL. Client Identifier for the OAuth Client that | |||
| requested this token. | requested this token. | |||
| sub OPTIONAL. Local identifier of the Resource Owner who authorized | sub OPTIONAL. Local identifier of the Resource Owner who authorized | |||
| this token. | this token. | |||
| aud OPTIONAL. Service-specific string identifier or list of string | aud OPTIONAL. Service-specific string identifier or list of string | |||
| identifiers representing the intended audience for this token. | identifiers representing the intended audience for this token. | |||
| token_type OPTIONAL. Type of the token as defined in OAuth 2.0 | ||||
| section 5.1. | ||||
| 2.3. Non-normative Example | 2.3. Non-normative Example | |||
| For example, a Protected Resource accepts a request from a Client | For example, a Protected Resource accepts a request from a Client | |||
| carrying an OAuth2 Bearer Token. In order to know how and whether to | carrying an OAuth2 Bearer Token. In order to know how and whether to | |||
| serve the request, the Protected Resource then makes the following | serve the request, the Protected Resource then makes the following | |||
| request to the Introspection Endpoint of the Authorization Server. | request to the Introspection Endpoint of the Authorization Server. | |||
| The Protected Resource is here authenticating with its own Client ID | The Protected Resource is here authenticating with its own Client ID | |||
| and Client Secret as per OAuth2 [RFC6749] Section 2.3.1. | and Client Secret as per OAuth2 [RFC6749] Section 2.3.1. | |||
| Following is a non-normative example request (with line wraps for | Following is a non-normative example request (with line wraps for | |||
| skipping to change at page 6, line 20 ¶ | skipping to change at page 6, line 7 ¶ | |||
| If left unprotected and un-throttled, the Introspection Endpoint | If left unprotected and un-throttled, the Introspection Endpoint | |||
| could present a means for an attacker to poll a series of possible | could present a means for an attacker to poll a series of possible | |||
| token values, fishing for a valid token. Therefore, the | token values, fishing for a valid token. Therefore, the | |||
| Authorization Server SHOULD issue special client credentials to any | Authorization Server SHOULD issue special client credentials to any | |||
| protected resources or clients that need to access the introspection | protected resources or clients that need to access the introspection | |||
| endpoint. These credentials may be used directly at the endpoint, or | endpoint. These credentials may be used directly at the endpoint, or | |||
| they may be exchanged for an OAuth2 Access token scoped specifically | they may be exchanged for an OAuth2 Access token scoped specifically | |||
| for the Introspection Endpoint. | for the Introspection Endpoint. | |||
| Since the introspection endpoint takes in OAuth 2 tokens as | ||||
| parameters, it MUST be protected by TLS or equivalent. A server MAY | ||||
| require an HTTP POST method only to the endpoint. | ||||
| 5. Acknowledgements | 5. Acknowledgements | |||
| Thanks to the OAuth Working Group and the UMA Working Group for | Thanks to the OAuth Working Group and the UMA Working Group for | |||
| feedback. | feedback. | |||
| 6. Normative References | 6. Normative References | |||
| [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. | |||
| [RFC4627] Crockford, D., "The application/json Media Type for | [RFC4627] Crockford, D., "The application/json Media Type for | |||
| JavaScript Object Notation (JSON)", RFC 4627, July 2006. | JavaScript Object Notation (JSON)", RFC 4627, July 2006. | |||
| [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", | [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC | |||
| RFC 6749, October 2012. | 6749, October 2012. | |||
| [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | |||
| Framework: Bearer Token Usage", RFC 6750, October 2012. | Framework: Bearer Token Usage", RFC 6750, October 2012. | |||
| [Revocation] | ||||
| Lodderstedt, T., "OAuth Token Revocation", April 2013. | ||||
| Author's Address | Author's Address | |||
| Justin Richer (editor) | Justin Richer (editor) | |||
| The MITRE Corporation | The MITRE Corporation | |||
| Email: jricher@mitre.org | Email: jricher@mitre.org | |||
| End of changes. 16 change blocks. | ||||
| 34 lines changed or deleted | 55 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||