【问题标题】:Google OAuth: App or Server?Google OAuth:应用程序还是服务器?
【发布时间】:2015-06-25 05:23:06
【问题描述】:

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

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

另外,这两种实现各有什么好处?

【问题讨论】:

  • 您需要提供有关您的用例的更多详细信息。

标签: node.js oauth google-oauth passport.js google-authentication


【解决方案1】:

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

这是我用于我的应用程序的工作流程:

  1. 移动应用程序使用 g+ sdk 从 google 获取授权代码,使用包含 Web 应用程序客户端 ID 的范围。这样,服务器就有了与 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 调用服务器路由(与谷歌开发控制台中已安装的应用程序相关联,通常看起来像这样 'urn:ietf:wg:oauth:2.0:oob') .

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

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

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

希望对你有帮助。

【讨论】:

  • 谢谢。让我看一遍,也许我会有更多的问题。 :)
  • 如果您想同时处理原生移动和网络应用程序,您会怎么做?
  • 我写了一篇关于这个的文章:github.com/elcurator/android-google-plus-omniauth-tutorial 如果你的服务器是用 Rails 编写的,也许你可以用它作为你的应用程序的例子。为了同时实现 web 和 Android 身份验证,我会为两者使用相同的回调路由,因为它背后的原理相同。
  • Passport 只能有一种 LocalStrategy 的约束限制了我。我想有单独的本地策略 - 一个用于移动设备,另一个用于网络。我正在使用 nodejs
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2012-01-04
  • 2016-12-23
相关资源
最近更新 更多