Google OAuth:应用程序还是服务器?

Google OAuth: App or Server?

我想实施 Google OAuth。我有点困惑是在客户端(移动应用程序)端还是在服务器端实现它!!

在客户端实现它意味着在应用程序中传送密钥和秘密(我想避免)。但是,如果我在服务器端进行,回调成功后如何将正确的响应返回给客户端?

此外,这两种实现方式各有什么好处?

如果您正在谈论从本机移动应用程序(而不是 Web 视图)实施 Google+ OAuth 2 身份验证,那么,您需要创建一个已安装的应用程序客户端和一个 Web 应用程序google 控制台中的客户端。第一个用于您的移动应用程序,第二个用于您的服务器。

这是我用于申请的工作流程:

  1. 移动应用程序使用包含 Web 应用程序客户端 ID 的范围从 google 使用 g+ SDK 获取授权代码。这样,服务器就有了连接 google+.

    的权限

    您的范围可能如下所示:

    String LOGIN_SCOPES =
        "https://www.googleapis.com/auth/plus.login " +
        "https://www.googleapis.com/auth/userinfo.email";
    String SCOPES = "oauth2:server:client_id:" + GOOGLE_SERVER_CLIENT_ID + ":api_scope:" + LOGIN_SCOPES;
    
  2. 移动应用程序使用授权代码和正确的重定向 uri 调用服务器路由(与 google 开发控制台中安装的应用程序关联的那个通常看起来像这样 'urn:ietf:wg:oauth:2.0:oob').

  3. 服务器从 google 获取访问令牌,其中包含授权码、秘密 ID、应用程序 ID 和已安装的应用程序重定向 uri(如果您使用 Web 应用程序,它将失败并出现 redirect_uri_mismatch 错误)。

  4. 服务器使用访问令牌做任何它想做的事,创建一个有效的会话并将它作为对请求的响应提供给应用程序。

这样一来,您就不需要在客户端存储任何内容。您仍然需要将授权代码从客户端发送到您的服务器(最好是 https),但此代码只能使用一次,并且会立即被服务器使用。

希望对您有所帮助。