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: Config::DEFAULT_CLOCK_SKEW) ⇒ JwtValidator
constructor
⚠️
clock_skew기본값을 여기 숫자로 적지 말 것 —Config가 유일한 정의 자리다(Task D1과 같은 부류). - #validate(token) ⇒ Object
Constructor Details
#initialize(issuer:, audience:, jwks_store:, algorithms: ["RS256"], clock_skew: Config::DEFAULT_CLOCK_SKEW) ⇒ JwtValidator
⚠️ clock_skew 기본값을 여기 숫자로 적지 말 것 — Config가 유일한 정의 자리다(Task D1과
같은 부류). 이 클래스도 public이라 소비자가 직접 생성할 수 있고, 두 자리가 갈리면 그
경로에서만 만료된 토큰이 더 오래 통과한다.
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 13 def initialize(issuer:, audience:, jwks_store:, algorithms: ["RS256"], clock_skew: Config::DEFAULT_CLOCK_SKEW) # 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.
27 28 29 30 31 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 27 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
33 34 35 36 37 38 |
# File 'lib/keycloak_sdk/jwt_validator.rb', line 33 def validate(token) payload, = JWT.decode(token, nil, true, ) to_validated(payload) rescue JWT::DecodeError => e raise TokenValidationError, "JWT validation failed: #{e.}" end |