用途:该模式用于服务端令牌认证(如会话 ID)。主体在请求中携带唯一的不透明令牌,系统通过服务端映射验证令牌并取回对应主体,令牌本身不含任何含义,保密性即身份证明。
主要能力与组件:主体提供令牌;执行点(Enforcer)在处理前确保令牌已验证;验证器(Verifier)校验令牌并取回主体;主体提供者维护令牌到主体的映射;注册器在初次认证后签发令牌;令牌生成器使用密码学安全随机数生成令牌。数据元素包括令牌、主体和“你拥有的东西”这一凭证因素。
令牌要求:必须密码学随机、在所有活动会话中唯一,至少 128 位、最少 64 位熵。各语言安全生成器:Java 用 java.security.SecureRandom,Python 用 secrets 模块,Node.js 用 crypto.randomBytes(),.NET 用 RNGCryptoServiceProvider。
认证流程:主体→[动作+令牌]→执行点→[令牌]→验证器→[get_principal(token)]→主体提供者→[主体或错误]→验证器→执行点→[动作+主体]→系统。
签发:主体先经主认证方式认证,注册器请求新令牌,生成器创建安全随机令牌,主体提供者存储映射后返回令牌;签发前需检查重复,冲突则重新生成。
生命周期:建议同时使用空闲超时与绝对超时;登出时移除令牌,重新认证时先失效旧令牌,凭证变更时失效该主体全部令牌;令牌丢失无法重置,只能重新认证,不应存在恢复机制。
安全注意:仅经 HTTPS 传输,安全存储(HttpOnly、Secure Cookie),不记录日志、不放入 URL;足够熵并限速验证尝试、监控暴力破解;认证后始终签发新令牌,不接受客户端提供的令牌作为会话标识;可考虑绑定客户端特征(IP、User-Agent),但需权衡移动网络 IP 变化。
常见实现即 Web 会话 ID:登录成功后生成、存于安全 Cookie、服务端维护会话存储、登出时失效。与可验证令牌相比,不透明令牌主体存于服务端、可立即撤销,但需要共享存储、令牌较小。
限制:资料未提供具体代码示例、性能数据、收费或平台信息。