背景与价值
OAuth 2.1推荐禁用Implicit与强制PKCE。短期令牌与旋转策略可降低泄露面并提升安全。
统一规范
- 禁用Implicit:不接受 `response_type=token` 与混合模式。
- 强制PKCE:仅允许 `S256` 且校验 `code_verifier`。
- 短期令牌:`access_token` 期限≤900秒,支持刷新旋转。
核心实现
授权参数校验
```ts
type Params = { response_type: string; code_challenge_method: string; code_verifier: string }
function validVerifier(v: string): boolean { return /^[A-Za-z0-9\-\._~]{43,128}$/.test(v) }
function oauth21Ok(p: Params): boolean {
if (p.response_type.toLowerCase().includes('token')) return false
if (p.code_challenge_method !== 'S256') return false
if (!validVerifier(p.code_verifier)) return false
return true
}
```
令牌期限校验
```ts
type Token = { access_token: string; expires_in: number }
function tokenOk(t: Token): boolean { return typeof t.access_token === 'string' && Number.isInteger(t.expires_in) && t.expires_in > 0 && t.expires_in <= 900 }
```
落地建议
- 在授权端拒绝Implicit与混合模式,强制PKCE S256并校验 `code_verifier`。
- 下发短期 `access_token` 并配合刷新令牌旋转与撤销治理。
验证清单
- `response_type` 是否排除 `token`;`code_challenge_method` 是否为 `S256`;令牌期限是否≤900秒。
OAuth 2.1 收敛
OAuth 2.1 禁止隐式流程与密码授权,要求 PKCE,收敛安全最佳实践。
- 禁止 response_type=token
- 公共客户端强制 PKCE

发表评论 取消回复