class JWT::JWK::KeyFinder
Public Class Methods
new(options)
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 6 def initialize(options) jwks_or_loader = options[:jwks] @jwks = jwks_or_loader if jwks_or_loader.is_a?(Hash) @jwk_loader = jwks_or_loader if jwks_or_loader.respond_to?(:call) end
Public Instance Methods
key_for(kid)
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 12 def key_for(kid) raise ::JWT::DecodeError, 'No key id (kid) found from token headers' unless kid jwk = resolve_key(kid) raise ::JWT::DecodeError, 'No keys found in jwks' if jwks_keys.empty? raise ::JWT::DecodeError, "Could not find public key for kid #{kid}" unless jwk ::JWT::JWK.import(jwk).keypair end
Private Instance Methods
find_key(kid)
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 53 def find_key(kid) jwks_keys.find { |key| (key[:kid] || key['kid']) == kid } end
jwks()
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 38 def jwks return @jwks if @jwks load_keys @jwks end
jwks_keys()
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 49 def jwks_keys Array(jwks[:keys] || jwks['keys']) end
load_keys(opts = {})
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 45 def load_keys(opts = {}) @jwks = @jwk_loader.call(opts) end
reloadable?()
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 57 def reloadable? @jwk_loader end
resolve_key(kid)
click to toggle source
# File lib/jwt/jwk/key_finder.rb, line 25 def resolve_key(kid) jwk = find_key(kid) return jwk if jwk if reloadable? load_keys(invalidate: true) return find_key(kid) end nil end