PAT Bearer 无状态凭证 vs SSO Session 有状态会话,本质区别与适用边界
现代 SaaS 如何分层设计:设备绑定 + 用户授权 + 用量管控
时间、数量、环境、机器四个维度的管控策略与技术实现
零运维成本的授权路径:本地签名、硬件狗、邮件激活、DNS 验证
不管是员工登录还是软件授权,系统都在回答两个根本问题:
认证场景:你是员工吗?
License 场景:你是合法客户吗?
底层技术:签名验证、凭证比对
认证场景:你能访问哪些模块?
License 场景:你能用多少席位、多久?
底层技术:Claims / Scope / 配额计数
"认证机制中学到的全部安全实践,在 License 管理中都能复用"
服务端不保存会话,只校验 token 签名。每个请求自带完整的授权声明。
水平扩展能力极强;每个服务节点独立判断授权;适合微服务架构下的 API 配额控制
吊销困难——token 过期前无法让它失效。解决方法是短有效期 + refresh token,或引入 introspection 端点
服务端持有会话状态,客户端只持有 session ID。真实的授权信息存在 Redis 或服务端内存中。
实时管控能力极强;管理员后台调整套餐,下次心跳立即生效;适合并发席位计费
中心化依赖——License 服务器必须高可用;一旦宕机,所有客户端可能降级
成熟的 License 系统不会二选一,而是把两者结合,在性能和控制力之间找平衡。
硬件指纹 + TPM 芯片 / 本地加密狗
解决"这台机器有没有资格运行"
SSO Cookie 或短期 JWT
解决"当前登录的人能用什么功能"
异步计数 + 实时熔断
解决"这个月用了多少 API 额度"
| 维度 | 认证场景 | License 场景 |
|---|---|---|
| 时间 | 会话是否过期 | 试用期、订阅周期、维护期、宽限期 |
| 数量 | 允许 / 拒绝 | 并发数、席位数、调用次数、存储容量 |
| 环境 | 角色权限 | 开发 / 测试 / 生产 / 多区域部署 |
| 机器 | 设备信任管理 | 硬件绑定、迁移策略、防克隆 |
认证通常是二元判断,License 需要处理连续的量化边界。订阅到期后不应直接拒绝,而应进入只读降级模式——这是商业设计上的考量。
License 请求必须携带时间戳和随机数(nonce),服务端拒绝过期或重复请求。和 SSO 防止 Cookie 重放是同一套逻辑。
本地 License 文件至少用 HMAC-SHA256 签名,结合代码混淆和反调试,防止客户直接修改 expires_at 字段。
引入网络级唯一标识(内网 IP + 主机名),或强制定期心跳。克隆体只有一台能维持连接。
离线软件预埋黑名单,每次更新同步最新吊销列表。在线软件在心跳中返回状态变更指令,和 SSO 强制登出完全一致。
公钥编译进客户端,License 是签名的 JWT。零服务器、零网络,适合买断制桌面软件。
授权写在 USB 安全芯片里。防破解能力最强,但硬件成本和用户体验是代价。
机器码发邮件,人工回传激活码。基础设施只需一个邮箱和一个本地脚本。
把授权签名写在域名 TXT 记录里。不需要服务器,只需要每年几十元的域名费用。
无服务器的隐含代价:你无法远程吊销、无法实时统计、无法一键断网。
所有安全都押在"客户端能不能被攻破"这一点上。
"我更需要离线的韧性,还是在线的实时管控?"
认证机制与 License 管理共享同一套底层逻辑:
签发凭证、验证身份、管控权限、处理吊销。
控制力越强,对服务器的依赖越深;
愿意放弃部分控制力,就能换取更低的运维成本。