在 ruby​​ 中存储 JWT 的最佳方法

Posted

技术标签:

【中文标题】在 ruby​​ 中存储 JWT 的最佳方法【英文标题】:The best way to store a JWT in ruby 【发布时间】:2021-12-22 04:40:53 【问题描述】:

我目前正在将我们的系统与外部 api 集成。我正在使用 httparty 来促进集成。

当我使用提供给我们 JWT 的 external-api 进行身份验证时,是否有存储此 JWT 以供将来在 ruby​​ 中的请求的最佳做法?

【问题讨论】:

如果您使用数据库,为什么不将其存储在数据库中? 【参考方案1】:

Thew JWT Ruby Gem 应该是您实现 Ruby 的首选。还有一些其他的宝石。有关 JWT 的更多信息,您可以参考gem's documentation 或here。

关于存储 JWT 的最佳实践,它实际上取决于您的用例,但对于您的情况,如果您是 JWT 有一个典型的过期时间,听起来您会想要使用临时缓存类型存储,例如 Redis .想法是,在身份验证之后,您将令牌写入临时存储,如果您使用的是 Redis,它可能看起来像这样。

require 'redis'


my_jwt_token = call_some_api_to_get_token

redis = Redis.new (
    :host => 'hostname',
    :port => port,
    :password => 'password')

token_expires_in_seconds = 60 * 60 # set expire 1 hour
redis.set('my_jwt_token', my_jwt_token, ex: token_expires_in_seconds)

my_api_client.call('some_endpoint', jwt_token: redis.get('my_jwt_token"))

在我的示例中,我假设您有一个带有调用方法的客户端对象,该方法采用端点和选项哈希。但这应该让您对这里的方法有一个基本的了解。

【讨论】:

我认为 OP 还问了其他问题。他收到了 JWT,但不知道在哪里存储它。 是的,没错 @BrandonTeixeira 看看我更新的答案是否有帮助。

以上是关于在 ruby​​ 中存储 JWT 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

存储 JWT 令牌以供多域使用的最佳方法

保护 JWT 的最佳方法是啥?

在 ASP.NET 核心中创建 JWT 是不是有更简单的方法?又名“JWT 身份验证的最佳实践?”

在基于 Web 的应用程序中,哪里可以正确、安全地存储 JWT 令牌?

在哪里存储 JWT 令牌?

使用 JWT (Node.js + mongoose) 在 REST API 中管理用户权限的最佳方法