I also drafted a more generalized mechanism (that was much less WS-*-y) for 
doing an arbitrary token swap:

https://tools.ietf.org/html/draft-richer-oauth-chain-00 
<https://tools.ietf.org/html/draft-richer-oauth-chain-00>

Phil had pretty much the same idea separately.

Personally, I still think that the token-exchange draft needs to use a 
syntactical mechanism like this instead of something so strictly tied to the 
assertion formats.

 — Justin

> On Mar 17, 2015, at 8:28 PM, John Bradley <ve7...@ve7jtb.com> wrote:
> 
> Security Token Service (STS)   Sorry it is WS-* speak 
> http://en.wikipedia.org/wiki/Security_token_service 
> <http://en.wikipedia.org/wiki/Security_token_service>
> 
> You can emulate some of it with the assertions extension.
> 
> The WG has a document as a starting position for a more general approach.
> https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-01 
> <https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-01>
> 
> 
> Brian Campbell and I also documented our take on it for discussion.
> https://tools.ietf.org/html/draft-campbell-oauth-sts-01 
> <https://tools.ietf.org/html/draft-campbell-oauth-sts-01>
> 
> At the moment they don't really take into account issuing PoP tokens in 
> exchange but I expect that would be added as a WG document progresses.
> 
> It is on the WG to do list.
> 
> John B.
> 
>> On Mar 17, 2015, at 8:01 PM, Bill Mills <wmills_92...@yahoo.com 
>> <mailto:wmills_92...@yahoo.com>> wrote:
>> 
>> STS?
>> 
>> 
>> 
>> On Tuesday, March 17, 2015 2:40 PM, John Bradley <ve7...@ve7jtb.com 
>> <mailto:ve7...@ve7jtb.com>> wrote:
>> 
>> 
>> This is fun:)
>> 
>> I might ask what part of a OAuth 1.0a token is the user credential.   That 
>> is a slippery idea in itself.  The token is a reference to some notion of 
>> identity (in some cases) that needs to be dereferenced anyway.
>> 
>> So in the same way a POP JWT access token in OAuth 2 that may indeed contain 
>> claims about the subject would need to be exchanged at a AS for a new token 
>> containing claims about the subject and the new presenter, or depending on 
>> the security model it could be included directly in a new self signed AT.
>> 
>> From a enterprise policy point of view having a REST like STS functionality 
>> is I think the right long term answer.
>> 
>> John B.
>> 
>> 
>> 
>>> On Mar 17, 2015, at 6:32 PM, Bill Mills <wmills_92...@yahoo.com 
>>> <mailto:wmills_92...@yahoo.com>> wrote:
>>> 
>>> In practice one of the drawbacks of the Oauth 1.0a tokens was that they 
>>> were not proxyable and so a connection to the edge then means you have to 
>>> unwrap that and make a new internal token to be usedwhich isn't as good as 
>>> the actual user credential.
>>> 
>>> 
>>> 
>>> On Tuesday, March 17, 2015 2:26 PM, John Bradley <ve7...@ve7jtb.com 
>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>> 
>>> 
>>> PoP tokens need to be presented with a proof the presenter knows the 
>>> secret.  That is the same principal as in OAuth 1.0a with needing to show 
>>> knowledge of the "token secret".
>>> 
>>> I don't know what you mean by proxies internally.   If the RS needs another 
>>> token to access a resource it should use the assertion flow and 
>>> authenticate itself to get another token based on the access token.
>>> Passing around a PoP token as a bearer token is insecure/bad.
>>> 
>>> In OAuth 1.0a because of the tight relationship between the "Service 
>>> Provider" and the "Protected Resource" people would be less likely to try 
>>> it but because the protected resource knows the "token secret" it could 
>>> still do lots of unexpected bad things.
>>> 
>>> Proxying access tokens is not something RS should do, they need to be 
>>> exchanged at a AS for a new AT with the correct rights and optionally 
>>> binding it to a new PoP key.
>>> 
>>> John B.
>>> 
>>> 
>>> 
>>> On Mar 17, 2015, at 6:14 PM, Bill Mills <wmills_92...@yahoo.com 
>>> <mailto:wmills_92...@yahoo.com>> wrote:
>>>> 
>>>> Yes.  There's still the open question of whether/how PoP tokens can be 
>>>> proxied internally within a site though.  If they can be proxied then it 
>>>> goes back to unsolved.
>>>> 
>>>> 
>>>> 
>>>> On Tuesday, March 17, 2015 2:12 PM, John Bradley <ve7...@ve7jtb.com 
>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>> 
>>>> 
>>>> Or by OAuth 2 PoP.
>>>> 
>>>> 
>>>>> On Mar 17, 2015, at 6:00 PM, Bill Mills <wmills_92...@yahoo.com 
>>>>> <mailto:wmills_92...@yahoo.com>> wrote:
>>>>> 
>>>>> "Yes but it is custom.  People are inventing structured scopes like 
>>>>> "aud:https://foo.com <http://foo.com/>", and that potentially doesn't 
>>>>> solve the security issue if a client just passes on the scopes it 
>>>>> receives in the error response, the bad RS just adds a scope for the good 
>>>>> RS."
>>>>> 
>>>>> This isn't solved by "aud", it is solved by OAuth 1.0a though....
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Tuesday, March 17, 2015 1:54 PM, John Bradley <ve7...@ve7jtb.com 
>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>> 
>>>>> 
>>>>> Yes but it is custom.  People are inventing structured scopes like 
>>>>> "aud:https://foo.com <http://foo.com/>", and that potentially doesn't 
>>>>> solve the security issue if a client just passes on the scopes it 
>>>>> receives in the error response, the bad RS just adds a scope for the good 
>>>>> RS.
>>>>> 
>>>>> The client then potentially needs to understand the custom structures 
>>>>> scopes of every AS it might deal with.
>>>>> 
>>>>> I think that would lead to lots of problems trying to make that a pattern 
>>>>> long term.   At teh moment yes you can do it with a scope as long as the 
>>>>> client and AS both understand what is going on.
>>>>> 
>>>>> 
>>>>> We added "aud" as a separate parameter for PoP as the token format for 
>>>>> different RS might be different as well as the symmetric  pop keys 
>>>>> needing to be encrypted with different keys.
>>>>> Yes we could have invented a special scope to carry the audience but a 
>>>>> separate parameter was much cleaner.
>>>>> 
>>>>> I know some people have started using "aud" as a way to communicate the 
>>>>> resource when a scope applies to multiple RS but they may take different 
>>>>> token formats JWT vs opaque etc.
>>>>> 
>>>>> Brian commented that the "aud" parameter may be useful beyond PoP so we 
>>>>> might want to think about documenting it in it's own mini spec, if I 
>>>>> understood him correctly.
>>>>> 
>>>>> I think that may not be a bad idea as we are also planning on using it in 
>>>>> NAPPS.
>>>>> 
>>>>> John B.
>>>>> 
>>>>>> On Mar 17, 2015, at 5:39 PM, Bill Mills <wmills_92...@yahoo.com 
>>>>>> <mailto:wmills_92...@yahoo.com>> wrote:
>>>>>> 
>>>>>> I don't think it's "overloading scope names" to use them that way.  The 
>>>>>> aud value(s) could as easily be carried in scope as anywhere.  Nothing 
>>>>>> says a scope can't be "https://foo.com <https://foo.com/>", and that 
>>>>>> Foo.com <http://foo.com/> requires that scope to be present for a token 
>>>>>> to be accepted.  I would not make it foo.com <http://foo.com/>-read-mail 
>>>>>> for example.
>>>>>> 
>>>>>> If it's more convenient to put it in aud I can accept that, but it's the 
>>>>>> same functionality and can be implemented in scopes now.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Tuesday, March 17, 2015 12:41 PM, John Bradley <ve7...@ve7jtb.com 
>>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>>> 
>>>>>> 
>>>>>> People have been overloading scope names to create implicit audience.
>>>>>> 
>>>>>> The problem is that clients need to know via some magic method that you 
>>>>>> need to ask for scope "purple" to get write access to RS 2.
>>>>>> 
>>>>>> Having an explicit "aud" parameter gives clients a way to communicate to 
>>>>>> the AS what RS they are asking for a token for.
>>>>>> 
>>>>>> the security issue is that if a client discovers a API out via some out 
>>>>>> of band mechanism the OAuth error code can tell the client go to AS X 
>>>>>> and ask for Scope Y.
>>>>>> 
>>>>>> Unfortunately without POP tokens or at-least passing the URI of the RS 
>>>>>> to the AS via "aud", a bad RS could get a legitimate client to give it a 
>>>>>> token that can be replayed at a legitimate RS.
>>>>>> 
>>>>>> This was one of the issues that Eran Hammer-Lahav was particularly 
>>>>>> concerned about.
>>>>>> 
>>>>>> I think I proposed a "aud" parameter to the token endpoint back then as 
>>>>>> a alternative to requiring HMAC tokens, but that got lost in the 
>>>>>> confusion at the time.
>>>>>> 
>>>>>> At that time though people were not yet thinking about interoperable 
>>>>>> OAuth API,  only relatively tightly bound clients that were 
>>>>>> preconfigured for the API endpoints they were using.
>>>>>> 
>>>>>> In Health and other places we are starting to see standard clients that 
>>>>>> discover API endpoints and configure themselves based on a users 
>>>>>> Identity to use a arbitrary OAuth AS, moving into federation of AT.
>>>>>> 
>>>>>> That is one of the reasons POP will be important, as it prevents RS from 
>>>>>> misusing federated tokens by presenting them at other RS.
>>>>>> 
>>>>>> The simplest thing to do is have the client say what RS it is trying to 
>>>>>> access explicitly (The "aud" parameter), and including an audience in 
>>>>>> the AT.  to protect against malicious RS.
>>>>>> 
>>>>>> PoP is the step up that also protects against tokens being intercepted 
>>>>>> and replayed by another client.
>>>>>> 
>>>>>> John B.
>>>>>> 
>>>>>>> On Mar 17, 2015, at 4:10 PM, Bill Mills <wmills_92...@yahoo.com 
>>>>>>> <mailto:wmills_92...@yahoo.com>> wrote:
>>>>>>> 
>>>>>>> This may have been hashed out already and I missed it, but "aud" just 
>>>>>>> becomes another kind of scope, correct?
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Tuesday, March 17, 2015 8:50 AM, John Bradley <ve7...@ve7jtb.com 
>>>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> You could do that, but it is probably safer for the AS to know what RS 
>>>>>>> it can issue tokens for and refuse to issue a token for RS A to a 
>>>>>>> client asking for a token with RS X as the aud.
>>>>>>> 
>>>>>>> John B.
>>>>>>>> On Mar 16, 2015, at 8:27 PM, Dixie Baker 
>>>>>>>> <dixie.ba...@martin-blanck.com <mailto:dixie.ba...@martin-blanck.com>> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>> 
>>>>>>> The threat that RFC6819 4.6.4 describes is when a client obtains an AT 
>>>>>>> and then sends it to a counterfeit RS, which then uses the AT to access 
>>>>>>> resources from a legitimate RS, on the end-user's behalf.
>>>>>>> 
>>>>>>> The suggested countermeasure is a bit difficult to interpret:  
>>>>>>> "Associate the endpoint URL of the resource server the client talked to 
>>>>>>> with the access token (e.g., in an audience field) and validate the 
>>>>>>> association at a legitimate resource server.  The endpoint URL 
>>>>>>> validation policy may be strict (exact match) or more relaxed (e.g., 
>>>>>>> same host).  This would require telling the authorization server about 
>>>>>>> the resource server endpoint URL in the authorization process."
>>>>>>> 
>>>>>>> As I read this, the suggestion is to have the client pass the URL of 
>>>>>>> the bad RS in the request to the AS (using the audience field).  The AS 
>>>>>>> then would include that RS URL in the AT.  Then, when the client passes 
>>>>>>> the AT to the bad RS, and it passes it on to the good RS, the good RS 
>>>>>>> will check the audience field, compare that URL with its own, and 
>>>>>>> refuse the request.
>>>>>>> 
>>>>>>> -Dixie
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Dixie B. Baker, Ph.D.
>>>>>>> Senior Partner
>>>>>>> Martin, Blanck and Associates
>>>>>>> Office (Redondo Beach, CA):  310-791-9671
>>>>>>> Mobile:  310-279-2579
>>>>>>> 
>>>>>>> On Mar 16, 2015, at 11:39 AM, John Bradley <ve7...@ve7jtb.com 
>>>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> Brian and I were talking about "aud" used as a parameter to the token 
>>>>>>> endpoint when using a code or refresh token to indicate what RS the 
>>>>>>> resulting AT will be used at.
>>>>>>> 
>>>>>>> Sending a audience in the AT wouldn't help prevent the attack being 
>>>>>>> discussed,  though it may stop other sorts of attacks if the RS can 
>>>>>>> tell if a AT was issued for it or another RS.
>>>>>>> 
>>>>>>> In PoP having the AS check that you are sending the AT to the correct 
>>>>>>> RS is less important as the AT if stolen can't be used to replay 
>>>>>>> against the real AS.
>>>>>>> 
>>>>>>> Though depending on the app the bogus RS feeding the app the wrong info 
>>>>>>> may well be a problem as well.
>>>>>>> 
>>>>>>> John B.
>>>>>>> 
>>>>>>>> On Mar 16, 2015, at 2:40 PM, Torsten Lodderstedt 
>>>>>>>> <tors...@lodderstedt.net <mailto:tors...@lodderstedt.net>> wrote:
>>>>>>>> 
>>>>>>> 
>>>>>>> I don't think putting an aud into an AT will help to prevent 
>>>>>>> counterfeit RSs (as long as the aud is nit directly derived from the 
>>>>>>> original URL used by the client to invoke the counterfeit RS. as long 
>>>>>>> as the aud is a symbolic name of any kind, the counterfeit RS will 
>>>>>>> accept ATs for the legitimate RS and just (ab)use it.
>>>>>>> 
>>>>>>> POP on the contrary helps since the counterfeit RS, in order to send a 
>>>>>>> message to the legitimate RS, needs to produce a new digitally signed 
>>>>>>> message using the correct secret, which it doesn't know.
>>>>>>> 
>>>>>>> kind regards,
>>>>>>> Torsten.
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Am 16.03.2015 um 17:40 schrieb Dixie Baker 
>>>>>>> <dixie.ba...@martin-blanck.com <mailto:dixie.ba...@martin-blanck.com>>:
>>>>>>> 
>>>>>>> 
>>>>>>> Using the "aud" parameter makes sense to me.  Good suggestion.
>>>>>>> 
>>>>>>> Authenticating the client to the RS would not address the counterfeit 
>>>>>>> RS threat.
>>>>>>> 
>>>>>>> -Dixie
>>>>>>> 
>>>>>>> 
>>>>>>> Dixie B. Baker, Ph.D.
>>>>>>> Senior Partner
>>>>>>> Martin, Blanck and Associates
>>>>>>> Office (Redondo Beach, CA):  310-791-9671
>>>>>>> Mobile:  310-279-2579
>>>>>>> 
>>>>>>> On Mar 16, 2015, at 6:43 AM, Brian Campbell <bcampb...@pingidentity.com 
>>>>>>> <mailto:bcampb...@pingidentity.com>> wrote:
>>>>>>> 
>>>>>>>> We've used "aud" (optionally) with OAuth 2 and bearer tokens to help 
>>>>>>>> identify the RS to whom the AT should be issued. It is useful but it's 
>>>>>>>> mostly about getting format/content/etc of the AT correct for the RS 
>>>>>>>> rather than it is about preventing possible AT leaks.
>>>>>>>> 
>>>>>>>> I do think an "aud(iance)" parameter at both token and authorization 
>>>>>>>> endpoints would have utility beyond the POP work. So defining it 
>>>>>>>> independently might make sense.
>>>>>>>> 
>>>>>>>> On Sun, Mar 15, 2015 at 11:34 AM, John Bradley <ve7...@ve7jtb.com 
>>>>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>>>>> In POP key distribution we do introduce a "audiance" parameter to the 
>>>>>>>> token_endpoint. 
>>>>>>>> https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-01#section-3.1
>>>>>>>>  
>>>>>>>> <https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-01#section-3.1>
>>>>>>>> 
>>>>>>>> It would be possible to have a small spec to define using "aud" with 
>>>>>>>> bearer tokens, however that would be undefined behaviour at this point.
>>>>>>>> 
>>>>>>>> I don't know of any clients that would try to access a RS server and 
>>>>>>>> then besed on the error response try and get a access token from the 
>>>>>>>> AS specified in the error.
>>>>>>>> 
>>>>>>>> In POP we are trying to both protect agains that attack and more 
>>>>>>>> common ones like doing a MiM to intercept the AT or the RS being 
>>>>>>>> hacked and leaking the token.
>>>>>>>> 
>>>>>>>> Using "aud" with bearer tokens would be useful, but probably won't 
>>>>>>>> stop the majority of possible AT leaks.
>>>>>>>> 
>>>>>>>> John B.
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Mar 15, 2015, at 2:18 PM, Torsten Lodderstedt 
>>>>>>>>> <tors...@lodderstedt.net <mailto:tors...@lodderstedt.net>> wrote:
>>>>>>>>> 
>>>>>>>>> Hi Josh,
>>>>>>>>> 
>>>>>>>>> I'm not aware of a common practice to use such a parameter. The WG is 
>>>>>>>>> instead heading towards authenticated requests to the resource server 
>>>>>>>>> (see https://tools.ietf.org/html/rfc6819#section-5.4.2 
>>>>>>>>> <https://tools.ietf.org/html/rfc6819#section-5.4.2>).
>>>>>>>>> 
>>>>>>>>> Please take a look onto 
>>>>>>>>> http://tools.ietf.org/html/draft-ietf-oauth-pop-architecture 
>>>>>>>>> <http://tools.ietf.org/html/draft-ietf-oauth-pop-architecture> and 
>>>>>>>>> further drafts on this topic.
>>>>>>>>> 
>>>>>>>>> kind regards,
>>>>>>>>> Torsten.
>>>>>>>>> 
>>>>>>>>> Am 03.03.2015 um 18:27 schrieb Josh Mandel:
>>>>>>>>>> Hi All,
>>>>>>>>>> 
>>>>>>>>>> In section 4.6.4 ("Threat: Access Token Phishing by Counterfeit 
>>>>>>>>>> Resource Server"), RFC6819 describes a threat where a counterfeit 
>>>>>>>>>> resource server tricks a client into obtaining and sharing an access 
>>>>>>>>>> token from a legitimate authorization server. One of the proposed 
>>>>>>>>>> mitigations involves: "telling the authorization server about the 
>>>>>>>>>> resource server endpoint URL in the authorization process."
>>>>>>>>>> 
>>>>>>>>>> In other words, this mitigation would ask the client to pass an 
>>>>>>>>>> additional parameter when redirecting to the Authorization server's 
>>>>>>>>>> "authorize" URL, effectively something like:
>>>>>>>>>> 
>>>>>>>>>> https://auth-server/authorize <https://auth-server/authorize>?
>>>>>>>>>> response_type=code&
>>>>>>>>>> client_id=123&
>>>>>>>>>> state=456&
>>>>>>>>>> scope=read-all&
>>>>>>>>>> redirect_uri=https://app-server/after-auth&; 
>>>>>>>>>> <https://app-server/after-auth&;>
>>>>>>>>>> resource_server_that_told_me_to_authorize_here=https://attacker.com 
>>>>>>>>>> <https://attacker.com/>
>>>>>>>>>> 
>>>>>>>>>> (And if the authorization server saw a value it didn't like in the 
>>>>>>>>>> final parameter, it would reject the request.)
>>>>>>>>>> 
>>>>>>>>>> This is obviously not appropriate in every authorization scenario, 
>>>>>>>>>> but it is useful anytime there's a discovery process by which apps 
>>>>>>>>>> learn about authorization servers from resource servers. Since it's 
>>>>>>>>>> something of a common need, I wanted to see if there was any common 
>>>>>>>>>> practice in how to name this parameter, or whether it's worth 
>>>>>>>>>> registering a standard extension at 
>>>>>>>>>> http://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml
>>>>>>>>>>  
>>>>>>>>>> <http://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml>
>>>>>>>>>>  . (I don't see one there now -- possibly I'm just missing it.)
>>>>>>>>>> 
>>>>>>>>>> If so, what should it be called? The name I used in the example 
>>>>>>>>>> above is a bit verbose :-)
>>>>>>>>>> 
>>>>>>>>>> Best,
>>>>>>>>>> 
>>>>>>>>>>   Josh
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> _______________________________________________
>>>>>>>>>> OAuth mailing list
>>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth 
>>>>>>>>>> <https://www.ietf.org/mailman/listinfo/oauth>
>>>>>>>>> 
>>>>>>>>> _______________________________________________
>>>>>>>>> OAuth mailing list
>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth 
>>>>>>>>> <https://www.ietf.org/mailman/listinfo/oauth>
>>>>>>>> 
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> OAuth mailing list
>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth 
>>>>>>>> <https://www.ietf.org/mailman/listinfo/oauth>
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> OAuth mailing list
>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>> https://www.ietf.org/mailman/listinfo/oauth 
>>>>>>> <https://www.ietf.org/mailman/listinfo/oauth>
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to