v1oauth 上下文
自省
POST /v1/oauth/introspect:RFC 7662 令牌内省,仅机密客户端可用。
POST {issuer}/introspect 回答「这枚令牌现在还有效吗」。判断依据是服务端当前状态,而不是令牌自述的 claim——会话被撤销、被刷新轮换掉的旧令牌,都会返回 active: false。
前置条件
| 条件 | 说明 |
|---|---|
| 客户端认证 | 必须先以客户端身份认证 |
| 客户端类型 | 仅机密客户端;公开客户端会被拒 |
| 缓存 | 响应固定 no-store |
请求
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
token | string | ✅ | 待检查的令牌 |
token_type_hint | string | 可选 | 查找提示,不影响结果 |
curl -X POST 'https://id.example.com/v1/oauth/introspect' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "token=$ACCESS_TOKEN"响应
{
"active": true,
"scope": "openid profile",
"client_id": "cli_...",
"sub": "usr_...",
"aud": "auth",
"exp": 1763112000,
"iat": 1763111100
}无效或已撤销时只返回 { "active": false },其余字段全部省略。
不要缓存自省结果
自省是「此刻是否有效」的即时判断。一旦被缓存,撤销就会在缓存窗口内失效——攻击者拿一枚已撤销的令牌仍能通过。
什么时候用
| 场景 | 建议 |
|---|---|
| 资源服务器验签 | 优先用 公钥 本地验签,省一次往返 |
| 需要知道令牌是否被撤销 | 用本端点,或依赖短有效期 + 刷新 |
| 公开客户端 | 不可用;用资源服务器验签 |