OAuth J. Richer, Ed.Network Working Group Richer Internet-Draft The MITRE Corporation Intended status: Standards Track W.Mills, Ed.Mills Expires:May 30,August 29, 2013 Yahoo! Inc. H. Tschofenig, Ed. Nokia Siemens NetworksNovember 28, 2012February 25, 2013 OAuth 2.0 Message Authentication Code (MAC) Tokensdraft-ietf-oauth-v2-http-mac-02draft-ietf-oauth-v2-http-mac-03 Abstract Thisdocument specifies the HTTPspecification describes how to use MACaccess authentication scheme, anTokens in HTTPauthentication methodrequests to access OAuth 2.0 protected resources. An OAuth client willing to access a protected resource needs to demonstrate possession of a crytographic key by using it with a keyed messageauthentication code (MAC) algorithmdigest function toprovide cryptographic verification of portions of HTTP requests.the request. The document also definesan OAuth 2.0 bindinga key distribution protocol foruse as an access token type. NOTE: This document (and other OAuth 2.0 security documents, such as [I-D.tschofenig-oauth-hotk]) are still work in progress in the OAuth working group. As such, the content of this document may change. Forobtaining adiscussion about security requirements please consult [I-D .tschofenig-oauth-security]. Your input on the detailed security requirements is highly appreciated.fresh session key. Status of this Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire onMay 30,August 29, 2013. Copyright Notice Copyright (c)20122013 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents(http://trustee.ietf.org/ license-info)(http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .2 1.1. Example4 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Architecture . . . . . . .3 1.2. Notational Conventions. . . . . . . . . . . . . . . . . . 52. Issuing MAC Credentials4. Key Distribution . . . . . . . . . . . . . . . . . . .5 3. Making Requests. . . . 7 4.1. Session Key Transport to Client . . . . . . . . . . . . . 7 4.2. Session Key Transport to Resource Server . . . . . .6 3.1.. . . 9 5. The"Authorization" Request HeaderAuthenticator . . . . . . . . . . . . . .6 3.2. Request MAC. . . . . . . . 10 5.1. The Authenticator . . . . . . . . . . . . . . .7 3.2.1. Normalized Request. . . . . 10 5.2. MAC Input String . . . . . . . . . . . . . .7 3.2.2.. . . . . . . 13 5.3. Keyed Message Digest Algorithms . . . . . . . . . . . . . 14 5.3.1. hmac-sha-1 . . . . . . . . . . . . . . . . . . . . . .8 3.2.3.14 5.3.2. hmac-sha-256 . . . . . . . . . . . . . . . . . . . . .9 4.14 6. VerifyingRequeststhe Authenticator . . . . . . . . . . . . . . . . . 15 6.1. Timestamp Verification . . . . .9 4.1. Timestamp Verification. . . . . . . . . . . . . 15 6.2. Error Handling . . . . .9 4.2. The "WWW-Authenticate" Response Header Field. . . . . . .10 5. Use with OAuth 2.0. . . . . . . . . . 16 7. Example . . . . . . . . . . . .11 5.1. Issuing MAC-Type Access Tokens. . . . . . . . . . . . . .11 6.. 17 8. Security Considerations . . . . . . . . . . . . . . . . . . .12 6.1. MAC Keys Transmission17 8.1. Key Distribution . . . . . . . . . . . . . . . . . .12 6.2.. . . 17 8.2. Offering Confidentialityof RequestsProtection for Access to Protected Resources . . . . . . . . . . . . . . .12 6.3. Spoofing by Counterfeit Servers. . . . 17 8.3. Authentication of Resource Servers . . . . . . . . . . .12 6.4.. 18 8.4. Plaintext Storage of Credentials . . . . . . . . . . . . .12 6.5.18 8.5. Entropy ofMACSession Keys . . . . . . . . . . . . . . . . .. . 13 6.6.18 8.6. Denial of Service / Resource Exhaustion Attacks . . . . .13 6.7.19 8.7. Timing Attacks . . . . . . . . . . . . . . . . . . . . . .14 6.8.19 8.8. CSRF Attacks . . . . . . . . . . . . . . . . . . . . . . .14 6.9. Coverage Limitations19 8.9. Protecting HTTP Header Fields . . . . . . . . . . . . . . 20 9. IANA Considerations . . . . .14 7. IANA Considerations. . . . . . . . . . . . . . . . 20 9.1. JSON Web Token Claims . . . . .15 7.1. The HTTP. . . . . . . . . . . . . 20 9.2. MACAuthentication SchemeToken Algorithm Registry . .15 7.1.1.. . . . . . . . . . . . . 20 9.2.1. Registration Template . . . . . . . . . . . . . . . .15 7.1.2.21 9.2.2. Initial Registry Contents . . . . . . . . . . . . . .16 7.2.21 9.3. OAuth Access Token Type Registration . . . . . . . . . . .16 7.2.1.22 9.3.1. The "mac" OAuth Access Token Type . . . . . . . . . .16 7.3.22 9.4. OAuth Parameters Registration . . . . . . . . . . . . . .17 7.3.1.22 9.4.1. The "mac_key" OAuth Parameter . . . . . . . . . . . .17 7.3.2.22 9.4.2. The "mac_algorithm" OAuth Parameter . . . . . . . . .17 8. Contributors . . . . . . . . . . .22 9.4.3. The "kid" OAuth Parameter . . . . . . . . . . . . . .17 9.23 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .17 10.23 11. References . . . . . . . . . . . . . . . . . . . . . . . . . .17 10.1.23 11.1. Normative References . . . . . . . . . . . . . . . . . .17 10.2.. 23 11.2. Informative References . . . . . . . . . . . . . . . . .18. 25 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . .1925 1. Introduction This specificationdefines the HTTPdescribes how to use MACaccess authentication scheme, providing a method for making authenticatedTokens in HTTP requestswith partial cryptographic verification of the request, covering the HTTP method, request URI,andhost. Similarresponses tothe HTTP Basicaccessauthentication scheme [RFC2617],protected resources via theMAC scheme utilizesOAuth 2.0 protocol [RFC6749]. An OAuth client willing to access asetprotected resource needs to demonstrate possession ofclient credentials which include an identifier and key. However, in contrast with the Basic scheme, thea symmetric keyis never included in authenticated requests but is usedby using it with a keyed message digest function tocalculatetherequest MAC value whichrequest. The keyed message digest function isincluded instead.computed over a flexible set of parameters from the HTTP message. The MACschemeToken mechanism requires the establishment of a shared symmetric key between the client and the resource server. This specificationoffers one such method for issuingdefines aset of MAC credentialsthree party key distribution protocol to dynamically distribute this session key from the authorization server to the clientusing OAuth 2.0 inand theform of a MAC-type access token.resource server. Theprimarydesign goalof this mechanism is to simplify and improve HTTP authentication for services that are unwilling or unable to employ TLSforevery request. In particular,this mechanismleverage an initial TLS setup phase to establish a shared secret between the client and the server. The shared secretisthen used over an insecure channeltoprovide protection against a passive network attacker.support the requirements outlined in [I-D.tschofenig-oauth-security]. In particular, when a server uses this mechanism, a passivenetworkattacker will be unable to"steal"use an eavesdropped access token exchanged between theuser's session token, as is possible today with cookiesclient andother bearer tokens.the resource server. In addition, this mechanism helps secure thesessionaccess token against leakage when sent over a secure channel to the wrongserver. For example, when the client uses some form of dynamic configuration to determine where to send an authenticated request, or when the client fails to properly validate the server's identity as part of its TLS handshake. Unlike the HTTP Digest authentication scheme, this mechanism does not require interacting with theresource serverto prevent replay attacks. Instead,if the clientprovides both a nonce and a timestamp, which the server can use to prevent replay attacks using a bounded amount of storage. Also unlike Digest, this mechanism is not intended to protect the user's password itself becauseprovided information about theclient andresource serverboth have accessit wants tothe key materialinteract with in theclear. Instead, servers should issue a short-lived derivative credential for this mechanism during the initial TLS setup phase. 1.1. Example The client attempts to access a protected resource without authentication, making the following HTTPrequest to theresource server: GET /resource/1?b=1&a=2 HTTP/1.1 Host: example.com The resource server returns the following authentication challenge: HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC The client has previously obtained a set of MAC credentials for accessing resources on the "http://example.com/"authorization server.The MAC credentials issued to the client include the following attributes: MAC key identifier: h480djs93hd8 MAC key: 489dks293j39 MAC algorithm: hmac-sha-1 The client constructs theSince a keyed message digest only provides integrity protection and data-origin authenticationheaderconfidentiality protection can only be added bycalculating a timestamp (e.g.thenumberusage ofseconds since January 1, 1970 00:00:00 GMT) and generating a random string used asTransport Layer Security (TLS). This specification provides anonce: Timestamp: 1336363200 Nonce: dj83hs9s The client constructs the normalized request string (the new line separator character is represented by "\n"mechanism fordisplay purposes only; the trailing new line separator signify that no extension valuechannel binding is includedwith the request, explained below): 1336363200\n dj83hs9s\n GET\n /resource/1?b=1&a=2\n example.com\n 80\n \n The request MAC is calculated using the specified MAC algorithm "hmac-sha-1" and the MAC key over the normalized request string. The result is base64-encodedtoproduce the request MAC: bhCQXTVyfj5cmA9uKkPFx1zeOXM= The client includes the MAC key identifier, nonce, and request MAC with the request using the "Authorization" request header field: GET /resource/1?b=1&a=2 HTTP/1.1 Host: example.com Authorization: MAC id="h480djs93hd8", ts="1336363200", nonce="dj83hs9s", mac="bhCQXTVyfj5cmA9uKkPFx1zeOXM=" The server validates the request by calculating the request MAC again based on the request received and verifies the validityensure that a TLS channel is not terminated prematurely andscope of the MAC credentials. If valid, the server responds withindeed covers therequested resource representation. 1.2. Notational Conventionsentire end-to-end communication. 2. Terminology The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in this specification are to be interpreted as described in [RFC2119]. This specification uses the Augmented Backus-Naur Form (ABNF) notation of [I-D.ietf-httpbis-p1-messaging]. Additionally, the following rules are included from [RFC2617]: auth-param.2. Issuing MAC Credentials This specification provides one method for issuing MAC credentials using OAuth 2.0 as described in Section 5. This specification does not mandate serversSession Key: The terms mac key, session key, and symmetric key are used interchangably and refer tosupport any particular method for issuing MAC credentials,the cryptographic keying material established between the client andother methods MAY be definedthe resource server. This temporary key used between the client andused. Whenever MAC credentials are issued,thecredentials MUST includeresource server, with a lifetime limited to thefollowing attributes: MAClifetime of the access token. This session keyidentifieris generated by the authorization server. Authenticator: Astring identifyingrecord containing information that can be shown to have been recently generated using theMACsession keyused to calculateknown only by therequest MAC.client and the resource server. Message Authentication Code (MAC): Message authentication codes (MACs) are hash functions that take two distinct inputs, a message and a secret key, and produce a fixed-size output. Thestringdesign goal isusually opaquethat it is practically infeasible to produce theclient.same output without knowledge of the key. The terms keyed message digest functions and MACs are used interchangably. 3. Architecture The architecture of the proposal described in this document assumes that the authorization servertypically assignsacts as aspecific scopetrusted third party that provides session keys to clients andlifetimetoeach set of MAC credentials. The identifier MAY denote a unique valueresource servers. These session keys are used by the client and the resource server as input toretrievea MAC. In order to obtain the session key the client interacts with the authorizationinformation (e.g. fromserver as part of the adatabase), or self-containnormal grant exchange. This is shown in an abstract way in Figure 1. Together with the access token the authorizationinformationserver returns a session key (in the mac_key parameter) and several other parameters. The resource server obtains the session key via the access token. Both of these two key distribution steps are described in more detail in Section 4. +---------------+ ^| | AS-RS Key // | Authorization |<******* / | Server | * // | | * / | | * (I) // /+---------------+ * Access / // * Token / / * Request// // (II) Access Token * / / +Session Key (SK) * // // * / v v +-----------+ +------------+ | | | | | | | Resource | | Client | | Server | | | | | | | | | +-----------+ +------------+ ****: Out-of-Band Long-Term Key Establishment ----: Dynamic Session Key Distribution Figure 1: Architecture: Interaction between the Client and the Authorization Server. Once the client has obtained the necessary access token and the session key (including parameters) it can start to interact with the resource server. To demonstrate possession of the session key it computes a MAC and adds various fields to the outgoing request message. We call this structure the "Authenticator". The server evaluates the request, includes an Authenticator and returns averifiable manner (i.e.response back to the client. Since the access token is valid for astring consistingperiod ofsome datatime the resource server may decide to cache it so that it does not need to be provided in every request from the client. This interaction is shown in Figure 2. +---------------+ | | | Authorization | | Server | | | | | +---------------+ +-----------+ Authenticator (a) +------------+ | |---------------------->| | | | [+Access Token] | Resource | | Client | | Server | | | Authenticator (b) | | | |<----------------------| | +-----------+ +------------+ ^ ^ | | | | SK SK +param +param Figure 2: Architecture: Interaction between the Client and the Resource Server. 4. Key Distribution For this scheme to function asignature). MACsession keyA shared symmetric secretmust be available to the client and the resource server, which is then used as a parameter in theMAC algorithm key. Thekeyed message digest function. This document describes the key distribution mechanism that uses the authorization serverMUST NOT reissueas apreviously issued MACtrusted third party, which ensures that the session key is transported from the authorization server to the client and the resource server. 4.1. Session Key Transport to Client Authorization servers issue MAC Tokens based on requests from clients. The request MUST include the audience parameter defined in [I-D.tschofenig-oauth-audience], which indicates the resource server the client wants to interact with. This specification assumes use of the 'Authorization Code' grant. If the request is processed successfully by the authorization server it MUST return at least the following parameters to the client: kid The name of the key (key id), which is an identifiercombination. MAC algorithm Agenerated by the resource server. It is RECOMMENDED that the authorization server generates this key id by computing a hash over the access_token, for example using SHA-1, and to encode it in a base64 format. access_token The OAuth 2.0 access token. mac_key The session key generated by the authorization server. Note that the lifetime of the session key is equal to the lifetime of the access token. mac_algorithm The MAC algorithm used to calculate the request MAC.ValueThe value MUST be one of "hmac-sha-1", "hmac-sha-256", or a registered extension algorithm name as described in Section7.1. Algorithm names are case-sensitive. If9.2. The authorization server is assumed to know theMACset of algorithms supported by the client and the resource server. It selects an algorithm that meets the security policies and isnot understoodsupported by both nodes. For example: HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "access_token": "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDK0hTMjU2In0. pwaFh7yJPivLjjPkzC-GeAyHuy7AinGcS51AZ7TXnwkC80Ow1aW47kcT_UV54ubo nONbeArwOVuR7shveXnwPmucwrk_3OCcHrCbE1HR-Jfme2mF_WR3zUMcwqmU0RlH kwx9txo_sKRasjlXc8RYP-evLCmT1XRXKjtY5l44Gnh0A84hGvVfMxMfCWXh38hi 2h8JMjQHGQ3mivVui5lbf-zzb3qXXxNO1ZYoWgs5tP1-T54QYc9Bi9wodFPWNPKB kY-BgewG-Vmc59JqFeprk1O08qhKQeOGCWc0WPC_n_LIpGWH6spRm7KGuYdgDMkQ bd4uuB0uPPLx_euVCdrVrA. AxY8DCtDaGlsbGljb3RoZQ. 7MI2lRCaoyYx1HclVXkr8DhmDoikTmOp3IdEmm4qgBThFkqFqOs3ivXLJTku4M0f laMAbGG_X6K8_B-0E-7ak-Olm_-_V03oBUUGTAc-F0A. OwWNxnC-BMEie-GkFHzVWiNiaV3zUHf6fCOGTwbRckU", "token_type":"mac", "expires_in":3600, "refresh_token":"8xLOxBtZp8", "kid":"22BIjxU93h/IgwEb4zCRu5WF37s=", "mac_key":"adijq39jdlaska9asud", "mac_algorithm":"hmac-sha-256" } 4.2. Session Key Transport to Resource Server The transport of the mac_key from the authorization server to the resource server is accomplished by conveying theclient,encrypting mac_key inside theclientaccess token. At the time of writing only one standardized format for carrying the access token is defined: the JSON Web Token (JWT) [I-D.ietf-oauth-json-web-token]. Note that the header of the JSON Web Encryption (JWE) structure [I-D.ietf-jose-json-web-encryption], which is a JWT with encrypted content, MUSTNOT usecontain a key id (kid) in theMAC credentialsheader to allow the resource server to select the appropriate keying material for decryption. This keying material is a symmetric or an asymmetric long-term key established between the resource server andcontinuethe authorization server, asif no MAC credentials were issued.shown in Figure 1 as AS-RS key. TheMACestablishment of this long-term keyidentifier, MAC key, MAC algorithm strings MUST NOT include characters other than: %x20-21 / %x23-5B / %x5D-7E ; Any printable ASCII character except for <">is outside the scope of this specification. This document defines two new claims to be carried in the JWT: mac_key, kid. These two parameters match the content of the mac_key and<\> 3. Making Requeststhe kid conveyed to the client, as shown in Section 4.1. kid The name of the key (key id), which is an identifier generated by the resource server. mac_key The session key generated by the authorization server. This example shows a JWT claim set without header and without encryption: {"iss":"authorization-server.example.com", "exp":1300819380, "kid":"22BIjxU93h/IgwEb4zCRu5WF37s=", "mac_key":"adijq39jdlaska9asud", "aud":"apps.example.com" } QUESTIONS: An alternative to the use of a JWT to convey the access token with the encrypted mac_key is use the token introspect [I-D.richer-oauth-introspection]. What mechanism should be described? What should be mandatory to implement? QUESTIONS: The above description assumes that the entire access token is encrypted but it would be possible to only encrypt the session key and to only apply integrity protection to other fields. Is this desireable? 5. The Authenticator Tomake authenticated requests,access a protected resource the client must be in the possession of a valid set ofMAC credentials acceptedsession key provided by the authorization server. The client constructs therequest by calculating a set of attributes,authenticator, as described in Section 5.1. 5.1. The Authenticator The client constructs the authenticator andadding themadds the resulting fields to the HTTP request using the "Authorization" request headerfield as described in Section 3.1. 3.1. The "Authorization" Request Headerfield. The "Authorization" request header field uses the framework defined by[RFC2617] as follows: credentials[RFC2617]. To include the authenticator in a subsequent response from the authorization server to the client the WWW-Authenticate header is used. For further exchanges a new, yet-to-be-defined header will be used. authenticator = "MAC" 1*SP #params params = id / ts /nonceseq-nr /extaccess_token / macid/ h / cb kid ="id""kid" "=" string-value ts = "ts" "=" ( <"> timestamp <"> ) / timestampnonceseq-nr ="nonce""seq-nr" "=" string-valueextaccess_token ="ext""access_token" "="string-valueb64token mac = "mac" "=" string-value cb = "cb" "=" token h = "h" "=" h-tag h-tag = %x68 [FWS] "=" [FWS] hdr-name *( [FWS] ":" [FWS] hdr-name ) hdr-name = token timestamp = 1*DIGIT string-value = ( <"> plain-string <"> ) / plain-string plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E ) b64token = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" The header attributes are set as follows:idkid REQUIRED. TheMACkey identifier. ts REQUIRED. Therequesttimestamp. The value MUST be a positive integer set by the client when making each request to the number ofseconds elapsed from a fixed point in time (e.g.milliseconds since 1 January1, 1970 00:00:00 GMT).1970. Thevalue MUST NOT include leading zeros (e.g. "000273154346"). nonce REQUIRED. A unique string generatedJavaScript getTime() function or the Java System.currentTimeMillis() function, for example, produce such a timestamp. seq-nr OPTIONAL. This optional field includes the initial sequence number to be used by the messages exchange between the client and the server when the replay protection provided by the timestamp is not sufficient enough replay protection. This field specifies the initial sequence number for messages from the client to the server. When included in the response message, the initial sequence number is that for messages from the server to the client.TheSequence numbers fall in the range 0 through 2^64 - 1 and wrap to zero following the valueMUST2^64 - 1. The initial sequence number SHOULD beuniquerandom and uniformly distributed acrossall requests withthesame timestampfull space of possible sequence numbers, so that it cannot be guessed by an attacker andMAC key identifier combination. ext OPTIONAL. A string usedso that it and the successive sequence numbers do not repeat other sequences. In the event that more than 2^64 messages are toinclude additional informationbe generated in a series of messages, rekeying MUST be performed before sequence numbers are reused. Rekeying requires a new access token to be requested. access_token CONDITIONAL. The access_token MUST be included in the first request from the client to the server but MUST NOT be included in a subsequent response and in a further protocol exchange. mac REQUIRED. The result of the keyed message digest computation, as described in Section 5.3. cb OPTIONAL. This field carries the channel binding value from RFC 5929 [RFC5929] in the following format: cb= channel- binding-type ":" channel-binding-content. RFC 5929 offers two types of channel bindings for TLS. First, there is the 'tls- server-end-point' channel binding, which uses a hash of the TLS server's certificate as it appears, octet for octet, in the server's Certificate message. The second channel binding is 'tls-unique', which uses the first TLS Finished message sent (note: the Finished struct, not the TLS record layer message containing it) in the most recent TLS handshake of the TLS connection being bound to. As an example, the cb field may contain cb=tls-unique:9382c93673d814579ed1610d3 h OPTIONAL. This field contains a colon-separated list of header field names that identify the header fields presented to the keyed message digest algorithm. If the 'h' header field iscoveredabsent then the following value is set by default: h="host". The field MUST contain therequest MAC.complete list of header fields in the order presented to the keyed message digest algorithm. Thecontent and formatfield MAY contain names of header fields that do not exist at thestring is beyondtime of computing thescopekeyed message digest; nonexistent header fields do not contribute to the keyed message digest computation (that is, they are treated as the null input, including the header field name, the separating colon, the header field value, and any CRLF terminator). By including header fields that do not actually exist in the keyed message digest computation, the client can allow the resource server to detect insertion of those header fields by intermediaries. However, since the client cannot possibly know what header fields might be defined in the future, thisspecification. mac REQUIRED.mechanism cannot be used to prevent the addition of any possible unknown header fields. TheHTTP request MAC as describedfield MAY contain multiple instances of a header field name, meaning multiple occurrences of the corresponding header field are included in the header hash. The field MUST NOT include the mac header field. Folding whitespace (FWS) MAY be included on either side of the colon separator. Header field names MUST be compared against actual header field names in a case-insensitive manner. This list MUST NOT be empty. See Section3.2.8 for a discussion of choosing header fields. Attributes MUST NOT appear more than once. Attribute values are limited to a subset of ASCII, which does not require escaping, as defined by the plain-string ABNF.3.2. Request5.2. MACTheInput String An HTTP message can either be a request from clientuses the MAC algorithm and the MAC keytocalculateserver or a response from server to client. Syntactically, therequest MAC. This specification definestwoalgorithms: "hmac-sha-1" and "hmac-sha-256", and provides an extension registry for additional algorithms. 3.2.1. Normalized Request String The normalized request string is a consistent, reproducible concatenation of severaltypes of message differ only in theHTTP request elements intostart-line, which is either asingle string. By normalizing the request intorequest-line (for requests) or areproducible string, the clientstatus-line (for responses). Two parameters serve as input to a keyed message digest function: a key andserver can both calculatean input string. Depending on therequest MAC overcommunication direction either theexact same value. The string is constructed by concatenating together, in order,request-line or thefollowing HTTP request elements, each followed by a new line character (%x0A): 1. The timestamp value calculated forstatus-line is used as therequest. 2. The noncefirst valuegenerated for the request. 3. The HTTP request method in upper case. For example: "HEAD", "GET", "POST", etc. 4. The HTTP request-URI as definedfollowed by[RFC2616] section 5.1.2. 5. The hostname included inthe HTTPrequest using the "Host" requestheaderfield in lower case. 6. The port as includedfields listed in theHTTP request using the "Host" request header field. If'h' parameter. Then, theheadertimestamp fielddoes not include a port,and thedefault value forseq-nr field (if present) is concatenated. As an example, consider thescheme MUST be used (e.g. 80 forHTTPand 443 for HTTPS). 7. The value of the "ext" "Authorization"requestheader field attribute if one was included inwith therequest, otherwise, an empty string. Each element is followed by anew line separator character(%x0A) includingrepresented by "\n" for editorial purposes only. The h parameter is set to h=host, thelast element and even when an element valuekid isan empty string. For example,314906b0-7c55, and theHTTP request:timstamp is 1361471629. POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b&c2&a3=2+q HTTP/1.1 Host: example.com Hello World!using timestamp "264095:7d8f3e4a", nonce "7d8f3e4a",The resulting string is: POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b&c2&a3=2+q HTTP/1.1\n 1361471629\n example.com\n 5.3. Keyed Message Digest Algorithms The client uses a cryptographic algorithm together with a session key to calculate a keyed message digest. This specification defines two algorithms: "hmac-sha-1" and "hmac-sha-256", and provides an extensionstring "a,b,c" is normalized into the following string (the new line separator character is represented by "\n"registry fordisplay purposes only): 264095\n 7d8f3e4a\n POST\n /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b&c2&a3=2+q\n example.com\n 80\n a,b,c\n 3.2.2.additional algorithms. 5.3.1. hmac-sha-1 "hmac-sha-1" uses the HMAC-SHA1algorithmalgorithm, as defined in [RFC2104]: mac = HMAC-SHA1 (key, text) Where: text is set to the value of thenormalized requestinput string as described in Section3.2.1,5.2, key is set to theMACsession key provided by the authorization server, and mac is used to set the value of the "mac" attribute, after the resultoctetstring is base64-encoded per[RFC2045] section 6.8. 3.2.3.Section 6.8 of [RFC2045]. 5.3.2. hmac-sha-256 "hmac-sha-256" uses the HMACalgorithmalgorithm, as defined in[RFC2104] together[RFC2104], with the SHA-256 hashfunctionfunction, defined in [NIST-FIPS-180-3]: mac = HMAC-SHA256 (key, text) Where: text is set to the value of thenormalize requestinput string as described in Section3.2.1,5.2, key is set to theMACsession key provided by the authorization server, and mac is used to set the value of the "mac" attribute, after the resultoctetstring is base64-encoded per[RFC2045] section 6.8. 4.Section 6.8 of [RFC2045]. 6. VerifyingRequests A serverthe Authenticator When receiving a message with anauthenticated request validates it by performingauthenticator the followingREQUIRED steps:steps are performed: 1. When the authorization server receives a message with a new access token (and consequently a new session key) then it obtains the session key by retrieving the content of the access token (which requires decryption of the session key contained inside the token). The content of the access token, in particular the audience field and the scope, MUST be verified as described in Alternatively, the kid parameter is used to look-up a cached session key from a previous exchange. 2. Recalculate therequest MACkeyed message digest, as described in Section3.25.3, and compare the request MAC to the value received from the client via the "mac" attribute.2. Ensure3. Verify that no replay took place by comparing thecombinationvalue oftimestamp, nonce, and MAC key identifier received fromtheclient has not been received before in a previous request.ts (timestamp) header with the local time. Theserver MAY reject requestsprocessing of authenticators with stale timestampsasis described in Section4.1. 3. Verify the scope and validity of the MAC credentials. If the request fails verification, the server SHOULD respond using the 401 (Unauthorized) HTTP status code and include the "WWW- Authenticate" response header field as6.1. Error handling is described in Section4.2. 4.1.6.2. 6.1. Timestamp Verification Thetimestamp, nonce, and MAC key identifier combination provide a unique identifier whichtimestamp field enables the server topreventdetect replay attacks. Without replay protection, an attacker can usea compromised (but otherwise valid and authenticated)an eavesdropped requestmore than once, gaining long termto gain access to a protected resource.Including a timestamp with the nonce removes the need to retain an infinite number of nonce values for future checks, by enabling the server to restrict the time period after which a request with an old timestamp is rejected. If such a restrictionThe following procedure isenforced, the server MUST:used to detect replays: o At the time the first request is received from the client for eachMACkey identifier, calculate the difference (in seconds) between the request timestamp and theserver'slocal clock. The difference- the request time delta - MUST be kept as long as the MAC key credentials are valid.is stored locally for later use. o For each subsequentclientrequest, apply the request time delta torequestthe timestamp included in the message to calculate the adjusted requesttime - the time when the request MAC has been generated by the client, adjusted to the server's clock.time. o Verify that the adjusted request time is within the allowed time period defined by the authorization server.The server SHOULD allow for a sufficiently large window to accommodate network delays (betweenIf the local time and the calculated time based in the requesthas been generateddiffer by more than theclientallowable clock skew (e.g., 5 minutes) a replay has tothe time it is received by the server and processed). 4.2. The "WWW-Authenticate" Response Header Fieldbe assumed. 6.2. Error Handling If the protected resource request does not includeauthentication credentials,an access token, lacks the keyed message digest, contains an invalidMACkey identifier, or is malformed, the server SHOULDinclude thereturn a 401 (Unauthorized) HTTP"WWW-Authenticate" response header field.status code. For example: HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC The "WWW-Authenticate" request header field uses the framework defined by [RFC2617] as follows: challenge = "MAC" [ 1*SP #param ] param = error / auth-param error = "error" "=" ( token / quoted-string) Each attribute MUST NOT appear more than once. If the protected resource request included a MAC "Authorization" request header field and failed authentication, the server MAY include the "error" attribute to provide the client with a human- readable explanation why the access request was declined to assist the client developer in identifying the problem. For example: HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC error="The MAC credentials expired"5. Use with OAuth 2.0 OAuth 2.0 ([RFC6749]) defines an extensible token-based authentication framework. The MAC authentication scheme can be used to make OAuth-based requests by issuing MAC-type access tokens. This specification does not define methods for the client to specifically request a MAC-type token from the authorization server. Additionally, it does not include any discovery facilities for identifying which HMAC algorithms are supported by a resource server, or how the client may go about obtaining MAC access tokens for any given protected resource. 5.1. Issuing MAC-Type Access Tokens Authorization servers issuing MAC-type access tokens MUST include the following parameters whenever a response includes the "access_token" parameter: access_token REQUIRED. The MAC key identifier. mac_key REQUIRED. The MAC key. mac_algorithm REQUIRED. The MAC algorithm used to calculate the request MAC. Value MUST be one of "hmac-sha-1", "hmac-sha-256", or a registered extension algorithm name as described7. Example [Editor's Note: Full example goes inSection 7.1. For example: HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "access_token":"SlAV32hkKG", "token_type":"mac", "expires_in":3600, "refresh_token":"8xLOxBtZp8", "mac_key":"adijq39jdlaska9asud", "mac_algorithm":"hmac-sha-256" } 6.here.] 8. Security Considerations As stated in [RFC2617], the greatest sources of risks are usually found not in the core protocol itself but in policies and procedures surrounding its use. Implementers are strongly encouraged to assess how this protocol addresses their securityrequirements. 6.1. MAC Keys Transmissionrequirements and the security threats they want to mitigate. 8.1. Key Distribution This specification describestwoa key distribution mechanism forobtaining or transmitting MAC keys, both requireproviding theuse ofsession key (and parameters) from the authorization server to the client. The interaction between the client and the authorization server requires Transport Layer Security (TLS) with atransport-layerciphersuite offering confidentiality protection. The session key MUST NOT be transmitted in clear since this would completely destroy the securitymechanism when sending MAC keysbenefits of the proposed scheme. Furthermore, the obtained session key MUST be stored so that only the client instance has access to it. Storing theclient. Additional methods usedsession key, for example, in a cookie allows other parties toobtain MAC credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS or SSL. 6.2. Confidentialitygain access to this confidential information and compromises the security ofRequests Whilethe protocol. 8.2. Offering Confidentiality Protection for Access to Protected Resources This specification can be used with and without Transport Layer Security (TLS). Without TLS this protocol provides a mechanism for verifying the integrity ofrequests,requests and responses, it provides noguarantee of request confidentiality. Unless further precautions are taken,confidentiality protection. Consequently, eavesdroppers will have full access to requestcontent. Servers should carefully considercontent and further messages exchanged between thekinds of data likely toclient and the resource server. This could besent as part ofproblematic when data is exchanged that requires care, suchrequests,as personal data. When TLS is used then confidentiality can be ensured andshould employ transport-layerwith the use of the TLS channel binding feature it ensures that the TLS channel is cryptographically bound to the used MAC token. TLS in combination with channel bindings bound to the MAC token provide securitymechanismssuperiour toprotect sensitive resources. 6.3. Spoofing by Counterfeitthe OAuth Bearer Token. The use of TLS in combination with the MAC token is highly recommended to ensure the confidentiality of the user's data. 8.3. Authentication of Resource Servers This protocolmakes no attemptallows clients to verify the authenticity ofthe server. A hostile party could take advantageresource servers in two ways: 1. The resource server demonstrates possession ofthisthe session key byinterceptingcomputing a keyed message digest function over a number of HTTP fields in theclient's requests and returning misleading or otherwise incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should require transport-layer security for any requests whereresponse to theauthenticity ofrequest from the client. 2. When TLS is used the resource serveror of request responsesisan issue. 6.4.authenticated as part of the TLS handshake. 8.4. Plaintext Storage of Credentials The MAC keyfunctionsworks in the same way passwords do in traditional authentication systems. In order to compute therequest MAC,keyed message digest, the client and the resource server must have access to the MAC key in plaintext form.This is in contrast, for example, to modern operating systems, which store only a one-way hash of user credentials.If an attacker were to gain access to these MAC keys - or worse, to the resource server's or the authorization server's database of all such MAC keys - he or she would be able to perform any action on behalf of anyresource owner. Accordingly, itclient. It iscriticaltherefore paramount to the security of the protocol thatservers protecttheseMACsession keys are protected from unauthorized access.6.5.8.5. Entropy ofMACSession Keys Unlessa transport-layer security protocolTLS isused,used between the client and the resource server, eavesdroppers will have full access toauthenticatedrequestsand request MAC values, andsent by the client. They will thus be able to mount offline brute-force attacks to recover theMACsession keyused. Serversused to compute the keyed message digest. Authorization servers should be careful toassign MAC keys which are long enough,generate fresh andrandom enough,unique session keys with sufficient entrophy to resist such attacks for at least the length of time that theMAC credentialssession keys are valid. For example, ifthe MAC credentials area session key is valid fortwo weeks,one day, authorization serversshouldmust ensure that it is not possible to mount a brute force attack that recovers theMACsession key in less thantwo weeks.one day. Of course, servers are urged to err on the side of caution, and use the longestMACsession key reasonable. It is equally important that the pseudo-random number generator (PRNG) used to generate theseMACsession keys be of sufficiently high quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibitpatterns or other weaknessespatterns, which make cryptanalysisor brute force attackseasier. Implementersshould be careful to use cryptographically secure PRNGsare advised toavoid these problems. 6.6.follow the guidance on random number generation in [RFC4086]. 8.6. Denial of Service / Resource Exhaustion Attacks This specification includes a number of features which may make resource exhaustion attacks against resource servers possible. For example,this protocol requires serversa resource server may need totrack used nonces. If an attacker is ableneed touse many nonces quickly,consult backend databases and theresources required to track them may exhaust available capacity. And again, this protocol can require servers to perform potentially expensive computations in orderauthorization server to verifythe request MAC onan incomingrequests.request including an access token before granting access to the protected resource. An attacker may exploit this to perform a denial of service attack by sending a large number of invalid requests to the server.Resource Exhaustion attacks are by no means specificThe computational overhead of verifying the keyed message digest alone is, however, not sufficient tothis specification. However, implementers should be carefulmount a denial of service attack since keyed message digest functions belong toconsidertheadditional avenuescomputationally fastest cryptographic algorithms. The usage ofattack that this protocol exposes, and design their implementations accordingly.TLS does, however, require additional computational capabity to perform the asymmetric cryptographic operations. Forexample, entropy starvation typically results in eitheracompletebrief discussion about denial of servicewhile the system waits for new entropy or else in weak (easily guessable) MAC keys. When implementing this protocol, servers should consider whichvulnerabilities ofthese presents a more serious risk for their application and design accordingly. 6.7.TLS please consult Appendix F.5 of RFC 5246 [RFC5246]. 8.7. Timing Attacks This specification makes use of HMACs, for which a signature verification involves comparing the received MAC string to the expected one. If the string comparison operator operates in observably different times depending on inputs, e.g. because it compares the strings character by character and returns a negative result as soon as two characters fail to match, then it may be possible to use this timing information to determine the expected MAC, character by character.Service implementersImplementers are encouraged to use fixed-time string comparators for MAC verification.6.8.This means that the comparison operation is not terminated once a mismatch is found. 8.8. CSRF Attacks A Cross-Site Request Forgery attack occurs when a site, evil.com, initiates within the victim's browser the loading of a URL from or the posting of a form to a web site where a side-effect will occur, e.g. transfer of money, change of status message, etc. To prevent this kind of attack, web sites may use various techniques to determine that the originator of the request is indeed the site itself, rather than a third party. The classic approach is to include, in the set of URL parameters or form content, a nonce generated by the server and tied to the user's session, which indicates that only the server could have triggered the action. Recently, the Origin HTTP header has been proposed and deployed in some browsers. This header indicates the scheme, host, and port of the originator of a request. Some web applications may use this Origin header as a defense against CSRF. To keep this specification simple, HTTP headers are not part of the string to be MAC'ed. As a result, MAC authentication cannot defend against header spoofing, and a web site that uses the Host header to defend against CSRF attacks cannot use MAC authentication to defend against active network attackers. Sites that want the full protection of MAC Authentication should use traditional, cookie-tied CSRF defenses.6.9. Coverage Limitations The normalized request string has been designed to support the authentication methods defined in this specification. Those designing additional methods, should evaluated the compatibility of the normalized request string with their security requirements. Since the normalized request string does not cover the entire8.9. Protecting HTTPrequest, servers should employ additional mechanisms to protect such elements. The request MAC does not cover entity-headerHeader Fields This specification provides flexibility for selectively protecting header fieldswhich can often affect howand even therequestbodyis interpreted by the server (i.e. Content-Type). Ifof theserver behavior is influenced bymessage. At a minimum thepresence or value of such header fields, an attacker can manipulatefollowing fields are included in therequest header without being detected. 7.keyed message digest. 9. IANA Considerations7.1. The HTTP9.1. JSON Web Token Claims This document adds the following claims to the JSON Web Token Claims registry established with [I-D.ietf-oauth-json-web-token]: o Claim Name: "kid" o Change Controller: IETF o Specification Document(s): [[ this document ]] o Claim Name: "mac_key" o Change Controller: IETF o Specification Document(s): [[ this document ]] 9.2. MACAuthentication SchemeToken Algorithm Registry This specification establishes theHTTPMACauthentication scheme algorithmToken Algorithm registry. AdditionalMACkeyed message digest algorithms are registered on the advice of one or more Designated Experts (appointed by the IESG or their delegate), with a Specification Required (using terminology from [RFC5226]). However, to allow for the allocation of values prior to publication, the Designated Expert(s) may approve registration once they are satisfied that such a specification will be published. Registration requests should be sent to the [TBD]@ietf.org mailing list for review and comment, with an appropriate subject (e.g., "Request for MAC Algorithm: example"). [[ Note to RFC-EDITOR: The name of the mailing list should be determined in consultation with the IESG and IANA. Suggested name: http-mac-ext-review. ]] Within at most 14 days of the request, the Designated Expert(s) will either approve or deny the registration request, communicating this decision to the review list and IANA. Denials should include an explanation and, if applicable, suggestions as to how to make the request successful. Decisions (or lack thereof) made by the Designated Expert can be first appealed to Application Area Directors (contactable usingapp- ads@tools.ietf.orgapp-ads@tools.ietf.org email address or directly by looking up their email addresses on http://www.iesg.org/ website) and, if the appellant is not satisfied with the response, to the full IESG (using the iesg@iesg.org mailing list). IANA should only accept registry updates from the Designated Expert(s), and should direct all requests for registration to the review mailing list.7.1.1.9.2.1. Registration Template Algorithm name: The name requested (e.g., "example"). Change controller: For standards-track RFCs, state "IETF". For others, give the name of the responsible party. Other details (e.g., postal address, e-mail address, home page URI) may also be included. Specification document(s): Reference to document that specifies the algorithm, preferably including a URI that can be used to retrieve a copy of the document. An indication of the relevant sections may also be included, but is not required.7.1.2.9.2.2. Initial Registry Contents The HTTP MAC authentication scheme algorithm registry's initial contents are: o Algorithm name: hmac-sha-1 o Change controller: IETF o Specification document(s): [[ this document ]] o Algorithm name: hmac-sha-256 o Change controller: IETF o Specification document(s): [[ this document ]]7.2.9.3. OAuth Access Token Type Registration This specification registers the following access token type in the OAuth Access Token Type Registry.7.2.1.9.3.1. The "mac" OAuth Access Token Type Type name: mac Additional Token Endpoint Response Parameters: secret, algorithm HTTP Authentication Scheme(s): MAC Change controller: IETF Specification document(s): [[ this document ]]7.3.9.4. OAuth Parameters Registration This specification registers the following parameters in the OAuth Parameters Registry established by [RFC6749].7.3.1.9.4.1. The "mac_key" OAuth Parameter Parameter name: mac_key Parameter usage location: authorization response, token response Change controller: IETF Specification document(s): [[ this document ]] Related information: None7.3.2.9.4.2. The "mac_algorithm" OAuth Parameter Parameter name: mac_algorithm Parameter usage location: authorization response, token response Change controller: IETF Specification document(s): [[ this document ]] Related information: None8. Contributors9.4.3. The "kid" OAuth Parameter Parameter name: kid Parameter usage location: authorization response, token response Change controller: IETF Specification document(s): [[ this document ]] Related information: None 10. Acknowledgments 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.9. Acknowledgments The author would like to thankAs part of this initial work the following persons provided feedback: Ben Adida, Adam Barth, Phil Hunt, Rasmus Lerdorf, James Manger, William Mills, Scott Renfro, Justin Richer, Toby White, Peter Wolanin, and Skylar Woodwardfor their contributions, suggestions,Further work in this document was done as part of OAuth working group conference calls late 2012/early 2013 andfeedback. 10.in design team conference calls February 2013. The following persons (in addition to the OAuth WG chairs, Hannes Tschofenig, and Derek Atkins) provided their input during these calls: Bill Mills, Justin Richer, Phil Hunt, Prateek Mishra, Mike Jones, George Fletcher, John Bradley, Tony Nadalin, Thomas Hardjono, Brian Campbell 11. References10.1.11.1. Normative References[10][I-D.ietf-httpbis-p1-messaging] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing",Internet-Draft draft-ietf-httpbis-p1-messaging-21, October 2012. [11] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC 6749, Octoberdraft-ietf-httpbis-p1-messaging-22 (work in progress), February 2013. [I-D.ietf-jose-json-web-encryption] Jones, M., Rescorla, E., and J. Hildebrand, "JSON Web Encryption (JWE)", draft-ietf-jose-json-web-encryption-08 (work in progress), December 2012.[12] Hors, A., Raggett, D.[I-D.ietf-oauth-json-web-token] Jones, M., Bradley, J., andI. Jacobs, "HTML 4.01 Specification", World WideN. Sakimura, "JSON WebConsortium Recommendation REC-html401-19991224,Token (JWT)", draft-ietf-oauth-json-web-token-06 (work in progress), December1999, <http://www.w3.org/TR /1999/REC-html401-19991224>. [13]2012. [I-D.richer-oauth-introspection] Richer, J., "OAuth Token Introspection", draft-richer-oauth-introspection-03 (work in progress), February 2013. [I-D.tschofenig-oauth-audience] Tschofenig, H., "OAuth 2.0: Audience Information", draft-tschofenig-oauth-audience-00 (work in progress), February 2013. [NIST-FIPS-180-3] National Institute of Standards and Technology, "Secure Hash Standard (SHS). FIPS PUB 180-3, October2008", . [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [2]2008". [RFC2045] Freed, N. andN.S.N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996.[3][RFC2104] Krawczyk, H., Bellare,M.M., and R. Canetti, "HMAC: Keyed- Hashing for Message Authentication", RFC 2104, February 1997.[4][RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach,P.P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.[5][RFC2617] Franks, J., Hallam-Baker,P.M.,P., Hostetler,J.L.,J., Lawrence,S.D.,S., Leach,P.J.,P., Luotonen,A.A., and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999.[6][RFC3986] Berners-Lee, T., Fielding,R.R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005.[7][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 IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.[8][RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, August 2008.[9][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, April 2011.10.2.[RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC 6749, October 2012. [W3C.REC-html401-19991224] Hors, A., Raggett, D., and I. Jacobs, "HTML 4.01 Specification", World Wide Web Consortium Recommendation REC-html401-19991224, December 1999, <http://www.w3.org/TR/1999/REC-html401-19991224>. 11.2. Informative References[1][I-D.tschofenig-oauth-security] Tschofenig, H. and P. Hunt, "OAuth 2.0 Security: Going Beyond Bearer Tokens",Internet-Draft draft-tschofenig- oauth-security-00, September 2012. [2] Bradley, J., Hunt, P., Nadalin, A. and H. Tschofenig, "The OAuth 2.0 Authorization Framework: Holder-of-the-Key Token Usage", Internet-Draft draft-tschofenig-oauth-hotk-01, Julydraft-tschofenig-oauth-security-01 (work in progress), December 2012.[3] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849, April 2010.Authors' Addresses JustinRicher, editorRicher The MITRE Corporation Email: jricher@mitre.org WilliamMills, editorMills Yahoo! Inc. Phone: Email: wmills@yahoo-inc.com HannesTschofenig, editorTschofenig (editor) Nokia Siemens Networks Linnoitustie 6Espoo,Espoo 02600 Finland Phone: +358 (50) 4871445 Email: Hannes.Tschofenig@gmx.net URI: http://www.tschofenig.priv.at