在验证Google令牌真实性时未获取所有配置文件信息

时间:2016-03-04 12:15:16

标签: ruby-on-rails google-api omniauth google-signin

我在客户端使用omniauth连接谷歌帐户。一切都运行良好,我能够获得id_token和更多信息,如电子邮件,姓名,family_name,given_name等......

以下是我在app / config / initializer / omniauth.rb中配置提供程序的方法:

provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email"

然后,作为测试,验证id_token的真实性,使用Postman我发送一个POST请求,如:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=x

用我在客户端上的id_token替换x

我得到了一个有效的答案,例如:

{
  "iss": "accounts.google.com",
  "at_hash": "xxx-xxx",
  "aud": "xxx-xxx.apps.googleusercontent.com",
  "sub": "xxx",
  "email_verified": "true",
  "azp": "xxx-xxx.apps.googleusercontent.com",
  "email": "xxx@gmail.com",
  "iat": "xxx",
  "exp": "xxx",
  "alg": "xxx",
  "kid": "xxx"
}

当我与客户端连接时,我允许应用程序访问我的个人资料信息和我的电子邮件,我一直在关注这个tuto:

https://developers.google.com/identity/sign-in/web/backend-auth

谁说:

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"

我无法弄清楚为什么我无法获得最后5个字段

我正在开发一个API,我希望我的API只能通过获取id_token来自行填充用户模型。 我能够在客户端获取这些信息,但我认为将这些额外信息发送到我的API不是客户端工作吗?

2 个答案:

答案 0 :(得分:1)

令牌调用不包含个人资料信息......您可以使用:

https://www.googleapis.com/plus/v1/people/me/openIdConnect?access_token=YOUR_ACCESS_TOKEN

答案 1 :(得分:0)

由于你使用ruby进行此操作,我可以建议尝试两件事

  1. 尝试将您的范围添加为数组["个人资料","电子邮件"]
  2. here
  3. 添加额外参数fetch_basic_profile