Thanks for the pointer Brian, that's helpful! (and yes I didn't dig through the framework spec:)

On 9/16/15 12:27 PM, Brian Campbell wrote:
Yeah, when a client wants to get an access token for itself, the client_credentials grant_type with client_assertion_type/client_assertion.

We attempted to call this out in the assertion framework (RFC 7521) in a discussion of "Common Scenarios <http://tools.ietf.org/html/rfc7521#section-6>" with the section "Client Acting on Behalf of Itself <http://tools.ietf.org/html/rfc7521#section-6.2>" but, despite good intentions, inheritance in specs is often overlooked.

    When a client is accessing resources on behalf of itself, it does so
    in a manner analogous to the Client Credentials Grant defined in
    Section 4.4 <http://tools.ietf.org/html/rfc7521#section-4.4>  of OAuth 2.0 
[RFC6749 <http://tools.ietf.org/html/rfc6749>].  This is a special case that
    combines both the authentication and authorization grant usage
    patterns.  In this case, the interactions with the authorization
    server should be treated as using an assertion for Client
    Authentication according toSection 4.2 
<http://tools.ietf.org/html/rfc7521#section-4.2>, while using the "grant_type"
    parameter with the value "client_credentials" to indicate that the
    client is requesting an access token using only its client
    credentials.

    The following example demonstrates an assertion being used for a
    client credentials access token request, as defined inSection 4.4.2 
<http://tools.ietf.org/html/rfc7521#section-4.4.2>
    of OAuth 2.0 [RFC6749 <http://tools.ietf.org/html/rfc6749>] (with extra 
line breaks for display purposes
    only):

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

      grant_type=client_credentials&
      client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
      %3Aclient-assertion-type%3Asaml2-bearer&
      client_assertion=PHNhbW...[omitted for brevity]...ZT

On Tue, Sep 15, 2015 at 2:41 PM, Justin Richer <[email protected] <mailto:[email protected]>> wrote:

    That’s how we’ve implemented it, but I’ve seen others pass the JWS
    for the token directly using the assertion grant type. Personally
    I find that a little confusing, since it’s still the client making
    the swap, but maybe there’s something useful there anyway. It
    honestly feels a bit too much like WS-*, and one can hope that
    we’ve learned from the mistakes of the past by now.

    I think the difference may be who makes the JWS. If the client is
    making the JWS and using it to swap for a new token, then that’s a
    case for using client credentials and authenticating using the
    JWS. If the JWS is coming from a third party and being handed to
    the client, and the client’s using that as-is to swap for a new
    token, then that’s a case of using the JWS as an assertion
    directly to the AS and getting a token there.

    But I agree that it’s confusing that there are two similar
    mechanisms here.

     — Justin

    On Sep 15, 2015, at 2:09 PM, George Fletcher <[email protected]
    <mailto:[email protected]>> wrote:

    Hi,

    I just want to verify my reading of RFC 7523[1] for the use case
    where a client wants to get an access token for itself to use as
    authorization for future API calls. This is effectively
    exchanging a JWS for a "short lived" access token.

    My understanding of section 2.2 of RFC 7523, is that the
    'client_assertion_type' and 'client_assertion' replace the
    default [OAuth2 (RFC 6749)] client authentication mechanism of
    client_id and client_secret.

    Therefore the correct way to implement this 2 legged flow is to
    use the OAuth2 (RFC 6749) client_credentials grant_type (Section
    4.4) with the JWT Bearer defined client_assertion_type and
    client_assertion.

    This would look something like (line breaks added for readability)

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

    grant_type=client_credentials&
    
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&
    client_assertion=<encoded JWS>&
    scope="myscopes"
    Is there a different industry standard for this use case? I'm
    checking as I find that multiple AS implementations do this
    differently:) Thanks, George
    [1] https://tools.ietf.org/html/rfc7523
    _______________________________________________
    OAuth mailing list
    [email protected] <mailto:[email protected]>
    https://www.ietf.org/mailman/listinfo/oauth


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



--
George Fletcher <http://connect.me/gffletch>
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to