gpt4 book ai didi

ruby-on-rails - 缓存 auth0 公钥

转载 作者:行者123 更新时间:2023-12-05 07:39:52 28 4
gpt4 key购买 nike

我正在使用 auth0 进行身份验证,并使用他们提供的方法之一(复制在下面)来确认 jwt token 。他们提供的解决方案在每次向我的服务器发出请求时都会触发他们的服务,这使得请求最多需要 1 秒才能完成。

我正在尝试缓存由他们提供的方法生成的公钥,但没有成功。起初我以为我可以将它存储在Rails.cache中但后来意识到该方法创建了一个 OpenSSL对象,而不是字符串,当我尝试 Rails.cache.write('KEY', openSslObject)并使用 Rails.cache.fetch('KEY') 访问它我没有得到任何返回

我还尝试使用带有 Rails 缓存提取的 block :

cached_jwks_hash = Rails.cache.fetch("JWKS_HASH", expires_in: 10.hours) do
get_jwks_hash
end

但还是得到nil

get_jwks_hash下面的方法返回以下内容:{"key"=>#<OpenSSL::PKey::RSA:0x007fe29c545ef8>}

缓存这些数据的最佳方式是什么?是否可以将其存储在内存中的变量中?

  def verify(token, jwks_hash)
JWT.decode(token, nil,
true, # Verify the signature of this token
algorithm: 'RS256',
iss: "https://#{ENV["AUTH0_DOMAIN"]}/",
verify_iss: true,
aud: ENV["AUTH0_API_AUDIENCE"],
verify_aud: true) do |header|
jwks_hash[header['kid']]
end
end

def get_jwks_hash
jwks_raw = Net::HTTP.get URI("https://#{ENV["AUTH0_DOMAIN"]}/.well-known/jwks.json")
jwks_keys = Array(JSON.parse(jwks_raw)['keys'])
Hash[
jwks_keys
.map do |k|
[
k['kid'],
OpenSSL::X509::Certificate.new(
Base64.decode64(k['x5c'].first)
).public_key
]
end
]
end

最佳答案

好的,经过研究,我发现了问题所在。 key 未被保存,因为 rails.cache.fetch 方法使用的是 null_store,它实际上不存储任何数据。在我的 config/environments/development 文件中有以下代码:

  if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=172800'
}
else
config.action_controller.perform_caching = false
config.cache_store = :null_store
end

因为我没有 tmp/caching-dev.txt 文件,所以正在使用 null_store。倒数第二行可以更新为read

config.cache_store = :memory_store 或您喜欢的任何类型的存储

关于ruby-on-rails - 缓存 auth0 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791707/

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