Technically it could be optional, but it means that a CSRF attempt will only be 
detected by the AS not by the client. If we consider the possibility of a 
malicious AS, then this could allow Login CSRF attacks against the client. The 
client would also have to be sure that the AS actually implements PKCE. So I 
think it’s safer to leave the recommendation as-is. 

> On 23 Jul 2019, at 08:28, Dominick Baier <dba...@leastprivilege.com> wrote:
> 
> Forgot one more thing
> 
> In 7.1
> 
> Browser-based apps MUST use the OAuth 2.0 "state" parameter to
>    protect themselves against Cross-Site Request Forgery and
>    authorization code swap attacks and MUST use a unique value for each
>    authorization request, and MUST verify the returned state in the
>    authorization response matches the original state the app created.
> 
> Isn’t state optional when PKCE is used?
> 
> thanks
> ———
> Dominick
> 
>> On 22. July 2019 at 08:14:33, Dominick Baier (dba...@leastprivilege.com) 
>> wrote:
>> 
>> Hey, 
>> 
>> Just read the spec - good to see the progress. Some feedback:
>> 
>> I am yet undecided if I like the categorisation of the “Application 
>> Architecture Patterns”. I definitely want to distinguish between 
>> applications only accessing same-site back-end services and “others”. Not 
>> sure if “dynamic application server" and “static application server” should 
>> be handled differently - they are deployment details and should not decide 
>> on the application security architecture. Also not sure how realistic it is 
>> to deploy a typical applications solely from e.g. a CDN. But I don’t have 
>> the right answer wrt to categories right now.
>> 
>> 6.1.  Apps Served from a Common Domain as the Resource Server
>> 
>> > OAuth and OpenID Connect provide very little benefit in this
>>    deployment scenario, so it is recommended to reconsider whether you
>>    need OAuth or OpenID Connect at all in this case.
>> 
>> I think you are mixing authentication and API access here. Depending on 
>> application scenario it makes a lot of sense to use OIDC - but rely on the 
>> resulting session to control API access. 
>> Unless you want to dive into the details here, I suggest you remove the 
>> mention of OIDC because it is misleading.
>> 
>> 
>> 6.2.  Apps Served from a Dynamic Application Server
>> 
>> I have a .NET sample for that 
>> 
>> https://github.com/leastprivilege/AspNetCoreSecuritySamples/tree/aspnetcore21/BFF
>> And a blog post
>> https://leastprivilege.com/2019/01/18/an-alternative-way-to-secure-spas-with-asp-net-core-openid-connect-oauth-2-0-and-proxykit/
>> 
>> 9.7. Content-Security Policy
>>    A browser-based application that wishes to use either long-lived
>>    refresh tokens or privileged scopes SHOULD restrict its JavaScript
>>    execution to a set of statically hosted scripts via a Content
>>    Security Policy ([CSP2]) or similar mechanism.
>> 
>> 
>> I would rather say that ANY JS app should use CSP to lock down the browser 
>> features to a minimal attack surface. In addition, if refresh or access 
>> tokens are involved - further settings like disabling inline scripting 
>> (unsafe inline) and eval should be disabled.
>> 
>> Thanks for doing this work!
>> 
>> ———
>> Dominick
> _______________________________________________
> 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