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

Rails 6中如何使用Doorkeeper实现JWT格式的刷新令牌?

Rails 6 + Doorkeeper 实现JWT格式刷新令牌的落地方案

核心逻辑是通过Doorkeeper内置的生成器回调,替换默认刷新令牌的生成规则,手动输出符合要求的JWT格式令牌,无需修改doorkeeper-jwt的源码,兼容性和可维护性更高。

前置准备

确认已完成doorkeeper、doorkeeper-jwt的基础配置,JWT签名密钥、访问令牌过期策略、刷新令牌过期策略已按照生产要求配置完成,配置文件路径为config/initializers/doorkeeper.rb。

1. 重写刷新令牌生成逻辑

在Doorkeeper的配置块中新增refresh_token生成器,自定义JWT payload和签名规则,签名密钥和算法建议和访问令牌保持一致,降低维护成本:

Doorkeeper.configure do
  # 保留原有所有配置不变,新增以下内容
  generator :refresh_token do |resource_owner, application|
    # 自定义JWT payload,可根据业务需求增减字段
    payload = {
      iss: '你的后端服务标识',
      sub: resource_owner.id.to_s,
      exp: Time.current.to_i + Doorkeeper.configuration.refresh_token_expires_in,
      iat: Time.current.to_i,
      client_id: application&.uid,
      token_type: 'refresh_token'
    }
    # 签名密钥可根据实际配置调整,算法支持HS256/RS256等
    JWT.encode(
      payload,
      Rails.application.credentials.doorkeeper_jwt_secret,
      'HS256'
    )
  end
end

2. 兼容原有校验逻辑

生成的JWT格式刷新令牌会直接存储到oauth_refresh_tokens表的token字段中,Doorkeeper原生的刷新令牌校验、过期清理逻辑完全不需要修改,原有刷新接口的调用方式也保持不变,前端只需要按原有逻辑传递刷新令牌即可。

3. 生产环境安全建议

  • 刷新令牌过期时间建议设置为1到7天,不要设置过长的有效期,降低令牌泄露风险
  • 可在刷新令牌接口返回新的刷新令牌,实现滚动刷新机制,避免单个刷新令牌被长期使用
  • 该改造和前端将令牌存储在内存的方案完全兼容,后端不需要针对前端存储逻辑做额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:45:04