我有一个前端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获得令牌。
2条答案
按热度按时间eoigrqb61#
初始化
Google::Auth::IDTokens::Verifier
时是否为key_source
提供了任何值?尝试
dxpyg8gm2#
我意识到不知何故我使用了错误的密钥来验证访问令牌,所以进一步的调查使我看到了这篇博客文章:https://mpierrax.medium.com/firebase-authentification-with-ruby-on-rails-backend-a9f7afc4d715
这里的解决方案是确保我使用了正确的键值,一旦我这样做了,就使用法拉第(任何HTTP客户机都可以工作)直接联系验证API端点。