My intent wasn’t to suggest that tokens *must* be origin constrained, just to 
point out if you are using TLS-based sender constrained tokens then you may 
also want to consider that aspect. 

In some cases you may be comfortable that protections against in-browser token 
theft are adequate without any sender/origin constraint. Sometimes a plain old 
bearer token is fine. 

— Neil

> On 29 Nov 2018, at 01:22, Richard Backman, Annabelle <richa...@amazon.com> 
> wrote:
> 
> In some cases, the resource server will need to support CORS in order to 
> support SPA clients that are on different origins. In this case, the resource 
> server must optimistically allow the CORS request to be made, then validate 
> that the request origin is appropriate for the access token provided in the 
> request. To my knowledge, I haven't seen "origin-constrained access tokens" 
> raised as a requirement anywhere, but here we are.
> 
> -- 
> Annabelle Richard Backman
> AWS Identity
> 
> 
> On 11/26/18, 2:34 AM, "OAuth on behalf of Neil Madden" 
> <oauth-boun...@ietf.org on behalf of neil.mad...@forgerock.com> wrote:
> 
>    I would perhaps clarify this a little, as it’s not really CORS that is 
> doing the work here, but rather the same-origin policy (SOP) — which is 
> actually *relaxed* by CORS. 
> 
>    It is the fact that there is a non-safe header (Authorization) on the 
> request that triggers the SOP protections - and it would do so even in an old 
> pre-CORS browser. Otherwise CORS wouldn’t even be involved as the request 
> would be considered “safe”. For instance, if your (RS) API just requires an 
> x-www-form-urlencoded POST body with the access token as one of the fields 
> then I can always just create a form in a hidden iframe and submit it 
> cross-origin with no problems, CORS or not. Adding the Authorization header 
> prevents that - you can’t add a custom header to a form submission, and Ajax 
> would not be allowed to make that request.
> 
>    What CORS changes is that things that would previously be blocked outright 
> now produce a CORS preflight to allow the destination origin to override the 
> SOP and allow a request to go ahead anyway.
> 
>    — Neil
> 
>> On 26 Nov 2018, at 08:46, Daniel Fett <danielf+oa...@yes.com> wrote:
>> 
>> Yes. Token Binding enforces that only the right browser can send the token; 
>> in this browser, CORS enforces that only the correct origin can send the 
>> token.
>> 
>>> Am 25.11.18 um 19:46 schrieb Torsten Lodderstedt:
>>> Does this mean the RS effectively relies on the user agent to enforce the 
>>> sender constraint (via CORS policy)?
>>> 
>>> 
>>>> Am 23.11.2018 um 14:54 schrieb Neil Madden <neil.mad...@forgerock.com>
>>>> :
>>>> 
>>>> Thanks for doing this Daniel, I think the proposed text is good.
>>>> 
>>>> — Neil
>>>> 
>>>> 
>>>>> On 22 Nov 2018, at 14:42, Daniel Fett <danielf+oa...@yes.com>
>>>>> wrote:
>>>>> 
>>>>> Hi all,
>>>>> 
>>>>> I would like to discuss a text proposal for the security BCP.
>>>>> 
>>>>> Background:
>>>>> 
>>>>> Yesterday, Neil pointed out the following problem with binding access 
>>>>> tokens using mTLS or token binding in SPAs:
>>>>> 
>>>>> "I am talking about scripts from places like ad servers that are usually 
>>>>> included via an iframe to enforce the SOP and sandbox them from other 
>>>>> scripts. If they get access to an access token - e.g. via 
>>>>> document.referrer or a redirect or some other leak, then they still act 
>>>>> within the same TLS context as the legitimate client."
>>>>> 
>>>>> The problem is that a browser's TLS stack will attach the proof of 
>>>>> possession no matter which origin started a request.
>>>>> 
>>>>> (This seems like a real downside of token binding - why does it not have 
>>>>> the "same site" option that cookies nowadays have?)
>>>>> 
>>>>> I prepared the following addition to the security BCP and would like to 
>>>>> hear your opinions:
>>>>> 
>>>>> "It is important to note that constraining the sender of a token to a web 
>>>>> browser (using a TLS-based method) does not constrain the origin of the 
>>>>> script that uses the token (lack of origin binding). In other words, if 
>>>>> access tokens are used in a browser (as in a single-page application, 
>>>>> SPA) and the access tokens are sender-constrained using a TLS-based 
>>>>> method, it must be ensured that origins other than the origin of the SPA 
>>>>> cannot misuse the TLS-based sender authentication.
>>>>> 
>>>>> The problem can be illustrated using an SPA on origin A that uses an 
>>>>> access token AT that is bound to the TLS connection between the browser 
>>>>> and the resource server R. If AT leaks to an attacker E, and there is, 
>>>>> for example, an iframe from E's origin loaded in the web browser, that 
>>>>> iframe can send a request to origin R using the access token AT. This 
>>>>> request will contain the proof-of-posession of the (mTLS or token 
>>>>> binding) key. The resource server R therefore cannot distinguish if a 
>>>>> request containing a valid access token originates from origin A or 
>>>>> origin E.
>>>>> 
>>>>> If the resource server only accepts the access token in an Authorization 
>>>>> header, then Cross-Origin Resource Sharing (CORS) will protect against 
>>>>> this attack by default. If the resource server accepts the access tokens 
>>>>> in other ways (e.g., as a URL parameter), or if the CORS policy of the 
>>>>> resource server permits requests by origin E, then the TLS-based token 
>>>>> binding only provides protection if the browser is offline."
>>>>> 
>>>>> 
>>>>> The "summary" above this text reads as follows:
>>>>> 
>>>>> "If access tokens are sender-constrained to a web browser, the resource 
>>>>> server MUST ensure that the access token can only be used by the origin 
>>>>> to which the access token was issued (origin binding). One solution for 
>>>>> the resource server to accomplish this is to only accept the access token 
>>>>> in an Authorization header (as described in RFC 6750) and to ensure that 
>>>>> the active CORS policy prevents third parties from sending Authorization 
>>>>> headers. See <xref target="pop_tokens"/> for details."
>>>>> 
>>>>> What do you think?
>>>>> 
>>>>> -Daniel
>>>>> 
>>>>> _______________________________________________
>>>>> 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
>> 
>> 
> 
>    _______________________________________________
>    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