我想知道当主要浏览器默认禁用 3rd 方 cookie 时,如何在 2019 年处理 Oauth2 隐式授权流程中的刷新令牌。
一些细节:
当前设置:
UI SPA 应用下
ui.example.com
身份提供者(CloudFoundry 的 UAA)下
uaa.api.example.com
设想:
当用户登录时,身份提供者使用域的用户详细信息设置 cookie,
uaa.api.example.com
并在重定向的标头中返回 JWTLocation
。JWT 存储在本地存储中(for
ui.example.com
),但它的有效期仅为 1h,所以我想刷新它。通过发送到 IDP 授权端点的查询参数可以刷新
prompt=none
(过程在Auth0 指南中有很好的描述(它不是 UAA,但流程是相同的)在每 20m 的隐藏 iframe 中创建 src 设置为
uaa.api.exmaple.com/oauth/authorize?prompt=none
的内容,无需用户提供凭据即可开始登录过程。当流程结束时,响应中返回的新 JWT 会再次存储在本地存储中。
问题:
当允许第三方 cookie 时,浏览器会将 IDP 的 cookie 添加到 iframe 发出的请求中,因此流程可以正常工作,并且我会在响应中获得新的令牌。
在浏览器设置中禁用第三方 Cookie 时,iframe 无法访问其自己的 Cookie,因此
login_required
会返回错误而不是新的 JWT。无法通过 iframe 访问 cookie 使令牌更新无法使用
问题:
我的 3rd 方 cookie 问题有什么解决方案吗?
如果没有,我可以使用隐式授予流程和 SPA 的替代方法来登录和刷新令牌吗?