Class: AzureJwtAuth::JwtManager

Inherits:
Object
  • Object
show all
Defined in:
lib/azure_jwt_auth/jwt_manager.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request, provider_id) ⇒ JwtManager

Returns a new instance of JwtManager.



20
21
22
23
24
25
26
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 20

def initialize(request, provider_id)
  raise NotAuthorizationHeader unless request.env['HTTP_AUTHORIZATION']
  raise ProviderNotFound unless (@provider = self.class.find_provider(provider_id))

  @jwt = request.env['HTTP_AUTHORIZATION'].split.last # remove Bearer
  @jwt_info = JWT.decode(@jwt, nil, false)
end

Class Attribute Details

.providersObject (readonly)

Returns the value of attribute providers.



7
8
9
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 7

def providers
  @providers
end

Class Method Details

.find_provider(uid) ⇒ Object



14
15
16
17
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 14

def find_provider(uid)
  return unless @providers
  @providers[uid]
end

.load_provider(uid, config_uri, validations = {}) ⇒ Object



9
10
11
12
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 9

def load_provider(uid, config_uri, validations={})
  @providers ||= {}
  @providers[uid] = Provider.new(uid, config_uri, validations)
end

Instance Method Details

#custom_valid?Boolean

Check custom validations defined into provider

Returns:

  • (Boolean)


43
44
45
46
47
48
49
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 43

def custom_valid?
  @provider.validations.each do |key, value|
    return false unless payload[key] == value
  end

  true
end

#headerObject



32
33
34
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 32

def header
  @jwt_info ? @jwt_info.last : nil
end

#iss_valid?Boolean

Validates issuer

Returns:

  • (Boolean)


37
38
39
40
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 37

def iss_valid?
  payload['iss'] == @provider.config['issuer'] || # b2c
    (payload['tid'] && @provider.config['issuer'] =~ /#{payload['tid']}/) # ac
end

#payloadObject



28
29
30
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 28

def payload
  @jwt_info ? @jwt_info.first : nil
end

#valid?Boolean

Validates the payload hash for expiration and meta claims

Returns:

  • (Boolean)


52
53
54
# File 'lib/azure_jwt_auth/jwt_manager.rb', line 52

def valid?
  payload && iss_valid? && custom_valid? && rsa_decode
end