Class: ChatSDK::GChat::TokenVerifier

Inherits:
Object
  • Object
show all
Defined in:
lib/chat_sdk/gchat/token_verifier.rb

Constant Summary collapse

EXPECTED_ISSUER =
"chat@system.gserviceaccount.com"

Instance Method Summary collapse

Constructor Details

#initialize(project_number) ⇒ TokenVerifier

Returns a new instance of TokenVerifier.



8
9
10
# File 'lib/chat_sdk/gchat/token_verifier.rb', line 8

def initialize(project_number)
  @project_number = project_number.to_s
end

Instance Method Details

#verify!(token) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/chat_sdk/gchat/token_verifier.rb', line 12

def verify!(token)
  raise ChatSDK::SignatureVerificationError, "Missing bearer token" if token.nil? || token.empty?

  payload = Google::Auth::IDTokens.verify_oidc(
    token,
    aud: @project_number
  )

  issuer = payload["iss"] || payload["email"]
  unless issuer == EXPECTED_ISSUER
    raise ChatSDK::SignatureVerificationError,
      "Unexpected issuer: #{issuer} (expected #{EXPECTED_ISSUER})"
  end

  payload
rescue Google::Auth::IDTokens::VerificationError => e
  raise ChatSDK::SignatureVerificationError, "Google ID token verification failed: #{e.message}"
end