{"record":{"id":"d3e34bd984bb18b9","repo":"CanineHQ/canine","slug":"failed-to-fetch-jwks-from-jwks-uri","errorCode":null,"errorMessage":"Failed to fetch JWKS from #{jwks_uri}","messagePattern":"Failed to fetch JWKS from #(.+?)","errorType":"exception","errorClass":"JWT::DecodeError","httpStatus":null,"severity":"error","filePath":"app/services/oidc/authenticator.rb","lineNumber":123,"sourceCode":"        iss: config.issuer,\n        aud: config.client_id,\n        verify_iss: true,\n        verify_aud: true\n      })\n      decoded.first\n    rescue JWT::DecodeError => e\n      @logger.error \"OIDC auth: JWT decode error - #{e.message}\"\n      Result.new(success?: false, error_message: \"Invalid token: #{e.message}\")\n    end\n\n    def fetch_jwks\n      return @jwks_cache if @jwks_cache\n\n      jwks_uri = config.jwks_uri.presence || discover_endpoint(\"jwks_uri\")\n      response = HTTP.get(jwks_uri)\n\n      unless response.status.success?\n        raise JWT::DecodeError, \"Failed to fetch JWKS from #{jwks_uri}\"\n      end\n\n      @jwks_cache = JWT::JWK::Set.new(JSON.parse(response.body.to_s))\n    end\n\n    def fetch_userinfo(access_token)\n      userinfo_endpoint = config.userinfo_endpoint.presence || discover_endpoint(\"userinfo_endpoint\")\n\n      response = HTTP.auth(\"Bearer #{access_token}\").get(userinfo_endpoint)\n\n      unless response.status.success?\n        return Result.new(success?: false, error_message: \"Failed to fetch user info\")\n      end\n\n      JSON.parse(response.body.to_s)\n    rescue => e\n      Result.new(success?: false, error_message: \"Failed to fetch user info: #{e.message}\")\n    end","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/CanineHQ/canine/blob/ba4ee3968d8513ee27d8583fbd3e854a8dd053f3/app/services/oidc/authenticator.rb#L105-L141","documentation":"Error \"Failed to fetch JWKS from #{jwks_uri}\" thrown in CanineHQ/canine.","triggerScenarios":"Thrown at app/services/oidc/authenticator.rb:123 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"ba4ee3968d8513ee27d8583fbd3e854a8dd053f3","analyzedAt":"2026-08-23T17:49:27.834Z","schemaVersion":2},"datasetVersion":"2026-08-23T21:17:23.414Z"}