Module: Legion::Crypt::KerberosAuth
Defined Under Namespace
Classes: AuthError, GemMissingError
Constant Summary
collapse
- DEFAULT_AUTH_PATH =
'auth/kerberos/login'
Logging::Helper::CompatLogger
Class Attribute Summary collapse
Class Method Summary
collapse
handle_exception, log
Class Attribute Details
.kerberos_principal ⇒ Object
Returns the value of attribute kerberos_principal.
17
18
19
|
# File 'lib/legion/crypt/kerberos_auth.rb', line 17
def kerberos_principal
@kerberos_principal
end
|
Class Method Details
.login(vault_client:, service_principal:, auth_path: DEFAULT_AUTH_PATH) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/legion/crypt/kerberos_auth.rb', line 20
def self.login(vault_client:, service_principal:, auth_path: DEFAULT_AUTH_PATH)
raise GemMissingError, 'lex-kerberos gem is required for Kerberos auth' unless spnego_available?
log.info "KerberosAuth login requested auth_path=#{auth_path}"
log.debug("KerberosAuth: login: SPN=#{service_principal}, auth_path=#{auth_path}")
addr = vault_client.respond_to?(:address) ? vault_client.address : 'n/a'
ns = vault_client.respond_to?(:namespace) ? vault_client.namespace.inspect : 'n/a'
log.debug("KerberosAuth: login: vault_client.address=#{addr}, namespace=#{ns}")
@kerberos_principal = nil
token = obtain_token(service_principal)
log.debug("KerberosAuth: login: SPNEGO token obtained (#{token.length} chars)")
result = exchange_token(vault_client, token, auth_path)
@kerberos_principal = result[:metadata]&.dig('username') || result[:metadata]&.dig(:username)
log.debug("KerberosAuth: login: authenticated as #{@kerberos_principal.inspect}, policies=#{result[:policies].inspect}")
log.debug("KerberosAuth: login: renewable=#{result[:renewable]}, ttl=#{result[:lease_duration]}s")
log.info "KerberosAuth login success principal=#{@kerberos_principal || 'unknown'} auth_path=#{auth_path}"
result
end
|
.reset! ⇒ Object
54
55
56
57
|
# File 'lib/legion/crypt/kerberos_auth.rb', line 54
def self.reset!
@spnego_available = nil
@kerberos_principal = nil
end
|
.spnego_available? ⇒ Boolean
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/legion/crypt/kerberos_auth.rb', line 41
def self.spnego_available?
return @spnego_available unless @spnego_available.nil?
@spnego_available = begin
require 'legion/extensions/kerberos/helpers/spnego'
true
rescue LoadError => e
handle_exception(e, level: :debug, operation: 'crypt.kerberos_auth.spnego_available')
defined?(Legion::Extensions::Kerberos::Helpers::Spnego) ? true : false
end
end
|