Class: KeycloakApiRails::Service

Inherits:
Object
  • Object
show all
Defined in:
lib/keycloak-api-rails/service.rb

Instance Method Summary collapse

Constructor Details

#initialize(key_resolver) ⇒ Service

Returns a new instance of Service.



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/keycloak-api-rails/service.rb', line 6

def initialize(key_resolver)
  configuration                          = KeycloakApiRails.config
  @key_resolver                          = key_resolver
  @skip_paths                            = normalize_skip_paths(configuration.skip_paths)
  @opt_in                                = configuration.opt_in
  @token_expiration_tolerance_in_seconds = configuration.token_expiration_tolerance_in_seconds
  @expected_audiences                    = Array(configuration.expected_audience).map(&:to_s)
  @expected_token_type                   = configuration.expected_token_type
  @verify_not_before                     = configuration.verify_not_before
  @allow_token_in_query_string           = configuration.allow_token_in_query_string
end

Instance Method Details

#decode_and_verify(token) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/keycloak-api-rails/service.rb', line 18

def decode_and_verify(token)
  raise TokenError.no_token(token) if token.nil? || token.empty?

  public_keys = @key_resolver.find_public_keys
  
  if public_keys.nil?
    raise MissingPublicKeysError, "No Keycloak public key is available to verify the token" 
  end

  decoded_token = decode(token, public_keys)
  verify_claims!(token, decoded_token)
  decoded_token
end

#need_middleware_authentication?(method, path, headers) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/keycloak-api-rails/service.rb', line 43

def need_middleware_authentication?(method, path, headers)
  !is_preflight?(method, headers) && (!@opt_in && !should_skip?(method, path))
end

#read_token(uri, headers) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/keycloak-api-rails/service.rb', line 32

def read_token(uri, headers)
  header_token = Helper.read_token_from_headers(headers)
  if !header_token.empty?
    header_token
  elsif @allow_token_in_query_string
    Helper.read_token_from_query_string(uri).to_s
  else
    ""
  end
end