Class: OmniauthOidc::JwkHandler
- Inherits:
-
Object
- Object
- OmniauthOidc::JwkHandler
- Defined in:
- lib/omniauth/oidc/jwk_handler.rb
Overview
Handles JWK/JWKS operations for JWT verification
Defined Under Namespace
Classes: KeyWithId
Class Method Summary collapse
-
.find_key(keys, kid = nil) ⇒ Object
Find the right key from JWKS based on kid (key ID).
- .jwk_to_key(jwk_data) ⇒ Object
- .parse_jwks(jwks_data) ⇒ Object
Class Method Details
.find_key(keys, kid = nil) ⇒ Object
Find the right key from JWKS based on kid (key ID)
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/omniauth/oidc/jwk_handler.rb', line 36 def self.find_key(keys, kid = nil) return keys.first&.keypair if kid.nil? || keys.size <= 1 matched = keys.find { |k| k.kid == kid } if matched matched.keypair else OmniauthOidc::Logging.warn("No JWK found matching kid '#{kid}', falling back to first key") keys.first&.keypair end end |
.jwk_to_key(jwk_data) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/omniauth/oidc/jwk_handler.rb', line 26 def self.jwk_to_key(jwk_data) keypair = JWT::JWK.import(jwk_data).keypair kid = jwk_data["kid"] || jwk_data[:kid] KeyWithId.new(kid: kid, keypair: keypair) rescue StandardError => e OmniauthOidc::Logging.error("Failed to import JWK", error: e.) nil end |
.parse_jwks(jwks_data) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/omniauth/oidc/jwk_handler.rb', line 12 def self.parse_jwks(jwks_data) return nil unless jwks_data jwks_data = JSON.parse(jwks_data) if jwks_data.is_a?(String) # Handle JWKS (set of keys) if jwks_data["keys"] jwks_data["keys"].filter_map { |key_data| jwk_to_key(key_data) } # Handle single JWK else [jwk_to_key(jwks_data)].compact end end |