To make discussion easier, here is the proposed text:

[NOTE: Text for the following Section 3 is based on OAUTH draft-11]


3.  Client Credentials

   When interacting with the authorization server, the client identifies
   itself using a set of client credentials which include a client
   identifier and other properties for client authentication.  The means
   through which the client obtains its credentials are beyond the scope
   of this specification. Some authentication 
   schemes require the client to undergo registration with the
   authorization server.

   Due to the nature of some clients, authorization servers SHOULD NOT
   make assumptions about the confidentiality of client secrets without
   establishing trust with the client.  Although it is difficult for 
   servers to ascertain the security capabilities of clients, in general 
   authorization servers SHOULD NOT issue client secrets to clients incapable 
   of keeping their secrets confidential.

   The authorization server MAY authenticate the client using any
   appropriate set of credentials and authentication schemes.  The
   client MUST NOT include more than one set of credentials or
   authentication mechanism with each request.

   Although authentication schemes and their protocol implementations 
   are out of scope, this specification seeks to support a broad 
   selection of authentication schemes that are currently deployed 
   today and that may be deployed in the future.


3.1.  Client Password Credentials

   Client password credentials use a shared symmetric secret to
   authenticate the client.  The client identifier and password are
   included in the request using the HTTP Basic authentication scheme as
   defined in [RFC2617] by including the client identifier as the
   username and client password as the password.

   For example (line breaks are for display purposes only):


     POST /token HTTP/1.1
     Host: server.example.com
     Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
     Content-Type: application/x-www-form-urlencoded

     grant_type=authorization_code&code=i1WsRn1uB1&
     redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb


   Alternatively, the client MAY include the password in the request
   body using the following parameters:

   client_id
         REQUIRED.  The client identifier.

   client_secret  REQUIRED.  The client password.

   For example (line breaks are for display purposes only):


     POST /token HTTP/1.1
     Host: server.example.com
     Content-Type: application/x-www-form-urlencoded

     grant_type=authorization_code&client_id=s6BhdRkqt3&
     client_secret=gX1fBat3bV&code=i1WsRn1uB1&
     redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb


   The authorization server MUST accept the client credentials using
   both request parameters and the HTTP Basic authentication scheme.
   The authorization server MAY support additional authentication
   schemes suitable for the transmission of password credentials.


3.2.  Shared Secret Credentials

   Beyond client password credentials, there is a broad family 
   of authentication schemes based on the notion of shared secrets.  
   In these schemes the primary aim is for the client to prove 
   possession of the shared secret. In the current OAUTH 2.0 context, 
   shared secret credentials are different from assertion credentials 
   (see below) in that here the client does not have to 
   provide any assertions or claims. 
   
   Within the family of authentication schemes based on the pairwise 
   sharing of secrets there are a variety of protocols that have 
   been deployed.  These include challenge-response protocols 
  (e.g. CHAP [RFC1994]), password-authenticated key agreement 
   protocols (e.g. EKE [REF]) and various embodiments 
   of the one-time password (OTP) protocols (e.g. [RFC2289]).

   These authentication protocols 
   are out of scope of this specification, but in deployment 
   of these authentication schemes with OAUTH 2.0, the authorization 
   server MUST accept the client credentials using
   both request parameters and the HTTP Basic authentication scheme.




3.3  Client Assertion Credentials

   The term assertion (or signed assertion) refers to a statement or 
   claim made by a trusted third party regarding a given subject 
   at a given moment in time. Typically an assertion is digitally 
   signed by its issuer in order to provide source-authenticity 
   and integrity protection. There are a number of vehicles for 
   the implementation of assertions.  
   Examples include X.509 subject and attribute certificates 
   [RFC3280,RFC5755], SAML 2.0 assertions [OASIS.saml-core-2.0-os], 
   Claims [OASIS.imi-identity-1.0], Kerberos service tickets [RFC4120] and 
others.  
   Their differences typically lie in their semantic expressiveness, 
   syntactic complexity and size.

   In OAUTH, client assertion credentials provide an extension point 
   by which the authorization server can authenticate a client by validating 
   a signed assertion issued by a third party (assertion issuer), 
   which is trusted by both the client and the authorization server.


   A client must obtain an assertion (such as
   a SAML [OASIS.saml-core-2.0-os] assertion) from an assertion issuer
   or may in some cases self-issue an assertion.  
   The format of the assertion, the process by
   which an assertion is obtained, and the method of validating an
   assertion are defined by the assertion issuer and the authorization
   server, and are beyond the scope of this specification. However, for 
   the purposes of the authorization server validating the identity of 
   a client, the assertion presented by the client SHOULD contain 
   at least the following information:

   o  Identity of the client.
   o  Identity of the issuer.
   o  Method of authentication used by the issuer to 
      authenticate the client (RECOMMENDED).
   o  Time of authentication of the client by the issuer (RECOMMENDED).
   o  Time of assertion issuance and validity period of assertion.
   o  Digital signature of the issuer.
   o  An indication (explicit or implied) as to the means by which 
      the client demonstrates its right to present the assertion (RECOMMENDED).



   When using a client assertion, the client includes the following
   parameters:


   client_assertion_type  REQUIRED.  The format of the assertion as
         defined by the authorization server.  The value MUST be an
         absolute URI.

   client_assertion  REQUIRED.  The client assertion.

   For example, the client sends the following access token request
   using a SAML 2.0 assertion to authenticate itself (line breaks are
   for display purposes only):


     POST /token HTTP/1.1
     Host: server.example.com
     Content-Type: application/x-www-form-urlencoded

     grant_type=authorization_code&code=i1WsRn1uB1&
     client_assertion=PHNhbWxwOl[...omitted for brevity...]ZT4%3D&
     client_assertion_type=
     urn%3Aoasis%3Anames%sAtc%3ASAML%3A2.0%3Aassertion&
     redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb


   When obtaining an access token using a client assertion together with
   an authorization code (as described in Section 5.1.1), a mechanism is
   needed to map between the value of "client_id" parameter used to
   obtain the authorization code, and the client assertion.  Such a
   mechanism is beyond the scope of this specification, but MUST
   be specified for any client assertion type used in combination with
   an authorization code.

   The authorization server MUST reject access token requests using
   client assertion credentials that do not contain HMAC or signed
   values that:

   o  State the assertion was specifically issued to be consumed by the
      receiving endpoint (typically via an audience or recipient value
      containing the receiving endpoint's identifier).

   o  Identify the entity that issued the assertion (typically via an
      issuer value).

   o  Identify when the assertion expires as an absolute time (typically
      via an expiration value containing a UTC date/time value).  The
      authorization server MUST reject expired assertions.




References

RFC1994.  PPP Challenge Handshake Authentication Protocol (CHAP), IETF 
Standards Track, August 1996.

S. M. Bellovin; M. Merritt (May 1992). "Encrypted Key Exchange: Password-Based 
Protocols Secure Against Dictionary Attacks". Proceedings of the 1992 IEEE 
Symposium on Research in Security and Privacy, Oakland, CA.

RFC4120.  The Kerberos Network Authentication Service (V5), IETF Standards 
Track, July 2005.

OASIS Identity Metasystem Interoperability Version 1.0, Oasis Standard, July 
2009.   URL: 
http://docs.oasis-open.org/imi/identity/v1.0/os/identity-1.0-spec-os.html#_Toc229451842

RFC5755  An Internet Attribute Certificate Profile for Authorization, IETF 
Standards Track, January 2010. 

RFC3280 Internet X.509 Public Key Infrastructure Certificate and Certificate 
Revocation List (CRL) Profile, IETF Standards Track, April 2002.

RFC2289.  A One-Time Password System. IETF Standards Track, February 1998.







_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to