Oauth 2.0 在PKCE增强授权代码流中保护代码验证程序的最佳实践
由于PKCE现在是针对隐式流的推荐授权方法,因此我正在寻找处理代码验证程序的最佳实践以及如何实现这一点的建议。高级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这样的库
code\u验证器
code\u挑战
code\u质询
点击/authorize
,该质询重定向到选择idp,在回调中有一个code
code
和code\u验证器
交换访问令牌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调用一个URL,例如,它为.mywebdomain.com编写一个仅HTTP加密的cookie,其中包含状态和代码验证程序,并返回授权请求URL
- SPA然后自行重定向,并在需要时提前将页面位置/状态保存到会话存储
- SPA然后接收带有代码和状态的响应URL,然后将它们发布到URL,如。之后,SPA可以恢复其页面位置和状态,因此可用性良好
- API通过对照状态cookie中的状态验证状态,然后使用状态cookie中的代码验证程序来完成登录。所有这些的结果是编写一个身份验证cookie(包含刷新令牌),该cookie不能在iframe上被滥用