6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'app/services/microsoft_api_service.rb', line 6
def verify_id_token(id_token:)
jwks_url = "https://login.microsoftonline.com/#{TENANT_ID}/discovery/v2.0/keys"
jwks_response = Faraday.get(jwks_url)
raise StandardError, 'Google API request failed' unless jwks_response.success?
jwks = JSON.parse(jwks_response.body)
decoded_token = JWT.decode(
id_token,
nil,
true,
algorithms: ['RS256'],
jwks: jwks
)[0]
raise UnexpectedTokenError, "Token audience doesn't match client id" if decoded_token['aud'] != CLIENT_ID
raise UnexpectedTokenError, 'Issuer has different tenant id' if decoded_token['tid'] != TENANT_ID
raise UnexpectedTokenError, 'Token is expired' if decoded_token['exp'] < Time.now.to_i
decoded_token
end
|