后端集成
AM 通过 JWKS 暴露公钥,通过 OIDC Discovery 暴露配置。这些都是标准协议,任意 JWT 库都可直接使用。
在本地验证令牌、信任声明并进行授权即可。
Token 验证流程
Endpoints
| Endpoint | 用途 |
|---|---|
/.well-known/jwks.json | 公共签名密钥 |
/.well-known/openid-configuration | OIDC Discovery 文档 |
/oauth2/introspect | Refresh Token 自省 |
JWKS
获取公钥用于本地验证:
GET /.well-known/jwks.json
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "key_...",
"alg": "RS256",
"n": "0vx7agoebG...",
"e": "AQAB"
}
]
}
密钥轮换期间可能同时存在多把密钥。请用 JWT 头部里的 kid 声明进行匹配。
OIDC Discovery
通过 Discovery 文档自动配置客户端:
GET /.well-known/openid-configuration
返回符合 OpenID Connect Discovery 规范的端点信息、支持算法和能力。
JWT Claims
验证后的令牌包含:
| Claim | 说明 |
|---|---|
iss | 签发方 URL |
sub | 主体(用户 ID 或客户端 ID) |
aud | 目标受众 |
exp | 过期时间(Unix 时间戳) |
iat | 签发时间(Unix 时间戳) |
scope | 已授予权限 |
cid | 客户端 ID |
app | 应用 ID |
acc | 当前账户 ID |
uid | 用户 ID(用户认证场景) |
role | 用户在当前账户中的角色 |
缓存
- 缓存 JWKS 响应(使用 ETag/If-None-Match)
- 签名验证失败时主动刷新(应对密钥轮换)
- 典型 TTL:1 小时
Token 自省
对于 Refresh Token 或需要权威验证的场景:
POST /oauth2/introspect
Content-Type: application/x-www-form-urlencoded
token=...&client_id=...&client_secret=...
返回 active: true/false 及令牌声明。Access Token 是 JWT,优先通过 JWKS 本地验证。
相关
- OAuth - 令牌签发
- 客户端 - 客户端配置
- Client Key - 签名密钥