Class: HasHelpers::ServiceTrust::Signer

Inherits:
Object
  • Object
show all
Defined in:
lib/has_helpers/service_trust/signer.rb

Class Method Summary collapse

Class Method Details

.bearer_header(**opts) ⇒ Object



30
31
32
# File 'lib/has_helpers/service_trust/signer.rb', line 30

def bearer_header(**opts)
  { "Authorization" => "Bearer #{sign(**opts)}" }
end

.sign(audience:, subject: nil, capability: nil, ttl: HasHelpers::ServiceTrust.config.token_ttl) ⇒ Object

Raises:



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/has_helpers/service_trust/signer.rb', line 9

def sign(audience:, subject: nil, capability: nil, ttl: HasHelpers::ServiceTrust.config.token_ttl)
  raise ConfigurationError, "audience is required" if audience.blank?
  raise ConfigurationError, "issuer is required" if config.issuer.blank?

  key = KeyManager.current_signing_key
  now = Time.current.to_i
  payload = {
    iss: config.issuer,
    aud: audience,
    sub: subject,
    iat: now,
    nbf: now,
    exp: now + ttl.to_i,
    jti: SecureRandom.uuid,
    env: config.environment.to_s,
    scope: capability_claim(capability)
  }.compact

  JwtCodec.encode(payload, key.to_openssl, key.kid, alg: key.algorithm)
end