Skip to main content
Documentation navigation

KAI AUTH / DEVELOPERS

Better Auth 1.7.1Updated Content: Simplified Chinese
View Markdown
On this page

退出与授权撤销

明确区分退出当前应用、结束 Auth 会话和撤销应用授权,避免把本地清理误认为全局退出。

退出应用

清理应用自己保存的会话和令牌即可退出当前应用;这不会自动清除 Auth 的登录 Cookie,用户下次授权仍可能直接登录。

RP-Initiated Logout

使用 OIDC Discovery 的 end_session_endpoint(当前 /api/auth/oauth2/end-session)。通常发送已验证的 ID token 作为 id_token_hint,需要返回应用时发送已登记的 post_logout_redirect_uri 和随机 state。

GET /api/auth/oauth2/end-session
  ?id_token_hint=ID_TOKEN
  &post_logout_redirect_uri=https%3A%2F%2Fapp.example.com%2Fsigned-out
  &state=LOGOUT_STATE

退出后的地址必须在该客户端的退出回调白名单中。缺少可用 hint,或 hint 与当前浏览器会话不匹配时,Auth 会要求用户确认;应用应允许正常顶层页面导航,不把确认页面当成协议故障。返回应用后核对 logout state。

Back-channel Logout

需要跨应用结束本地会话时,登记自己的 HTTPS back-channel logout URI。该地址必须为公网可路由主机,不能含 URL 凭据或 fragment。接收方验证 logout token 的签名、issuer、audience、事件声明和重放条件,并按 sid 或 sub 清理自己的对应会话。

后端通知不能直接清理另一个站点的浏览器 Cookie。接入方必须真正实现自己的会话失效逻辑,登记 URL 本身不代表完成单点退出。

撤销令牌与授权

使用 Discovery 的 revocation_endpoint(当前 /api/auth/oauth2/revoke)处理应用持有的可撤销令牌,并使用该客户端登记的认证方式。用户也可在个人账号的已授权应用中撤销 consent。

自包含 JWT access token 不能像数据库里的 opaque token 一样逐条删除后立即使所有离线验证失效。当前实现对仍有效的 JWT 单令牌撤销返回 HTTP 400 unsupported_token_type,不能把该结果或浏览器清理视为服务端已撤销。刷新链、会话和授权状态的失效,不保证已发行 JWT 立即被离线资源服务器拒绝。根据敏感程度选择在线检查,并保持较短有效期。

撤销整个 consent 与上述单 JWT 撤销请求不同:consent 删除后,其 JWT 会立即被 Auth 的在线 UserInfo 和 Introspection 拒绝;缩减权限或之后重新授权也不能让旧 JWT 恢复有效。结束来源 Auth 会话同样阻止这些在线端点继续接受其令牌。离线资源服务器仍需遵守前述有效期边界。

普通 prompt=login 或 max_age 触发的重新验证会在完整验证后更新原会话证据,保留 SID 和其他应用授权,不等同于退出。修改密码、因子或二步策略则会撤销旧令牌链,即使当前浏览器会话经校验得以保留;详细规则见令牌校验与 claims。

测试退出时分别检查:当前应用会话是否消失、Auth 是否需要重新登录、其他接入应用是否处理通知、旧 refresh token 是否仍可使用。单个退出回跳成功只证明其中一个步骤。