Skip to content

登出

用户登出是终端用户流程中的重要环节。Code Bird Cloud 通过 OIDC 标准的结束会话端点(End Session Endpoint)实现用户登出功能,确保用户的会话被安全地终止。

概述

用户登出涉及以下操作:

  1. 清除客户端本地存储的会话信息和令牌
  2. 吊销服务端的令牌(可选但推荐)
  3. 结束用户在 Code Bird Cloud 的 OIDC 会话
  4. 重定向用户到指定的登出后页面

结束会话端点

Code Bird Cloud 提供标准的 OIDC 结束会话端点,用于终止用户在 Code Bird Cloud 的会话。

GET /oidc/end-session?
  id_token_hint=eyJhbGciOiJFUzI1NiIs...&
  post_logout_redirect_uri=https://your-app.com&
  state=RANDOM_STATE_STRING

参数说明

参数必填说明
id_token_hint用户的 ID Token,用于标识要登出的用户。虽然非必填,但强烈建议提供以确保正确的用户会话被终止
post_logout_redirect_uri登出完成后重定向的目标地址。该地址需要在应用的配置中预先注册
state随机字符串,重定向时会原样返回,可用于客户端状态保持

请求示例

GET /oidc/end-session?
  id_token_hint=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...&
  post_logout_redirect_uri=https://your-app.com/logged-out&
  state=abc123

登出完成后,Code Bird Cloud 会将用户重定向到:

https://your-app.com/logged-out?state=abc123

令牌吊销

在跳转到结束会话端点之前,建议先吊销用户的 Access Token 和 Refresh Token,确保令牌立即失效。

POST /oidc/revoke
Content-Type: application/x-www-form-urlencoded

token=eyJhbGciOiJFUzI1NiIs...&
token_type_hint=access_token
参数必填说明
token要吊销的令牌(Access Token 或 Refresh Token)
token_type_hint令牌类型提示:access_tokenrefresh_token

无论令牌是否有效或是否已过期,吊销请求始终返回 HTTP 200。建议同时吊销 Access Token 和 Refresh Token。

客户端登出流程

完整的客户端登出流程推荐按以下步骤执行:

第 1 步:吊销令牌

在客户端后端调用令牌吊销端点,吊销 Access Token 和 Refresh Token:

POST /oidc/revoke
token={refresh_token}&token_type_hint=refresh_token
POST /oidc/revoke
token={access_token}&token_type_hint=access_token

第 2 步:清除本地会话

清除客户端本地存储的所有会话信息,包括:

  • Access Token
  • Refresh Token
  • ID Token
  • 用户信息缓存
  • Session 或 Cookie 中的认证状态

第 3 步:重定向到结束会话端点

将用户重定向到 Code Bird Cloud 的结束会话端点,结束 OIDC 会话:

GET /oidc/end-session?
  id_token_hint={id_token}&
  post_logout_redirect_uri={your_logout_page}

最佳实践

  • 始终吊销令牌:在登出时主动吊销令牌,而不是仅依赖令牌过期。即使 Access Token 有效期较短(默认 1 小时),主动吊销可以防止令牌在过期前被滥用
  • 提供 id_token_hint:调用结束会话端点时尽量提供 id_token_hint,确保正确的用户会话被终止
  • 注册 post_logout_redirect_uri:在应用配置中预先注册登出后的重定向地址,提供流畅的用户体验
  • 处理登出失败:即使令牌吊销或会话结束请求失败,客户端也应该清除本地会话信息,确保用户在客户端层面已登出
  • 前端框架集成:如果使用 OIDC 客户端库(如 oidc-client-ts),库通常提供内置的登出方法,会自动处理上述流程

相关文档

Released under the MIT License.