gpt4 book ai didi

ruby-on-rails - 在 Rails 中连接到 API 时将 JWT 存储在何处

转载 作者:行者123 更新时间:2023-12-04 17:45:29 25 4
gpt4 key购买 nike

我有一个 Rails 应用程序,我正在尝试连接到一个 API。

我已经能够 ping API 并发送表单数据,并且一切正常。我的问题是 API 要求您随请求发送 JWT 身份验证 token 。因此,我提出了这个额外的身份验证请求以获取 JWT,然后将该 JWT 与我进行的其他 API 调用一起发送。

API 建议保存初始 JWT,这样我就不必为 JWT 发出额外的身份验证请求。他们建议将其保存一定时间,然后在这段时间后刷新并获得一个新的 JWT。该 token 的有效期为 25 小时,因此他们建议在 24 小时后获取一个新 token ,以便在检索新 JWT 时不会中断任何服务。

我应该在哪里存储这个 token ?我在考虑 session 或缓存它吗?我觉得将其存储在 session 中可能存在安全问题?

只是寻找有关最佳实践的输入以及将 JWT 存储在他们的应用程序中的位置。也不要费心告诉我我的问题太笼统,否则不适合征求意见。我正在做。暴徒生活。

最佳答案

这是一个 friend 想出的解决方案。我更喜欢它。使用 Rails 缓存。到目前为止,它似乎对我有用。所以我想我会为后代发布它。按照您认为适合您自己的应用程序的方式对其进行调整。我不得不稍微调整一下,但本质是一样的。

    def self.fetch_from_api(attributes)
# use with_token_refresh method here.
# It will fail if the token is expired, delete the cache, then re-fetch the token.
with_token_refresh do
url = build_url(:fetch, attributes[:endpoint], [attributes[:name_id]])
#call fetch_jwt method and put it in the headers or wherever
headers = attributes.merge(jwt: fetch_jwt)
response = execute_request(url, headers(attributes))
JSON.parse(response)
end
end

def self.fetch_jwt
# will write if nothing cached, or cache expired, read if something cached
Rails.cache.fetch('jwt' , expires_in: 24.hours) do
url = 'test.com'
headers = { secret: 'stuff' }
body = 'body'
resp = RestClient.post url, body, headers
JSON.parse(resp)['access_token']
end
end

def self.with_token_refresh
yield
rescue StandardError
# delete jwt, then yield to re-fetch
Rails.cache.delete('jwt')
yield
end

关于ruby-on-rails - 在 Rails 中连接到 API 时将 JWT 存储在何处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com