Hi Bill,

I agree with Brian that an AS to AS token exchange is beyond the scope of
this document.
I suggest that you send a separate email to start a discussion on this
topic and see if there is interest in the WG to take this topic as a new
work.

Regards,
 Rifaat (as co-chair and document shepherd)

On Fri, Dec 8, 2017 at 12:41 PM, Brian Campbell <bcampb...@pingidentity.com>
wrote:

> I guess I'm going to kind of restate some of what I said in that earlier
> thread
> <https://mailarchive.ietf.org/arch/msg/oauth/zeOPZLfocZwDo8JKqySoO00eeyM/?qid=832d65bfaf96dac039424169afa171af>
> and a bit more. The access and refresh token URIs from the draft are
> intended to indicate that such tokens are issued by the given authorization
> server acting as the STS (perhaps this could be stated more clearly in the
> doc). As such, there isn't direct explicit support for OAuth access token
> to OAuth access token cross-domain type exchanges. That was intentional and
> I think is appropriate as I don't believe this draft should delve into
> pseudo federating access tokens and all the additional complexity and
> security implications that entails. The assertion based authorization
> grants (RFCs 7523 <https://tools.ietf.org/html/rfc7523> & 7522
> <https://tools.ietf.org/html/rfc7522>) are intended to facilitate
> acquiring an access token from an external or cross-domain AS and I prefer
> that more explicit model for cross-domain than codifying a rather implicit
> way of doing it in token exchange. A Facebook access token, for example, is
> issued to a client for delegated access to Facebook APIs. It isn't for
> delegated access to some other domain's APIs but an access token for access
> token exchange effectively turns it into that. And in some situations that
> can have problematic security implications. Big providers like Facebook
> have a lot of apps (OAuth clients) that can get access tokens. An
> organization might well be okay with an app it controls exchanging a
> Facebook access token for an access token for its own APIs. But a 3rd party
> Facebook app (like maybe a new viral rate my '80's hairdo app) doing the
> same thing could be very problematic. It's not exactly the same thing but
> many of the same potential issues arise as when using OAuth for User
> Authentication <https://oauth.net/articles/authentication/>.
> Standardization around access token for access token exchange would, at a
> minimum, need some real security analysis and recommendations/considerations.
>
>
> The token exchange draft went thought WGLC some time ago and is currently
> being written up by the document shepherd to send to the AD. It's close.
> It's been a long time coming and I'd really object to derailing it by
> making big additions to it at this late stage in the process.
>
> If explicit support for directly swapping an access token from one AS for
> an access token issued by a different AS is something this WG is interested
> in working on, while admittedly I have my hesitations, I propose/suggest
> that it be done in a new document. Such a document could but wouldn't
> necessarily have to take the from of the additional extension parameters
> you've mentioned. It could, for example, be a 'token profile' of sorts that
> defines a new URI with an associated format that is some simple structure
> that carries both the access token and issuer together. Something like
> "urn:ietf:params:oauth:token-type:wrapped_foreign_access_token" and
> {"issuer":"https://api.login.yahoo.com","token":"bwcK0esc3AC
> C3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"} - that's just spitballing but
> hopefully conveys the idea. The new document would also have to cover the
> security considerations.
>
>
>
>
> On Wed, Dec 6, 2017 at 2:31 PM, Bill Burke <bbu...@redhat.com> wrote:
>
>> The Keycloak project (oss idp), has implemented [1] the token exchange
>> draft (minus the actor token).  There's a couple of extensions we have
>> made to allow external token exchange to work.  I'd like to get some
>> consideration for these extensions to be added.  With proper
>> configurations, clients are able to exchange between different domains
>> and even social providers.  i.e. you can exchange a Facebook token for
>> a token issued by the IDP.
>>
>> Here are the details:
>>
>> We added a 'subject_issuer' parameter.  Many OAuth IDPs have opaque
>> access tokens and do not use JWTs for their access token (i.e.
>> Facebook and Google).  If the 'subject_token_type' is
>> 'urn:ietf:params:oauth:token-type:access_token' and the access token
>> comes from an external provider, then the client must also pass a
>> 'subject_issuer'.  The parameter value is something, anything that can
>> the IDP can resolve to an external provider.  How the validation of
>> this external token happens is implementation independent.
>>
>> As I stated a few months back in an earlier email thread, I do not
>> think the 'audience' parameter would work for this type of external
>> exchange.  It is just too overloaded.  Additionally, I think it is
>> cleaner to specify an additional parameter rather than extracting
>> issuer information from the 'subject_token_type'.  You could do this,
>> but the spec would also have to define a URI scheme for
>> 'subject_token_type' so that issuer information could be transmitted.
>>
>> We also added a 'requested_issuer' parameter.  This allows the client
>> to request an external provider to obtain a token from.  Same reasons
>> and rules as 'subject_token_type'.
>>
>> When 'requested_issuer' flow is done, user consent is often required
>> before the request issuer can issue a token for the user.  When this
>> is the case, a 400 response is returned with the following JSON
>> document:
>>
>> {
>>    "error" : "....",
>>    "error_description" : "..."
>>    "account-link-url" : "https://....";
>> }
>>
>> The error claim will be either token_expired or not_linked.  The
>> 'account-link-url' claim is a link that the client can forward an user
>> agent to to obtain consent.  The client simply appends a
>> 'redirect_uri' query parameter to this link and forwards the browser
>> for consent.  This 'redirect_uri' must be a registered and valid
>> redirect uri for the forwarding client.  After the redirect, the
>> client can then make an exchange request.  For error conditions, the
>> redirect_uri may by forwarded to with an additional 'error' query
>> parameter depending on whether the IDP deams it safe to do so.
>>
>>
>> Thanks,
>>
>> Bill
>>
>> [1] http://www.keycloak.org/docs/latest/securing_apps/index.html
>> #_token-exchange
>>
>> --
>> Bill Burke
>> Red Hat
>>
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org
>> https://www.ietf.org/mailman/listinfo/oauth
>>
>
>
> *CONFIDENTIALITY NOTICE: This email may contain confidential and
> privileged material for the sole use of the intended recipient(s). Any
> review, use, distribution or disclosure by others is strictly prohibited.
> If you have received this communication in error, please notify the sender
> immediately by e-mail and delete the message and any file attachments from
> your computer. Thank you.*
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
>
>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to