验证从客户端发送的Google Plus Oauth 2访问令牌以验证服务器上的用户是否安全


Is it safe to validate a Google Plus Oauth 2 access token sent from client to authenticate a user on server?

我想使用Google Plus登录在iOS应用程序中验证我的用户。我遵循了上描述的iOS指南https://developers.google.com/+/功能/登录。客户端上的登录与Google+平台完美配合。我不知道如何在服务器端验证用户。

我已经看到客户端上的访问令牌可以在某种程度上在https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=XYZ123.通过验证用户通过HTTPS发送的访问令牌来对客户端进行身份验证是否安全?

在客户端上使用Google+登录按钮时,是否有更好的解决方案?据我所知,谷歌建议使用Google+登录按钮:

Google+登录按钮是用户注册和登录您的应用程序的一种简单方式。这可以让你知道他们在Google+上是谁,并为你的应用程序建立更个性化的体验,而无需创建另一个用户名和密码

简短回答:是。在iOS上,这是目前最好的方法。重要的是,您的验证通常会检查您想要的内容:

  • 客户端ID是项目中的客户端ID
  • 您只使用访问令牌中的用户ID
  • 令牌未过期

当您调用tokeninfo时,会自动处理到期和其他基本验证。只需确保检查客户端ID,并使用tokeninfo响应中的用户ID来查找本地用户。

{
 "issued_to": "1234.apps.googleusercontent.com",
 "audience": "1234.apps.googleusercontent.com",
 "user_id": "104824858261236811362",
 "scope": "https://www.googleapis.com/auth/plus.login",
 "expires_in": 3584,
 "access_type": "online"
}

这是一个回应的例子。客户端ID是这里的"受众"字段(实际上,也颁发给),user_ID是Google用户ID——这是您应该在数据库中查找的内容,以找到匹配的应用程序用户。

在Android和web上,还有两个其他选项:检索ID令牌(基本上是一种加密签名的令牌,直接包含与使用访问令牌调用tokeninfo返回的信息类似的信息)和检索代码(可用于在服务器端交换访问令牌和ID令牌)。这两者目前在iOS上不可用,因此通过HTTPS传递访问令牌是目前最好的选择。