SPA中使用Auth0认证时,页面刷新后Auth0如何记住用户登录状态?
页面重载时Auth0保留登录状态的核心逻辑
你看到的auth0.<CLIENT_ID_HERE>.is.authenticated只是状态标记cookie,不存储任何身份凭证,完整的机制如下:
1. 授权码+PKCE流程的临时参数存储
你在POST /oauth/token请求里看到的code和code_verifier是OAuth2授权码流+PKCE验证的临时参数,仅单次登录流程生效,不会长期存储:
code_verifier是应用跳转Auth0登录页之前随机生成的,临时存放在浏览器sessionStorage中,登录成功回调回应用后,会和Auth0返回的code一起提交换取token,换取完成后就会被立即销毁- 首次换取到的id token、access token默认存储在Auth0 React SDK的内存变量中,页面重载后就会被清空
2. 页面重载后的静默认证流程
内存中的token丢失后,Auth0 SDK会自动触发无感知的静默认证恢复状态:
- SDK在后台悄悄向Auth0的授权端点发起请求,携带
prompt=none参数,要求Auth0不弹出登录界面直接返回认证结果 - 此时你的浏览器在Auth0域名下存在Auth0颁发的会话cookie(属于第三方cookie),Auth0校验该cookie有效,就会直接返回授权码
- SDK用这个授权码再次调用
/oauth/token接口换取最新的token,完成登录状态恢复,整个过程用户不会感知到跳转
隐身窗口会话无法保留的原因
隐身模式默认会禁用第三方cookie,且关闭窗口后所有本地存储、cookie数据都会被清空:
- 静默认证依赖的Auth0域名会话cookie被拦截后,Auth0无法识别用户身份,就无法自动恢复登录状态
- 如果常规窗口也偶发重载后登录失效的问题,一般是浏览器安全策略(比如Safari ITP、Chrome第三方Cookie拦截规则)拦截了第三方cookie导致的,这种场景可以开启Auth0的可刷新token功能,将token加密后存储在
localStorage中做持久化,注意做好应用的XSS防护即可。
内容的提问来源于stack exchange,提问作者Animal Rights
相关产品推荐
相关产品推荐

