---
title: "退出与授权撤销"
description: "明确区分退出当前应用、结束 Auth 会话和撤销应用授权，避免把本地清理误认为全局退出。"
url: "https://auth.kai.com/docs/logout"
language: "zh-CN"
version: "Better Auth 1.7.1"
updated: "2026-09-22"
---

# 退出与授权撤销

明确区分退出当前应用、结束 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`。

```text
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](/docs/claims)。

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