Class: KeycloakSdk::JwtValidator
- Inherits:
-
Object
- Object
- KeycloakSdk::JwtValidator
- Defined in:
- lib/keycloak_sdk/jwt_validator.rb
Overview
자체강화 JWT 검증기. ruby-jwt의 안전하지 않은 기본값을 전부 오버라이드한다: RS256 핀(none/confusion 구조적 거부)·iss 정확·aud 포함·exp 필수·nbf·클록스큐. 키는 DoS-safe JwksStore로 조회한다(위조 서명은 재조회 미유발). 헤더 alg는 검증 알고리즘 선택에 미사용.
Class Method Summary collapse
-
.from_config(config:, jwks_store:) ⇒ Object
기대 aud는 config.expected_audience(설정 시) — 미설정이면 종전대로 client_id.
Instance Method Summary collapse
-
#initialize(issuer:, audience:, jwks_store:, algorithms: ["RS256"], clock_skew: 30) ⇒ JwtValidator
constructor
A new instance of JwtValidator.
- #validate(token) ⇒ Object
Constructor Details
#initialize(issuer:, audience:, jwks_store:, algorithms: ["RS256"], clock_skew: 30) ⇒ JwtValidator
Returns a new instance of JwtValidator.
10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 10 def initialize(issuer:, audience:, jwks_store:, algorithms: ["RS256"], clock_skew: 30) # ruby-jwt의 verify_iss/verify_aud 빌더는 값이 nil이면 조용히 no-op이 되어 # verify_iss:true/verify_aud:true를 켜도 검사를 건너뛴다 — fail-closed로 방어. raise ConfigError, "issuer is required" if issuer.nil? || issuer.to_s.strip.empty? raise ConfigError, "audience is required" if audience.nil? || audience.to_s.strip.empty? @issuer = issuer @audience = audience @jwks_store = jwks_store @algorithms = algorithms @clock_skew = clock_skew end |
Class Method Details
.from_config(config:, jwks_store:) ⇒ Object
기대 aud는 config.expected_audience(설정 시) — 미설정이면 종전대로 client_id.
24 25 26 27 28 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 24 def self.from_config(config:, jwks_store:) new(issuer: OidcEndpoints.from_config(config).issuer, audience: config.expected_audience || config.client_id, jwks_store: jwks_store, algorithms: config.signature_algorithms, clock_skew: config.clock_skew) end |
Instance Method Details
#validate(token) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 30 def validate(token) payload, = JWT.decode(token, nil, true, ) to_validated(payload) rescue JWT::DecodeError => e raise TokenValidationError, "JWT validation failed: #{e.}" end |