用途
本技能用于在 Python、Rust、Go、TypeScript 等语言中实现现代认证、授权与 API 安全。适用场景包括:构建用户认证系统(登录、注册、SSO);实现授权(角色、权限、访问控制);保护 API(JWT 校验、限流);添加无密码认证(Passkeys/WebAuthn);从密码认证迁移到现代认证;集成企业 SSO(SAML、OIDC);实现细粒度权限(RBAC、ABAC、ReBAC)。
主要能力
OAuth 2.1 强制要求(2025 标准,RFC 9798)
必需项(相对 OAuth 2.0 的破坏性变更):PKCE 强制(S256 方法,最小熵 43 字符);精确重定向 URI 匹配(不允许通配符或子串匹配);公共客户端仅允许授权码流程,其他流程需机密客户端;所有端点要求 TLS 1.2+。
已移除项:隐式授权;资源所有者密码凭证授权(改用 OAuth 2.0 设备流程 RFC 8628);查询参数中的 Bearer 令牌(必须使用 Authorization 头或 POST 体)。
关键点:PKCE 现在对所有 OAuth 流程强制,不仅限于公共客户端。
JWT 最佳实践
签名算法优先级:EdDSA with Ed25519(推荐,性能最快、签名最小、现代密码学);ES256(ECDSA with P-256,性能好、行业标准、兼容性广);RS256(RSA,遗留兼容、签名较大、性能较慢)。绝不允许 alg: none 或算法切换攻击。
令牌生命周期:访问令牌 5-15 分钟;刷新令牌 1-7 天并轮换;ID 令牌与访问令牌相同(5-15 分钟)。刷新令牌轮换:每次刷新生成新的访问令牌和刷新令牌,使旧刷新令牌失效。
令牌存储:访问令牌仅存内存(绝不存 localStorage);刷新令牌存 HTTP-only cookie + SameSite=Strict;CSRF 令牌存单独的非 HTTP-only cookie;绝不在日志中记录令牌。
必需 JWT 声明:iss、sub、aud、exp、iat、jti、scope。
密码哈希(Argon2id)
OWASP 2025 参数:算法 Argon2id;内存成本 64 MB(65536 KiB);时间成本 3 次迭代;并行度 4 线程;盐长度 16 字节(128 位);目标哈希时间 150-250ms。
要点:Argon2id 为混合型(数据无关时序 + 内存硬);需根据自身硬件调整内存成本以达到 150-250ms;验证时使用时序安全比较;从 bcrypt 逐步迁移(旧算法验证、新算法重哈希)。
Passkeys / WebAuthn
Passkeys 基于 FIDO2/WebAuthn 提供抗钓鱼、无密码认证。适用场景:优先安全性的用户应用;减少密码相关支持负担;移动优先应用(生物识别认证);需要 MFA 但不用短信的应用。跨设备同步:iCloud Keychain(Apple 生态)、Google Password Manager(Android、Chrome)、1Password、Bitwarden 等第三方密码管理器。
授权模型选型
简单角色(<20 个角色):RBAC with Casbin(嵌入式,任意语言),例如 Admin、User、Guest。
复杂属性规则:ABAC with OPA 或 Cerbos,例如“允许当 user.clearance >= doc.level 且 user.dept == doc.dept”。
基于关系(多租户、协作):ReBAC with SpiceDB(Zanzibar 模型),例如“可编辑当是文档工作区成员且工作区套餐包含该功能”,适用于类 Notion、类 GitHub 权限。
Kubernetes / 基础设施策略:OPA(Gatekeeper 用于准入控制),例如强制 Pod 安全策略。
各语言库选型
TypeScript:Auth.js v5(多框架)、jose 5.x(JWT)、@simplewebauthn/server 11.x(Passkeys)、Zod 3.x(校验)、Casbin.js 1.x(策略引擎)。
Python:Authlib 1.3+(OAuth/OIDC 客户端+服务端)、joserfc 1.x(JWT)、py_webauthn 2.x(WebAuthn 服务端)、argon2-cffi 24.x(密码哈希)、Pydantic 2.x(校验)、PyCasbin 1.x(策略引擎)。
Rust:jsonwebtoken 10.x(JWT)、oauth2 5.x(OAuth 客户端)、webauthn-rs 0.5.x(WebAuthn + 认证)、argon2 0.5.x(原生 Argon2id)、Casbin-RS 2.x(策略引擎)。
Go:golang-jwt v5(JWT)、go-oidc v3(OIDC 客户端)、go-webauthn 0.11.x(Passkeys)、golang.org/x/crypto/argon2(密码哈希)、Casbin v2(策略引擎)。
托管认证服务
Clerk(快速开发、初创,预构建 UI、Next.js SDK);Auth0(企业、成熟,25+ 社交提供商、SSO);WorkOS AuthKit(B2B SaaS、企业 SSO,SAML/SCIM、管理门户);Supabase Auth(Postgres 用户,基于 Postgres、RLS)。
自托管方案
Keycloak(Java,企业、本地部署);Ory(Go,云原生、微服务);Authentik(Python,现代、开发者友好)。
API 安全最佳实践
限流:分层限流(按 IP + 按用户),匿名 10 请求/分钟、已认证 100 请求/分钟、高级 1000 请求/分钟;使用滑动窗口算法(非固定窗口)配合 Redis。
CORS:生产环境限制性配置,origin 白名单、credentials: true、maxAge 86400、allowedHeaders 含 Content-Type 和 Authorization;绝不在 credentials: true 时使用 origin: '*'。
安全响应头:Strict-Transport-Security、X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Referrer-Policy、Permissions-Policy、Content-Security-Policy。
前端集成模式
受保护路由(Next.js):使用 next-auth/middleware 的 withAuth,按路径与 token 角色授权。
基于角色的 UI 渲染:使用 useSession 检查 session.user.role,非管理员返回 null。
使用方式
常见工作流:
-
OAuth 2.1 集成:生成 PKCE challenge → 重定向到授权端点 → 处理回调获取授权码 → 用 code_verifier 换取令牌 → 安全存储令牌 → 实现刷新令牌轮换。
-
JWT 实现:用 scripts/generate_jwt_keys.py 生成签名密钥 → 配置令牌生命周期 → 实现令牌校验中间件 → 设置刷新令牌轮换 → 配置令牌存储。
-
Passkeys 设置:注册时登记凭证 → 生成注册 challenge → 验证 attestation → 存储凭证 ID 和公钥 → 用 assertion 实现认证流程。
-
授权引擎设置:选择引擎(简单 RBAC 用 Casbin,ReBAC 用 SpiceDB)→ 定义 schema/策略 → 实现检查函数 → 集成路由处理器 → 添加审计日志。
脚本:python scripts/generate_jwt_keys.py --algorithm EdDSA(生成 EdDSA 或 ES256 密钥对);python scripts/validate_oauth_config.py --config oauth.json(校验 OAuth 2.1 合规性)。
示例:examples/authjs-nextjs/(Auth.js + Next.js 完整实现);examples/keycloak-fastapi/(自托管 Keycloak + FastAPI 通过 OIDC 集成);examples/passkeys-demo/(可运行的 Passkeys 实现)。
参考文档:references/oauth21-guide.md、references/jwt-best-practices.md、references/passkeys-webauthn.md、references/authorization-patterns.md、references/password-hashing.md。
适用场景
需要构建用户系统、保护 API、实现访问控制、集成企业 SSO、迁移到无密码认证或实现细粒度权限的各类应用。
限制
资料未提供本技能的具体安装命令、版本兼容性矩阵、性能基准数据、收费或价格信息,以及各示例的完整运行环境要求。