Class: Himari::IdToken

Inherits:
Object
  • Object
show all
Defined in:
lib/himari/id_token.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(claims:, client_id:, nonce:, signing_key:, issuer:, access_token: nil, time: Time.now) ⇒ IdToken

Returns a new instance of IdToken.



18
19
20
21
22
23
24
25
26
# File 'lib/himari/id_token.rb', line 18

def initialize(claims:, client_id:, nonce:, signing_key:, issuer:, access_token: nil, time: Time.now)
  @claims = claims
  @client_id = client_id
  @nonce = nonce
  @signing_key = signing_key
  @issuer = issuer
  @access_token = access_token
  @time = time
end

Instance Attribute Details

#claimsObject (readonly)

Returns the value of attribute claims.



28
29
30
# File 'lib/himari/id_token.rb', line 28

def claims
  @claims
end

#nonceObject (readonly)

Returns the value of attribute nonce.



28
29
30
# File 'lib/himari/id_token.rb', line 28

def nonce
  @nonce
end

#signing_keyObject (readonly)

Returns the value of attribute signing_key.



28
29
30
# File 'lib/himari/id_token.rb', line 28

def signing_key
  @signing_key
end

Class Method Details

.from_authz(authz, **kwargs) ⇒ Object

Parameters:



9
10
11
12
13
14
15
16
# File 'lib/himari/id_token.rb', line 9

def self.from_authz(authz, **kwargs)
  new(
    claims: authz.claims,
    client_id: authz.client_id,
    nonce: authz.nonce,
    **kwargs
  )
end

Instance Method Details

#at_hashObject



45
46
47
48
49
# File 'lib/himari/id_token.rb', line 45

def at_hash
  return nil unless @access_token
  dgst = @signing_key.hash_function.digest(@access_token)
  Base64.urlsafe_encode64(dgst[0, dgst.size/2], padding: false)
end

#final_claimsObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/himari/id_token.rb', line 30

def final_claims
  # https://openid.net/specs/openid-connect-core-1_0.html#IDToken
  claims.merge(
    iss: @issuer,
    aud: @client_id,
    iat: @time.to_i,
    nbf: @time.to_i,
    exp: (@time + 3600).to_i, # TODO: lifetime
  ).merge(
    @nonce ? { nonce: @nonce } : {}
  ).merge(
    @access_token ? { at_hash: at_hash } : {}
  )
end

#to_jwtObject



51
52
53
54
55
# File 'lib/himari/id_token.rb', line 51

def to_jwt
  jwt = JSON::JWT.new(final_claims)
  jwt.kid = @signing_key.id
  jwt.sign(@signing_key.pkey, @signing_key.alg.to_sym).to_s
end