我有一个使用 Google 登录的 Android 应用程序。根据 documentation ,我生成了一个 token ID:
// Configure Google Sign-In with the requestIdToken
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
// Handle result
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
String tokenId = account.getIdToken();
}
}
我在使用 Ruby on Rails 时遇到服务器端的问题。我正在尝试使用 google-id-token gem 。 README 给出了以下示例:
validator = GoogleIDToken::Validator.new(expiry: 1800)
begin
payload = validator.check(token, required_audience, required_client_id)
email = payload['email']
rescue GoogleIDToken::ValidationError => e
report "Cannot validate: #{e}"
end
我有 token
(来自 android java 代码)。什么是required_audience
?我应该使用与我的客户端应用程序相同的 client_id
吗?当我尝试在服务器上运行代码时,我得到的负载为 nil
。
另外,我想知道这是否是验证 token ID 的正确方法。
最佳答案
经过一些研究,我找到了自己问题的答案。他们是:
什么是 required_audience?
可以从解码后的JWT字符串中获取。您可以按如下方式对其进行解码:
JWT.decode(token, nil, false)
我应该使用与客户端应用相同的 client_id 吗?
是的。 required_audience
和 required_client_id
应该相同。否则验证失败
那为什么我得到的负载为 nil
?
问题是,gem in GitHub与 RubyGems 中的不同。我通过将 Gemfile gem 指向 GitHub 解决了这个问题:
gem 'google-id-token', git: 'https://github.com/google/google-id-token.git'
关于ruby-on-rails - 如何在 Ruby on Rails 服务器上验证从 Android 发送的 Google token ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262755/