Ruby on rails 验证google令牌真实性时未获取所有配置文件信息
我正在客户端使用omniauth与google帐户连接。一切都很好,我能够得到id_令牌和一些更多的信息,如电子邮件、姓名、姓氏、姓名等 下面是我在app/config/initializer/omniauth.rb中配置提供程序的方式:Ruby on rails 验证google令牌真实性时未获取所有配置文件信息,ruby-on-rails,google-api,omniauth,google-signin,Ruby On Rails,Google Api,Omniauth,Google Signin,我正在客户端使用omniauth与google帐户连接。一切都很好,我能够得到id_令牌和一些更多的信息,如电子邮件、姓名、姓氏、姓名等 下面是我在app/config/initializer/omniauth.rb中配置提供程序的方式: provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email" 然后,作为测试,为了验证id_令牌的真实性,我使用Postman发送了一个POST
provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email"
然后,作为测试,为了验证id_令牌的真实性,我使用Postman发送了一个POST请求,例如:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=x
用我在客户机上得到的id_令牌替换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"
}
当我与我的客户连接时,我允许应用程序访问我的个人资料信息和电子邮件,我一直在遵循这本图图:
谁说:
// 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_令牌。
我能够在客户端获得这些信息,但我认为这不是客户端的工作,不能将这些额外信息发送到我的API,对吗?由于您使用ruby进行此操作,因此我建议尝试以下两种方法
令牌调用不包括配置文件信息。。。您可以使用:
您没有得到的5个字段是什么?你可以发布参数散列吗?我没有“姓名”、“图片”、“给定姓名”、“姓氏”和“区域设置”。我不确定我是否理解您的要求,没有参数散列,我提供的唯一参数是“id_token”我是否正确理解您的问题您可以在浏览器上获取配置文件信息,但不能使用OmniAuth库在服务器端获取配置文件信息。如果是这样,如何配置API端点以使用OAuth?我不熟悉OmniAuth,我说的是API,但问题不在这里,我还没有编写这个特性的服务器端部分。只要id_令牌的验证不起作用,我就不会写它。但是客户端的OmniAuth可能有问题,我在app/config/initializer/OmniAuth.rb中设置了提供程序。它似乎没有考虑“profile”范围。客户端是如何工作的?你在使用谷歌登录库吗?谢谢你的回答,但我刚刚尝试了你的两个建议,结果还是一样的:/