错误码
OAuth 端点错误格式
OAuth 端点(/oauth/token、/oauth/revoke)返回标准 OAuth 2.0 错误格式:
{
"error": "ERROR_CODE",
"error_description": "人类可读的错误描述"
}
错误码一览
客户端错误
| error | HTTP 状态码 | 说明 |
|---|---|---|
invalid_client | 401 | client_id 或 client_secret 认证失败(公共客户端不校验 client_secret) |
invalid_request | 400 | 缺少必要的请求参数 |
unsupported_grant_type | 400 | grant_type 不支持(仅支持 authorization_code 和 refresh_token) |
授权码错误
| error | HTTP 状态码 | 说明 |
|---|---|---|
invalid_grant | 400 | 授权码无效、已过期(10 分钟)、或已使用 |
invalid_grant | 400 | redirect_uri 与授权时不一致 |
invalid_grant | 400 | code_verifier 与授权时的 code_challenge 不匹配或格式非法 |
invalid_grant | 400 | 强制 PKCE 的应用收到了未绑定 code_challenge 的授权码 |
invalid_request | 400 | 授权码绑定了 code_challenge,但请求里没带 code_verifier |
Refresh Token 错误
| error | HTTP 状态码 | 说明 |
|---|---|---|
invalid_grant | 400 | Refresh Token 无效、已过期(30 天)、或已撤销 |
撤销错误
| error | HTTP 状态码 | 说明 |
|---|---|---|
invalid_request | 400 | 缺少 token 参数 |
用户拒绝
| error | 传递方式 | 说明 |
|---|---|---|
access_denied | redirect_uri 查询参数 | 用户在授权页面点击了「拒绝」 |
频率限制
| error | HTTP 状态码 | 说明 |
|---|---|---|
rate_limited | 429 | 请求太频繁,响应头包含 Retry-After |
API 端点错误格式
API 端点(/api/userinfo、/api/token-info)返回类似的 JSON 格式:
{
"error": "unauthorized",
"error_description": "无效或过期的访问令牌"
}
| error | HTTP 状态码 | 说明 |
|---|---|---|
unauthorized | 401 | Token 无效或已过期 |
invalid_request | 400 | 缺少 Token 参数 |
rate_limited | 429 | 请求太频繁 |
授权页面错误
/oauth/authorize 验证失败时返回 HTML 错误页面(非 JSON),可能的错误:
- 不支持的 response_type
- 无效的 client_id
- redirect_uri 未授权