🔐
OAuth 2.1 授权
Authorization Code + PKCE,零 secret 泄漏
开放平台标准 OAuth 2.1 授权码流程。SPA / 移动 App / iframe 均走 PKCE,无需暴露 client secret。state 防 CSRF,5 分钟 code 缓存防重放。
example.http
# 1. 引导用户授权
GET /oauth/authorize?
response_type=code&
client_id=YOUR_APP_KEY&
redirect_uri=https://yourapp.com/callback&
scope=openid%20profile&
state=RANDOM_STATE&
code_challenge=BASE64URL(SHA256(verifier))&
code_challenge_method=S256
# 2. 回调接收 code,换 token
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=https://yourapp.com/callback&
client_id=YOUR_APP_KEY&
code_verifier=ORIGINAL_VERIFIER
# 3. 调用 API(Bearer JWT)
GET /oauth/userinfo
Authorization: Bearer <access_token>核心能力
6 项核心能力,每项独立可用
OAuth 2.1 安全收口
废弃 implicit / password,强制 PKCE,符合最新 RFC
Authorization Code + PKCE
SPA / 移动 App / iframe 统一安全流程
state 防 CSRF
随机 state 原样返回,跨站请求伪造防御
JWT (RFC 9068)
access_token 为 JWT,iss=UM,可本地验签
Refresh Token
长会话场景,refresh_token 续期 access_token
5 分钟 code 缓存
同一 code 5 分钟内只能消费一次,防重放
API 端点
通过 /api/* 调用以下端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /oauth/authorize | 授权端点(引导用户授权) |
| POST | /oauth/token | 令牌端点(code 换 token / refresh) |
| GET | /oauth/userinfo | OIDC UserInfo(获取用户信息) |
| POST | /oauth/revoke | 撤销 token |