使用googleauth gem在Ruby中验证Google OAuth 2访问令牌

68bkxrlz  于 2023-03-12  发布在  Ruby
关注(0)|答案(2)|浏览(135)

我有一个前端React应用程序,它使用API的数据。该应用程序使用Sign in with Google。每次向API发出请求时,它在Authorization头中包含了从Google接收到的访问令牌,这就是我遇到的问题。我想在Rails控制器中验证before_action中的令牌。所有迹象都表明googleauth gem是实现这一点的方法,但我不知道如何实现,文档也很少。

def validate_access_token
  access_token = request.headers['Authorization']&.gsub(/bearer /i, '')
  key_source = Google::Auth::IDTokens::HttpKeySource.new('https://www.googleapis.com/oauth2/v3/certs')
  verifier = Google::Auth::IDTokens::Verifier.new(key_source:)
  verifier.verify(access_token)
rescue Google::Auth::IDTokens::VerificationError => e
  # Handle error and return unauthorized response
end

我已经在几个我知道有效的令牌上测试过了,它引发了签名错误,说这个令牌不能被验证为是Google发布的。可能我用错了密钥源,但我不知道该用什么,因为Ruby的文档也不存在。
我使用的是googleauth gem 1.3.0版本,我也尝试过使用法拉第联系Google的tokeninfo端点,得到了类似的结果,我不知道为什么它会说我的令牌无效,而我刚刚直接从Google获得令牌。

eoigrqb6

eoigrqb61#

初始化Google::Auth::IDTokens::Verifier时是否为key_source提供了任何值?
尝试

verifier = Google::Auth::IDTokens::Verifier.new(key_source: Google::Auth::IDTokens::JwkVerifier::DEFAULT_CERT_URI)
verifier.verify(token)
dxpyg8gm

dxpyg8gm2#

我意识到不知何故我使用了错误的密钥来验证访问令牌,所以进一步的调查使我看到了这篇博客文章:https://mpierrax.medium.com/firebase-authentification-with-ruby-on-rails-backend-a9f7afc4d715
这里的解决方案是确保我使用了正确的键值,一旦我这样做了,就使用法拉第(任何HTTP客户机都可以工作)直接联系验证API端点。

相关问题