Class: ChatSDK::Teams::JwtVerifier
- Inherits:
-
Object
- Object
- ChatSDK::Teams::JwtVerifier
- Defined in:
- lib/chat_sdk/teams/jwt_verifier.rb
Constant Summary collapse
- OPENID_CONFIG_URL =
"https://login.botframework.com/v1/.well-known/openidconfiguration"- JWKS_CACHE_TTL =
1 hour
3600
Instance Method Summary collapse
-
#initialize(app_id:) ⇒ JwtVerifier
constructor
A new instance of JwtVerifier.
- #verify!(token) ⇒ Object
Constructor Details
#initialize(app_id:) ⇒ JwtVerifier
Returns a new instance of JwtVerifier.
9 10 11 12 13 |
# File 'lib/chat_sdk/teams/jwt_verifier.rb', line 9 def initialize(app_id:) @app_id = app_id @jwks_keys = nil @jwks_fetched_at = nil end |
Instance Method Details
#verify!(token) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/chat_sdk/teams/jwt_verifier.rb', line 15 def verify!(token) raise ChatSDK::SignatureVerificationError, "Missing authorization token" if token.nil? || token.empty? jwks = fetch_jwks header = JWT.decode(token, nil, false).last kid = header["kid"] key = jwks.find { |k| k[:kid] == kid } raise ChatSDK::SignatureVerificationError, "Unknown signing key" unless key decoded = JWT.decode( token, key[:key], true, algorithm: header["alg"] || "RS256", aud: @app_id, verify_aud: true ) decoded.first rescue JWT::DecodeError, JWT::VerificationError, JWT::ExpiredSignature, JWT::InvalidAudError => e raise ChatSDK::SignatureVerificationError, "JWT verification failed: #{e.}" end |