Oauth 2.0 在PKCE增强授权代码流中保护代码验证程序的最佳实践

Oauth 2.0 在PKCE增强授权代码流中保护代码验证程序的最佳实践,oauth-2.0,authorization,openid-connect,auth0,pkce,Oauth 2.0,Authorization,Openid Connect,Auth0,Pkce,由于PKCE现在是针对隐式流的推荐授权方法,因此我正在寻找处理代码验证程序的最佳实践以及如何实现这一点的建议。高级PKCE授权流程包括: 在客户端生成code\u验证器 从(1)生成code\u挑战 用code\u质询点击/authorize,该质询重定向到选择idp,在回调中有一个code 使用(3)中的code和code\u验证器交换访问令牌 问题是,在步骤3中,在应用程序重定向到授权服务器和idp之前,必须将code\u验证器存储在某个地方那在哪里? 类似于okta oidc js这样的库

由于PKCE现在是针对隐式流的推荐授权方法,因此我正在寻找处理代码验证程序的最佳实践以及如何实现这一点的建议。高级PKCE授权流程包括:

  • 在客户端生成
    code\u验证器
  • 从(1)生成
    code\u挑战
  • code\u质询
    点击
    /authorize
    ,该质询重定向到选择idp,在回调中有一个
    code
  • 使用(3)中的
    code
    code\u验证器
    交换访问令牌
  • 问题是,在步骤3中,在应用程序重定向到授权服务器和idp之前,必须将
    code\u验证器
    存储在某个地方那在哪里?


    类似于
    okta oidc js
    这样的库将
    code\u验证器
    存储在会话存储中。这不会让你面临XSS攻击吗?i、 e.如果在应用程序进入授权流并重定向之前,我将
    代码验证程序
    存储在会话存储中,那么在回调时,是什么阻止某些rouge扩展从url读取
    代码
    ,从会话存储读取
    代码验证程序
    ?它们的组合可用于交换访问令牌。

    您描述的是标准的SPA操作方式-它可能被恶意代码滥用,但授权代码只能使用一次,并且验证器不会存储很长时间,这一事实提供了一些保护

    一个相关的XSS攻击是在一个隐藏的iframe上运行一个完整的OAuth授权重定向+代码交换-无论涉及后端还是客户端机密,都没有针对该攻击的保护

    如果您想严格要求安全性,那么新出现的趋势更多地是一种后端对前端的方法,其中后端是一个在服务器上运行的“代理API”

    • OAuth授权的结果是API发布的同一站点cookie,以防止上述iframe攻击

    • 然后,SPA可以使用auth cookie获取访问令牌,也可以通过代理API获取双跳API请求

    最近有一段关于SPA安全的视频,深入讨论了这些威胁。浏览器很难实现安全性,重定向也有风险

    但是,仍然建议将Web和API问题分开-例如,上述代理API不应妨碍希望通过内容交付网络部署其SPA的公司

    登录舞蹈

    在我看来,首选方法总结如下,以实现完全控制,并且最近的浏览器更改不会出现任何问题:

    • SPA调用一个URL,例如,它为.mywebdomain.com编写一个仅HTTP加密的cookie,其中包含状态和代码验证程序,并返回授权请求URL

    • SPA然后自行重定向,并在需要时提前将页面位置/状态保存到会话存储

    • SPA然后接收带有代码和状态的响应URL,然后将它们发布到URL,如。之后,SPA可以恢复其页面位置和状态,因此可用性良好

    • API通过对照状态cookie中的状态验证状态,然后使用状态cookie中的代码验证程序来完成登录。所有这些的结果是编写一个身份验证cookie(包含刷新令牌),该cookie不能在iframe上被滥用


    因此,建议在服务器端生成代码验证程序,并将其存储为同一站点cookie(lax),并在客户端完成重定向后让服务器执行令牌交换的代码…?此外,为什么建议网站(spa或其他)PKCE使用oauth流?当客户端负责创建和使用代码验证器时,规范没有提到或建议在何处存储代码验证器。视频非常有用,只是为了完成—PKCE很好,因为它是OAuth 2.1推荐的。它可以在服务器端生成并存储在状态cookie中,然后在以后使用。我在上面添加了我当前对流程应该如何工作的想法。我认为在解决这个安全问题时,不要失去SPA体系结构的优点是很重要的。