draft-ietf-oauth-v2-http-mac-03.txt   draft-ietf-oauth-v2-http-mac-04.txt 
Network Working Group Richer OAuth J. Richer
Internet-Draft The MITRE Corporation Internet-Draft The MITRE Corporation
Intended status: Standards Track W. Mills Intended status: Standards Track W. Mills
Expires: August 29, 2013 Yahoo! Inc. Expires: January 16, 2014 Yahoo! Inc.
H. Tschofenig, Ed. H. Tschofenig, Ed.
Nokia Siemens Networks Nokia Siemens Networks
February 25, 2013 P. Hunt
Oracle Corporation
July 15, 2013
OAuth 2.0 Message Authentication Code (MAC) Tokens OAuth 2.0 Message Authentication Code (MAC) Tokens
draft-ietf-oauth-v2-http-mac-03 draft-ietf-oauth-v2-http-mac-04.txt
Abstract Abstract
This specification describes how to use MAC Tokens in HTTP requests This specification describes how to use MAC Tokens in HTTP requests
to access OAuth 2.0 protected resources. An OAuth client willing to to access OAuth 2.0 protected resources. An OAuth client willing to
access a protected resource needs to demonstrate possession of a access a protected resource needs to demonstrate possession of a
crytographic key by using it with a keyed message digest function to crytographic key by using it with a keyed message digest function to
the request. the request.
The document also defines a key distribution protocol for obtaining a The document also defines a key distribution protocol for obtaining a
skipping to change at page 1, line 40 skipping to change at page 1, line 42
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 29, 2013. This Internet-Draft will expire on January 16, 2014.
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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Key Distribution . . . . . . . . . . . . . . . . . . . . . . . 7 4. Key Distribution . . . . . . . . . . . . . . . . . . . . . . . 8
4.1. Session Key Transport to Client . . . . . . . . . . . . . 7 4.1. Session Key Transport to Client . . . . . . . . . . . . . 8
4.2. Session Key Transport to Resource Server . . . . . . . . . 9 4.2. Session Key Transport to Resource Server . . . . . . . . . 9
5. The Authenticator . . . . . . . . . . . . . . . . . . . . . . 10 5. The Authenticator . . . . . . . . . . . . . . . . . . . . . . 11
5.1. The Authenticator . . . . . . . . . . . . . . . . . . . . 10 5.1. The Authenticator . . . . . . . . . . . . . . . . . . . . 11
5.2. MAC Input String . . . . . . . . . . . . . . . . . . . . . 13 5.2. MAC Input String . . . . . . . . . . . . . . . . . . . . . 14
5.3. Keyed Message Digest Algorithms . . . . . . . . . . . . . 14 5.3. Keyed Message Digest Algorithms . . . . . . . . . . . . . 14
5.3.1. hmac-sha-1 . . . . . . . . . . . . . . . . . . . . . . 14 5.3.1. hmac-sha-1 . . . . . . . . . . . . . . . . . . . . . . 14
5.3.2. hmac-sha-256 . . . . . . . . . . . . . . . . . . . . . 14 5.3.2. hmac-sha-256 . . . . . . . . . . . . . . . . . . . . . 15
6. Verifying the Authenticator . . . . . . . . . . . . . . . . . 15 6. Verifying the Authenticator . . . . . . . . . . . . . . . . . 16
6.1. Timestamp Verification . . . . . . . . . . . . . . . . . . 15 6.1. Timestamp Verification . . . . . . . . . . . . . . . . . . 16
6.2. Error Handling . . . . . . . . . . . . . . . . . . . . . . 16 6.2. Error Handling . . . . . . . . . . . . . . . . . . . . . . 17
7. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 7. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8. Security Considerations . . . . . . . . . . . . . . . . . . . 17 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19
8.1. Key Distribution . . . . . . . . . . . . . . . . . . . . . 17 8.1. Key Distribution . . . . . . . . . . . . . . . . . . . . . 19
8.2. Offering Confidentiality Protection for Access to 8.2. Offering Confidentiality Protection for Access to
Protected Resources . . . . . . . . . . . . . . . . . . . 17 Protected Resources . . . . . . . . . . . . . . . . . . . 19
8.3. Authentication of Resource Servers . . . . . . . . . . . . 18 8.3. Authentication of Resource Servers . . . . . . . . . . . . 19
8.4. Plaintext Storage of Credentials . . . . . . . . . . . . . 18 8.4. Plaintext Storage of Credentials . . . . . . . . . . . . . 20
8.5. Entropy of Session Keys . . . . . . . . . . . . . . . . . 18 8.5. Entropy of Session Keys . . . . . . . . . . . . . . . . . 20
8.6. Denial of Service / Resource Exhaustion Attacks . . . . . 19 8.6. Denial of Service / Resource Exhaustion Attacks . . . . . 21
8.7. Timing Attacks . . . . . . . . . . . . . . . . . . . . . . 19 8.7. Timing Attacks . . . . . . . . . . . . . . . . . . . . . . 21
8.8. CSRF Attacks . . . . . . . . . . . . . . . . . . . . . . . 19 8.8. CSRF Attacks . . . . . . . . . . . . . . . . . . . . . . . 21
8.9. Protecting HTTP Header Fields . . . . . . . . . . . . . . 20 8.9. Protecting HTTP Header Fields . . . . . . . . . . . . . . 22
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23
9.1. JSON Web Token Claims . . . . . . . . . . . . . . . . . . 20 9.1. JSON Web Token Claims . . . . . . . . . . . . . . . . . . 23
9.2. MAC Token Algorithm Registry . . . . . . . . . . . . . . . 20 9.2. MAC Token Algorithm Registry . . . . . . . . . . . . . . . 23
9.2.1. Registration Template . . . . . . . . . . . . . . . . 21 9.2.1. Registration Template . . . . . . . . . . . . . . . . 24
9.2.2. Initial Registry Contents . . . . . . . . . . . . . . 21 9.2.2. Initial Registry Contents . . . . . . . . . . . . . . 24
9.3. OAuth Access Token Type Registration . . . . . . . . . . . 22 9.3. OAuth Access Token Type Registration . . . . . . . . . . . 24
9.3.1. The "mac" OAuth Access Token Type . . . . . . . . . . 22 9.3.1. The "mac" OAuth Access Token Type . . . . . . . . . . 25
9.4. OAuth Parameters Registration . . . . . . . . . . . . . . 22 9.4. OAuth Parameters Registration . . . . . . . . . . . . . . 25
9.4.1. The "mac_key" OAuth Parameter . . . . . . . . . . . . 22 9.4.1. The "mac_key" OAuth Parameter . . . . . . . . . . . . 25
9.4.2. The "mac_algorithm" OAuth Parameter . . . . . . . . . 22 9.4.2. The "mac_algorithm" OAuth Parameter . . . . . . . . . 25
9.4.3. The "kid" OAuth Parameter . . . . . . . . . . . . . . 23 9.4.3. The "kid" OAuth Parameter . . . . . . . . . . . . . . 26
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 27
11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 28
11.1. Normative References . . . . . . . . . . . . . . . . . . . 23 11.1. Normative References . . . . . . . . . . . . . . . . . . . 28
11.2. Informative References . . . . . . . . . . . . . . . . . . 25 11.2. Informative References . . . . . . . . . . . . . . . . . . 29
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25 Appendix A. Background Information . . . . . . . . . . . . . . . 31
A.1. Security and Privacy Threats . . . . . . . . . . . . . . . 31
A.2. Threat Mitigation . . . . . . . . . . . . . . . . . . . . 32
A.2.1. Confidentiality Protection . . . . . . . . . . . . . . 32
A.2.2. Sender Constraint . . . . . . . . . . . . . . . . . . 33
A.2.3. Key Confirmation . . . . . . . . . . . . . . . . . . . 34
A.2.4. Summary . . . . . . . . . . . . . . . . . . . . . . . 35
A.3. Requirements . . . . . . . . . . . . . . . . . . . . . . . 36
A.4. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . 40
A.4.1. Access to an 'Unprotected' Resource . . . . . . . . . 40
A.4.2. Offering Application Layer End-to-End Security . . . . 40
A.4.3. Preventing Access Token Re-Use by the Resource
Server . . . . . . . . . . . . . . . . . . . . . . . . 41
A.4.4. TLS Channel Binding Support . . . . . . . . . . . . . 41
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 42
1. Introduction 1. Introduction
This specification describes how to use MAC Tokens in HTTP requests This specification describes how to use MAC Tokens in HTTP requests
and responses to access protected resources via the OAuth 2.0 and responses to access protected resources via the OAuth 2.0
protocol [RFC6749]. An OAuth client willing to access a protected protocol [RFC6749]. An OAuth client willing to access a protected
resource needs to demonstrate possession of a symmetric key by using resource needs to demonstrate possession of a symmetric key by using
it with a keyed message digest function to the request. The keyed it with a keyed message digest function to the request. The keyed
message digest function is computed over a flexible set of parameters message digest function is computed over a flexible set of parameters
from the HTTP message. from the HTTP message.
The MAC Token mechanism requires the establishment of a shared The MAC Token mechanism requires the establishment of a shared
symmetric key between the client and the resource server. This symmetric key between the client and the resource server. This
specification defines a three party key distribution protocol to specification defines a three party key distribution protocol to
dynamically distribute this session key from the authorization server dynamically distribute this session key from the authorization server
to the client and the resource server. to the client and the resource server.
The design goal for this mechanism is to support the requirements The design goal for this mechanism is to support the requirements
outlined in [I-D.tschofenig-oauth-security]. In particular, when a outlined in Appendix A. In particular, when a server uses this
server uses this mechanism, a passive attacker will be unable to use mechanism, a passive attacker will be unable to use an eavesdropped
an eavesdropped access token exchanged between the client and the access token exchanged between the client and the resource server.
resource server. In addition, this mechanism helps secure the access In addition, this mechanism helps secure the access token against
token against leakage when sent over a secure channel to the wrong leakage when sent over a secure channel to the wrong resource server
resource server if the client provided information about the resource if the client provided information about the resource server it wants
server it wants to interact with in the request to the authorization to interact with in the request to the authorization server.
server.
Since a keyed message digest only provides integrity protection and Since a keyed message digest only provides integrity protection and
data-origin authentication confidentiality protection can only be data-origin authentication confidentiality protection can only be
added by the usage of Transport Layer Security (TLS). This added by the usage of Transport Layer Security (TLS). This
specification provides a mechanism for channel binding is included to specification provides a mechanism for channel binding is included to
ensure that a TLS channel is not terminated prematurely and indeed ensure that a TLS channel is not terminated prematurely and indeed
covers the entire end-to-end communication. covers the entire end-to-end communication.
2. Terminology 2. Terminology
skipping to change at page 22, line 39 skipping to change at page 25, line 35
[[ this document ]] [[ this document ]]
9.4. OAuth Parameters Registration 9.4. OAuth Parameters Registration
This specification registers the following parameters in the OAuth This specification registers the following parameters in the OAuth
Parameters Registry established by [RFC6749]. Parameters Registry established by [RFC6749].
9.4.1. The "mac_key" OAuth Parameter 9.4.1. The "mac_key" OAuth Parameter
Parameter name: mac_key Parameter name: mac_key
Parameter usage location: authorization response, token response Parameter usage location: authorization response, token response
Change controller: IETF Change controller: IETF
Specification document(s): [[ this document ]] Specification document(s): [[ this document ]]
Related information: None Related information: None
9.4.2. The "mac_algorithm" OAuth Parameter 9.4.2. The "mac_algorithm" OAuth Parameter
Parameter name: mac_algorithm Parameter name: mac_algorithm
Parameter usage location: authorization response, token response Parameter usage location: authorization response, token response
Change controller: IETF Change controller: IETF
Specification document(s): [[ this document ]] Specification document(s): [[ this document ]]
Related information: None Related information: None
9.4.3. The "kid" OAuth Parameter 9.4.3. The "kid" OAuth Parameter
Parameter name: kid Parameter name: kid
Parameter usage location: authorization response, token response Parameter usage location: authorization response, token response
Change controller: IETF Change controller: IETF
Specification document(s): [[ this document ]] Specification document(s): [[ this document ]]
Related information: None Related information: None
10. Acknowledgments 10. Acknowledgments
This document is based on OAuth 1.0 and we would like to thank Eran This document is based on OAuth 1.0 and we would like to thank Eran
Hammer-Lahav for his work on incorporating the ideas into OAuth 2.0. Hammer-Lahav for his work on incorporating the ideas into OAuth 2.0.
As part of this initial work the following persons provided feedback: As part of this initial work the following persons provided feedback:
Ben Adida, Adam Barth, Phil Hunt, Rasmus Lerdorf, James Manger, Ben Adida, Adam Barth, Rasmus Lerdorf, James Manger, William Mills,
William Mills, Scott Renfro, Justin Richer, Toby White, Peter Scott Renfro, Justin Richer, Toby White, Peter Wolanin, and Skylar
Wolanin, and Skylar Woodward Woodward
Further work in this document was done as part of OAuth working group Further work in this document was done as part of OAuth working group
conference calls late 2012/early 2013 and in design team conference conference calls late 2012/early 2013 and in design team conference
calls February 2013. The following persons (in addition to the OAuth calls February 2013. The following persons (in addition to the OAuth
WG chairs, Hannes Tschofenig, and Derek Atkins) provided their input WG chairs, Hannes Tschofenig, and Derek Atkins) provided their input
during these calls: Bill Mills, Justin Richer, Phil Hunt, Prateek during these calls: Bill Mills, Justin Richer, Phil Hunt, Prateek
Mishra, Mike Jones, George Fletcher, John Bradley, Tony Nadalin, Mishra, Mike Jones, George Fletcher, Leif Johansson, Lucy Lynch, John
Thomas Hardjono, Brian Campbell Bradley, Tony Nadalin, Klaas Wierenga, Thomas Hardjono, Brian
Campbell
In the appendix of this document we re-use content from [RFC4962] and
the authors would like thank Russ Housely and Bernard Aboba for their
work on RFC 4962.
11. References 11. References
11.1. Normative References 11.1. Normative References
[I-D.ietf-httpbis-p1-messaging] [I-D.ietf-httpbis-p1-messaging]
Fielding, R. and J. Reschke, "Hypertext Transfer Protocol Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
(HTTP/1.1): Message Syntax and Routing", (HTTP/1.1): Message Syntax and Routing",
draft-ietf-httpbis-p1-messaging-22 (work in progress), draft-ietf-httpbis-p1-messaging-23 (work in progress),
February 2013. July 2013.
[I-D.ietf-jose-json-web-encryption] [I-D.ietf-jose-json-web-encryption]
Jones, M., Rescorla, E., and J. Hildebrand, "JSON Web Jones, M., Rescorla, E., and J. Hildebrand, "JSON Web
Encryption (JWE)", draft-ietf-jose-json-web-encryption-08 Encryption (JWE)", draft-ietf-jose-json-web-encryption-12
(work in progress), December 2012. (work in progress), July 2013.
[I-D.ietf-oauth-json-web-token] [I-D.ietf-oauth-json-web-token]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
(JWT)", draft-ietf-oauth-json-web-token-06 (work in (JWT)", draft-ietf-oauth-json-web-token-10 (work in
progress), December 2012. progress), July 2013.
[I-D.richer-oauth-introspection] [I-D.richer-oauth-introspection]
Richer, J., "OAuth Token Introspection", Richer, J., "OAuth Token Introspection",
draft-richer-oauth-introspection-03 (work in progress), draft-richer-oauth-introspection-04 (work in progress),
February 2013. May 2013.
[I-D.tschofenig-oauth-audience] [I-D.tschofenig-oauth-audience]
Tschofenig, H., "OAuth 2.0: Audience Information", Tschofenig, H., "OAuth 2.0: Audience Information",
draft-tschofenig-oauth-audience-00 (work in progress), draft-tschofenig-oauth-audience-00 (work in progress),
February 2013. February 2013.
[NIST-FIPS-180-3]
National Institute of Standards and Technology, "Secure
Hash Standard (SHS). FIPS PUB 180-3, October 2008".
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part One: Format of Internet Message Extensions (MIME) Part One: Format of Internet Message
Bodies", RFC 2045, November 1996. Bodies", RFC 2045, November 1996.
[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
Hashing for Message Authentication", RFC 2104, Hashing for Message Authentication", RFC 2104,
February 1997. February 1997.
[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.
skipping to change at page 24, line 45 skipping to change at page 29, line 10
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A., and L. Stewart, "HTTP Leach, P., Luotonen, A., and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication", Authentication: Basic and Digest Access Authentication",
RFC 2617, June 1999. RFC 2617, June 1999.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, January 2005. RFC 3986, January 2005.
[RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness
Requirements for Security", BCP 106, RFC 4086, June 2005.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226, IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008. May 2008.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008. (TLS) Protocol Version 1.2", RFC 5246, August 2008.
[RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings
for TLS", RFC 5929, July 2010.
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
April 2011. April 2011.
[RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework",
RFC 6749, October 2012. RFC 6749, October 2012.
[W3C.REC-html401-19991224] [W3C.REC-html401-19991224]
Hors, A., Raggett, D., and I. Jacobs, "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>.
11.2. Informative References 11.2. Informative References
[I-D.tschofenig-oauth-security] [I-D.hardjono-oauth-kerberos]
Tschofenig, H. and P. Hunt, "OAuth 2.0 Security: Going Hardjono, T., "OAuth 2.0 support for the Kerberos V5
Beyond Bearer Tokens", draft-tschofenig-oauth-security-01 Authentication Protocol", draft-hardjono-oauth-kerberos-01
(work in progress), December 2012. (work in progress), December 2010.
[I-D.tschofenig-oauth-hotk]
Bradley, J., Hunt, P., Nadalin, A., and H. Tschofenig,
"The OAuth 2.0 Authorization Framework: Holder-of-the-Key
Token Usage", draft-tschofenig-oauth-hotk-02 (work in
progress), February 2013.
[NIST-FIPS-180-3]
National Institute of Standards and Technology, "Secure
Hash Standard (SHS). FIPS PUB 180-3, October 2008".
[NIST800-63]
Burr, W., Dodson, D., Perlner, R., Polk, T., Gupta, S.,
and E. Nabbus, "NIST Special Publication 800-63-1,
INFORMATION SECURITY", December 2008.
[RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness
Requirements for Security", BCP 106, RFC 4086, June 2005.
[RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
Kerberos Network Authentication Service (V5)", RFC 4120,
July 2005.
[RFC4279] Eronen, P. and H. Tschofenig, "Pre-Shared Key Ciphersuites
for Transport Layer Security (TLS)", RFC 4279,
December 2005.
[RFC4962] Housley, R. and B. Aboba, "Guidance for Authentication,
Authorization, and Accounting (AAA) Key Management",
BCP 132, RFC 4962, July 2007.
[RFC5056] Williams, N., "On the Use of Channel Bindings to Secure
Channels", RFC 5056, November 2007.
[RFC5849] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849,
April 2010.
[RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings
for TLS", RFC 5929, July 2010.
[RFC6125] Saint-Andre, P. and J. Hodges, "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)", RFC 6125, March 2011.
[RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization
Framework: Bearer Token Usage", RFC 6750, October 2012.
Appendix A. Background Information
With the desire to define a security mechanism in addition to bearer
tokens a design team was formed to collect threats, explore different
threat mitigation techniques, describe use cases, and to derive
requirements for the MAC token based security mechanism defined in
the body of this document. This appendix provides information about
this thought process that should help to motivate design decision.
A.1. Security and Privacy Threats
The following list presents several common threats against protocols
utilizing some form of tokens. This list of threats is based on NIST
Special Publication 800-63 [NIST800-63]. We exclude a discussion of
threats related to any form of identity proofing and authentication
of the Resource Owner to the Authorization Server since these
procedures are not part of the OAuth 2.0 protocol specificaiton
itself.
Token manufacture/modification:
An attacker may generate a bogus tokens or modify the token
content (such as authentication or attribute statements) of an
existing token, causing Resource Server to grant inappropriate
access to the Client. For example, an attacker may modify the
token to extend the validity period. A Client may modify the
token to have access to information that they should not be able
to view.
Token disclosure: Tokens may contain personal data, such as real
name, age or birthday, payment information, etc.
Token redirect:
An attacker uses the token generated for consumption by the
Resource Server to obtain access to another Resource Server.
Token reuse:
An attacker attempts to use a token that has already been used
once with a Resource Server. The attacker may be an eavesdropper
who observes the communication exchange or, worse, one of the
communication end points. A Client may, for example, leak access
tokens because it cannot keep secrets confidential. A Client may
also re-use access tokens for some other Resource Servers.
Finally, a Resource Server may use a token it had obtained from a
Client and use it with another Resource Server that the Client
interacts with. A Resource Server, offering relatively
unimportant application services, may attempt to use an access
token obtained from a Client to access a high-value service, such
as a payment service, on behalf of the Client using the same
access token.
We excluded one threat from the list, namely 'token repudiation'.
Token repudiation refers to a property whereby a Resource Server is
given an assurance that the Authorization Server cannot deny to have
created a token for the Client. We believe that such a property is
interesting but most deployments prefer to deal with the violation of
this security property through business actions rather than by using
cryptography.
A.2. Threat Mitigation
A large range of threats can be mitigated by protecting the content
of the token, using a digital signature or a keyed message digest.
Alternatively, the content of the token could be passed by reference
rather than by value (requiring a separate message exchange to
resolve the reference to the token content). To simplify the
subsequent description we assume that the token itself is digitally
signed by the Authorization Server and therefore cannot be modified.
To deal with token redirect it is important for the Authorization
Server to include the identifier of the intended recipient - the
Resource Server. A Resource Server must not be allowed to accept
access tokens that are not meant for its consumption.
To provide protection against token disclosure two approaches are
possible, namely (a) not to include sensitive information inside the
token or (b) to ensure confidentiality protection. The latter
approach requires at least the communication interaction between the
Client and the Authorization Server as well as the interaction
between the Client and the Resource Server to experience
confidentiality protection. As an example, Transport Layer Security
with a ciphersuite that offers confidentiality protection has to be
applied. Encrypting the token content itself is another alternative.
In our scenario the Authorization Server would, for example, encrypt
the token content with a symmetric key shared with the Resource
Server.
To deal with token reuse more choices are available.
A.2.1. Confidentiality Protection
In this approach confidentiality protection of the exchange is
provided on the communication interfaces between the Client and the
Resource Server, and between the Client and the Authorization Server.
No eavesdropper on the wire is able to observe the token exchange.
Consequently, a replay by a third party is not possible. An
Authorization Server wants to ensure that it only hands out tokens to
Clients it has authenticated first and who are authorized. For this
purpose, authentication of the Client to the Authorization Server
will be a requirement to ensure adequate protection against a range
of attacks. This is, however, true for the description in
Appendix A.2.2 and Appendix A.2.3 as well. Furthermore, the Client
has to make sure it does not distribute the access token to entities
other than the intended the Resource Server. For that purpose the
Client will have to authenticate the Resource Server before
transmitting the access token.
A.2.2. Sender Constraint
Instead of providing confidentiality protection the Authorization
Server could also put the identifier of the Client into the protected
token with the following semantic: 'This token is only valid when
presented by a Client with the following identifer.' When the access
token is then presented to the Resource Server how does it know that
it was provided by the Client? It has to authenticate the Client!
There are many choices for authenticating the Client to the Resource
Server, for example by using client certificates in TLS [RFC5246], or
pre-shared secrets within TLS [RFC4279]. The choice of the preferred
authentication mechanism and credential type may depend on a number
of factors, including
o security properties
o available infrastructure
o library support
o credential cost (financial)
o performance
o integration into the existing IT infrastructure
o operational overhead for configuration and distribution of
credentials
This long list hints to the challenge of selecting at least one
mandatory-to-implement Client authentication mechanism.
A.2.3. Key Confirmation
A variation of the mechanism of sender authentication described in
Appendix A.2.2 is to replace authentication with the proof-of-
possession of a specific (session) key, i.e., key confirmation. In
this model the Resource Server would not authenticate the Client
itself but would rather verify whether the Client knows the session
key associated with a specific access token. Examples of this
approach can be found with the OAuth 1.0 MAC token [RFC5849],
Kerberos [RFC4120] when utilizing the AP_REQ/AP_REP exchange (see
also [I-D.hardjono-oauth-kerberos] for a comparison between Kerberos
and OAuth), the Holder-of-the-Key approach
[I-D.tschofenig-oauth-hotk], and also the MAC token approach defined
in this document.
To illustrate key confirmation the first examples borrow from
Kerberos and use symmetric key cryptography. Assume that the
Authorization Server shares a long-term secret with the Resource
Server, called K(Authorization Server-Resource Server). This secret
would be established between them in an initial registration phase.
When the Client requests an access token the Authorization Server
creates a fresh and unique session key Ks and places it into the
token encrypted with the long term key K(Authorization Server-
Resource Server). Additionally, the Authorization Server attaches Ks
to the response message to the Client (in addition to the access
token itself) over a confidentiality protected channel. When the
Client sends a request to the Resource Server it has to use Ks to
compute a keyed message digest for the request (in whatever form or
whatever layer). The Resource Server, when receiving the message,
retrieves the access token, verifies it and extracts K(Authorization
Server-Resource Server) to obtain Ks. This key Ks is then used to
verify the keyed message digest of the request message.
Note that in this example one could imagine that the mechanism to
protect the token itself is based on a symmetric key based mechanism
to avoid any form of public key infrastructure but this aspect is not
further elaborated in the scenario.
A similar mechanism can also be designed using asymmetric
cryptography. When the Client requests an access token the
Authorization Server creates an ephemeral public / privacy key pair
(PK/SK) and places the public key PK into the protected token. When
the Authorization Server returns the access token to the Client it
also provides the PK/SK key pair over a confidentiality protected
channel. When the Client sends a request to the Resource Server it
has to use the privacy key SK to sign the request. The Resource
Server, when receiving the message, retrieves the access token,
verifies it and extracts the public key PK. It uses this ephemeral
public key to verify the attached signature.
A.2.4. Summary
As a high level message, there are various ways how the threats can
be mitigated and while the details of each solution is somewhat
different they all ultimately accomplish the goal.
The three approaches are:
Confidentiality Protection:
The weak point with this approach, which is briefly described in
Appendix A.2.1, is that the Client has to be careful to whom it
discloses the access token. What can be done with the token
entirely depends on what rights the token entitles the presenter
and what constraints it contains. A token could encode the
identifier of the Client but there are scenarios where the Client
is not authenticated to the Resource Server or where the
identifier of the Client rather represents an application class
rather than a single application instance. As such, it is
possible that certain deployments choose a rather liberal approach
to security and that everyone who is in possession of the access
token is granted access to the data.
Sender Constraint:
The weak point with this approach, which is briefly described in
Appendix A.2.2, is to setup the authentication infrastructure such
that Clients can be authenticated towards Resource Servers.
Additionally, Authorization Server must encode the identifier of
the Client in the token for later verification by the Resource
Server. Depending on the chosen layer for providing Client-side
authentication there may be additional challenges due Web server
load balancing, lack of API access to identity information, etc.
Key Confirmation:
The weak point with this approach, see Appendix A.2.3, is the
increased complexity: a complete key distribution protocol has to
be defined.
In all cases above it has to be ensured that the Client is able to
keep the credentials secret.
A.3. Requirements
In an attempt to address the threats described in Appendix A.1 the
Bearer Token, which corresponds to the description in Appendix A.2.1,
was standardized and the work on a JSON-based token format has been
started [I-D.ietf-oauth-json-web-token]. The required capability to
protected the content of a JSON token using integrity and
confidentiality mechanisms is work in progress at the time of
writing.
Consequently, the purpose of the remaining document is to provide
security that goes beyond the Bearer Token offered security
protection.
RFC 4962 [RFC4962] gives useful guidelines for designers of
authentication and key management protocols. While RFC 4962 was
written with the AAA framework used for network access authentication
in mind the offered suggestions are useful for the design of other
key management systems as well. The following requirements list
applies OAuth 2.0 terminology to the requirements outlined in RFC
4962.
These requirements include
Cryptographic Algorithm Independent:
The key management protocol MUST be cryptographic algorithm
independent.
Strong, fresh session keys:
Session keys MUST be strong and fresh. Each session deserves an
independent session key, i.e., one that is generated specifically
for the intended use. In context of OAuth this means that keying
material is created in such a way that can only be used by the
combination of a Client instance, protected resource, and
authorization scope.
Limit Key Scope:
Following the principle of least privilege, parties MUST NOT have
access to keying material that is not needed to perform their
role. Any protocol that is used to establish session keys MUST
specify the scope for session keys, clearly identifying the
parties to whom the session key is available.
Replay Detection Mechanism:
The key management protocol exchanges MUST be replay protected.
Replay protection allows a protocol message recipient to discard
any message that was recorded during a previous legitimate
dialogue and presented as though it belonged to the current
dialogue.
Authenticate All Parties:
Each party in the key management protocol MUST be authenticated to
the other parties with whom they communicate. Authentication
mechanisms MUST maintain the confidentiality of any secret values
used in the authentication process. Secrets MUST NOT be sent to
another party without confidentiality protection.
Authorization:
Client and Resource Server authorization MUST be performed. These
entities MUST demonstrate possession of the appropriate keying
material, without disclosing it. Authorization is REQUIRED
whenever a Client interacts with an Authorization Server. The
authorization checking prevents an elevation of privilege attack,
and it ensures that an unauthorized authorized is detected.
Keying Material Confidentiality and Integrity:
While preserving algorithm independence, confidentiality and
integrity of all keying material MUST be maintained.
Confirm Cryptographic Algorithm Selection:
The selection of the "best" cryptographic algorithms SHOULD be
securely confirmed. The mechanism SHOULD detect attempted roll-
back attacks.
Uniquely Named Keys:
Key management proposals require a robust key naming scheme,
particularly where key caching is supported. The key name
provides a way to refer to a key in a protocol so that it is clear
to all parties which key is being referenced. Objects that cannot
be named cannot be managed. All keys MUST be uniquely named, and
the key name MUST NOT directly or indirectly disclose the keying
material.
Prevent the Domino Effect:
Compromise of a single Client MUST NOT compromise keying material
held by any other Client within the system, including session keys
and long-term keys. Likewise, compromise of a single Resource
Server MUST NOT compromise keying material held by any other
Resource Server within the system. In the context of a key
hierarchy, this means that the compromise of one node in the key
hierarchy must not disclose the information necessary to
compromise other branches in the key hierarchy. Obviously, the
compromise of the root of the key hierarchy will compromise all of
the keys; however, a compromise in one branch MUST NOT result in
the compromise of other branches. There are many implications of
this requirement; however, two implications deserve highlighting.
First, the scope of the keying material must be defined and
understood by all parties that communicate with a party that holds
that keying material. Second, a party that holds keying material
in a key hierarchy must not share that keying material with
parties that are associated with other branches in the key
hierarchy.
Bind Key to its Context:
Keying material MUST be bound to the appropriate context. The
context includes the following.
* The manner in which the keying material is expected to be used.
* The other parties that are expected to have access to the
keying material.
* The expected lifetime of the keying material. Lifetime of a
child key SHOULD NOT be greater than the lifetime of its parent
in the key hierarchy.
Any party with legitimate access to keying material can determine
its context. In addition, the protocol MUST ensure that all
parties with legitimate access to keying material have the same
context for the keying material. This requires that the parties
are properly identified and authenticated, so that all of the
parties that have access to the keying material can be determined.
The context will include the Client and the Resource Server
identities in more than one form.
Authorization Restriction:
If Client authorization is restricted, then the Client SHOULD be
made aware of the restriction.
Client Identity Confidentiality:
A Client has identity confidentiality when any party other than
the Resource Server and the Authorization Server cannot
sufficiently identify the Client within the anonymity set. In
comparison to anonymity and pseudonymity, identity confidentiality
is concerned with eavesdroppers and intermediaries. A key
management protocol SHOULD provide this property.
Resource Owner Identity Confidentiality:
Resource servers SHOULD be prevented from knowing the real or
pseudonymous identity of the Resource Owner, since the
Authorization Server is the only entity involved in verifying the
Resource Owner's identity.
Collusion:
Resource Servers that collude can be prevented from using
information related to the Resource Owner to track the individual.
That is, two different Resource Servers can be prevented from
determining that the same Resource Owner has authenticated to both
of them. This requires that each Authorization Server obtains
different keying material as well as different access tokens with
content that does not allow identification of the Resource Owner.
AS-to-RS Relationship Anonymity:
This MAC Token security does not provide AAS-to-RS Relationship
Anonymity since the Client has to inform the resource server about
the Resource Server it wants to talk to. The Authorization Server
needs to know how to encrypt the session key the Client and the
Resource Server will be using.
As an additional requirement a solution MUST enable support for
channel bindings. The concept of channel binding, as defined in
[RFC5056], allows applications to establish that the two end-points
of a secure channel at one network layer are the same as at a higher
layer by binding authentication at the higher layer to the channel at
the lower layer.
Furthermore, there are performance concerns specifically with the
usage of asymmetric cryptography. As such, the requirement can be
phrases as 'faster is better'. [QUESTION: How are we trading the
benefits of asymmetric cryptography against the performance impact?]
Finally, there are threats that relate to the experience of the
software developer as well as operational policies. Verifying the
servers identity in TLS is discussed at length in [RFC6125].
A.4. Use Cases
This section lists use cases that provide additional requirements and
constrain the solution space.
A.4.1. Access to an 'Unprotected' Resource
This use case is for a web client that needs to access a resource
where no integrity and confidentiality protection is provided for the
exchange of data using TLS following the OAuth-based request. In
accessing the resource, the request, which includes the access token,
must be protected against replay, and modification.
While it is possible to utilize bearer tokens in this scenario, as
described in [RFC6750], with TLS protection when the request to the
protected resource is made there may be the desire to avoid using TLS
between the client and the resource server at all. In such a case
the bearer token approach is not possible since it relies on TLS for
ensuring integrity and confidentiality protection of the access token
exchange since otherwise replay attacks are possible: First, an
eavesdropper may steal an access token and represent it at a
different resource server. Second, an eavesdropper may steal an
access token and replay it against the same resource server at a
later point in time. In both cases, if the attack is successful, the
adversary gets access to the resource owners data or may perform an
operation selected by the adversary (e.g., sending a message). Note
that the adversary may obtain the access token (if the
recommendations in [RFC6749] and [RFC6750] are not followed) using a
number of ways, including eavesdropping the communication on the
wireless link.
Consequently, the important assumption in this use case is that a
resource server does not have TLS support and the security solution
should work in such a scenario. Furthermore, it may not be necessary
to provide authentication of the resource server towards the client.
A.4.2. Offering Application Layer End-to-End Security
In Web deployments resource servers are often placed behind load
balancers. Note that the load balancers are deployed by the same
organization that operates the resource servers. These load
balancers may terminate Transport Layer Security (TLS) and the
resulting HTTP traffic may be transmitted in clear from the load
balancer to the resource server. With application layer security
independent of the underlying TLS security it is possible to allow
application servers to perform cryptographic verification on an end-
to-end basis.
The key aspect in this use case is therefore to offer end-to-end
security in the presence of load balancers via application layer
security.
A.4.3. Preventing Access Token Re-Use by the Resource Server
Imagine a scenario where a resource server that receives a valid
access token re-uses it with other resource server. The reason for
re-use may be malicious or may well be legimiate. In a legimiate use
case consider a case where the resource server needs to consult third
party resource servers to complete the requested operation. In both
cases it may be assumed that the scope of the access token is
sufficiently large that it allows such a re-use. For example,
imagine a case where a company operates email services as well as
picture sharing services and that company had decided to issue access
tokens with a scope that allows access to both services.
With this use case the desire is to prevent such access token re-use.
This also implies that the legimiate use cases require additional
enhancements for request chaining.
A.4.4. TLS Channel Binding Support
In this use case we consider the scenario where an OAuth 2.0 request
to a protected resource is secured using TLS but the client and the
resource server demand that the underlying TLS exchange is bound to
additional application layer security to prevent cases where the TLS
connection is terminated at a load balancer or a TLS proxy is used
that splits the TLS connection into two separate connections.
In this use case additional information is conveyed to the resource
server to ensure that no entity entity has tampered with the TLS
connection.
Authors' Addresses Authors' Addresses
Justin Richer Justin Richer
The MITRE Corporation The MITRE Corporation
Email: jricher@mitre.org Email: jricher@mitre.org
William Mills William Mills
Yahoo! Inc. Yahoo! Inc.
skipping to change at page 26, line 4 skipping to change at page 42, line 17
Justin Richer Justin Richer
The MITRE Corporation The MITRE Corporation
Email: jricher@mitre.org Email: jricher@mitre.org
William Mills William Mills
Yahoo! Inc. Yahoo! Inc.
Phone: Phone:
Email: wmills@yahoo-inc.com Email: wmills@yahoo-inc.com
Hannes Tschofenig (editor) Hannes Tschofenig (editor)
Nokia Siemens Networks Nokia Siemens Networks
Linnoitustie 6 Linnoitustie 6
Espoo 02600 Espoo 02600
Finland Finland
Phone: +358 (50) 4871445 Phone: +358 (50) 4871445
Email: Hannes.Tschofenig@gmx.net Email: Hannes.Tschofenig@gmx.net
URI: http://www.tschofenig.priv.at URI: http://www.tschofenig.priv.at
Phil Hunt
Oracle Corporation
Phone:
Email: phil.hunt@yahoo.com
 End of changes. 33 change blocks. 
78 lines changed or deleted 656 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/