You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JWT刷新令牌(RT)与访问令牌(AT)配置疑问咨询

嘿,我来帮你梳理下访问令牌(AT)的核心配置要点,结合你用PHP做后端、客户端调用的场景来说,应该会更贴合你的需求:

访问令牌(AT)的关键配置建议

1. 过期时间:短是核心原则

  • AT的过期时间一定要尽可能短,推荐设置在5-15分钟区间。原因很直白:AT是直接用来调用业务接口的凭证,一旦被攻击者窃取,短有效期能大大压缩他们的作恶窗口。和刷新令牌(RT)的长有效期搭配,既能让用户不用频繁登录,又能把安全风险降到最低。
  • 在PHP里生成JWT时,直接给exp声明赋值当前时间加短时长就行,比如写time() + 300就是5分钟有效期。

2. 令牌内容:能简则简

  • 别往AT里塞无关信息!只保留业务必需的字段:比如用户ID、角色标识、核心权限标签就够了。
  • 毕竟AT是每次请求都要携带的(大多放在Authorization请求头里),内容越精简,请求的开销就越小,尤其是移动端或弱网环境下体验更好。而且冗余信息少了,就算令牌泄露,暴露的用户数据也更少。

3. 签名算法:优先选非对称加密

  • 如果你不是完全可控的闭环场景(比如仅自己开发的原生APP调用后端),别用HS256这类对称加密算法,优先用RS256非对称算法。
  • 对称算法的密钥一旦泄露,攻击者就能伪造任意AT;非对称算法下,后端用私钥签名,客户端/前端只用公钥验证,安全性提升不止一个档次。用PHP的firebase/php-jwt库的话,切换成RS256很简单,提前生成好RSA密钥对就行。

4. 客户端存储:配合后端做安全适配

  • 虽然这是客户端的工作,但和后端配置息息相关:客户端要把AT存在安全的存储区域——移动端用iOS的Keychain或Android的Keystore,Web端别存在localStorage(容易被XSS攻击窃取),建议用HttpOnly Cookie或者内存变量。
  • 你后端可以考虑支持两种AT携带方式:Header里的Bearer令牌,或者HttpOnly Cookie,根据不同客户端类型灵活适配。

5. 和刷新令牌的联动逻辑

  • 当AT过期时,客户端会用RT调用后端的刷新接口换取新AT,这里有几个细节要注意:
    • 刷新接口必须严格验证RT的有效性:比如检查是否在黑名单中、是否属于当前请求的用户等。
    • 建议开启滚动刷新:每次用旧RT换AT时,同时返回一个新的RT(有效期重新计算),避免RT长期不变带来的泄露风险。
    • 你的PHP后端需要维护一个RT存储(比如用Redis),记录所有有效的RT,用户主动登出或RT过期时及时移除。

6. 权限粒度:精准控制访问范围

  • 如果你的业务有不同接口的权限区分,建议在AT里加入scope或permissions字段,明确这个AT能访问的接口范围。
  • 这样后端每个接口验证AT时,除了检查签名和过期时间,还能校验权限,避免一个AT就能访问所有接口,进一步缩小风险范围。

内容的提问来源于stack exchange,提问作者user1300214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:32:12