【问题标题】:Use Oauth 2.0 in google app engine with java在带有 java 的谷歌应用引擎中使用 Oauth 2.0
【发布时间】:2014-12-19 02:32:19
【问题描述】:

我想将 Oauth 2 用于带有 Java 的 Google App Engine 中的应用程序,但我没有找到任何很好的使用示例,如果有人可以帮助我,我将非常感激,这很令人沮丧,找不到好的例子,谢谢。

【问题讨论】:

    标签: google-app-engine oauth-2.0


    【解决方案1】:

    我的 2c 是避免使用 oauth2 库。当然,意见可能会有所不同,但对我来说,它们提供了非常有漏洞的抽象,所以你最终会被后门拖到理解 oauth 中。至少对我来说,花一个小时阅读告诉你所有你需要知道的两页,并小心避免所有其他的,会让你到达你想去的地方。

    简单来说,步骤是:-

    1. 使用您的应用程序/客户端 ID 和您需要的范围调用身份验证 URL。包括“电子邮件”范围。

    2. Google 将引导用户完成登录和(如果是第一次)授权对话

    3. 最终浏览器会重定向回你的 oauthcallback url,并给你一个授权码
    4. 调用 google 将验证码转换为刷新令牌。这还将返回用户的 google ID 和访问令牌。
    5. 将用户 ID 存储在会话中,以便随后识别用户
    6. 将刷新令牌与 google 用户 ID 一起保存在数据库中

    在随后的访问中...

    1. 如果您的会话中有 google 用户 ID,则可以从数据库中检索刷新令牌,并根据需要使用它生成访问令牌。
    2. 如果您的会话中没有 google 用户 ID,请执行上述步骤。这一次,谷歌不会提示用户授权(因为它已经被授权了),并且刷新令牌将是空白的(因为你已经存储了一个)。

    您需要知道的一切都在 oauth 游乐场页面中。如果您单击这些按钮,您将看到它正在按照我上面概述的步骤进行操作。

    然后您需要处理可能的错误情况,例如

    • 用户拒绝权限
    • 用户撤销权限
    • google 刷新令牌已过期(经常发生),因此您需要重新验证
    • 超时

    您需要阅读的两页是:- https://developers.google.com/accounts/docs/OAuth2WebServerhttps://developers.google.com/oauthplayground/ 的 oauth 操场

    相信我,只要您知道如何形成 URL、存储刷新令牌(它只是一个字符串)并解析 JSON 响应,那么您需要的一切都在这些页面上。除了...

    所有文档都跳过了在会话中保留用户 ID 的需要,这样您就知道是谁在访问您的应用程序。如果您使用的是 AppEngine,您可能会对使用单独的 appengine 登录的 appengine 示例代码感到困惑。忽略它。您将使用 oauth 对用户进行身份验证,因此 appengine 的内容不适用并且有些混乱。

    它实际上比某些文档让您相信的要简单得多,就像我说的,恕我直言,泄漏的库没有帮助。

    【讨论】:

    • 你的解释很酷,总的来说我在理解 OAuth 的流程方面有问题,我会尝试按照你的建议,我被这个卡住了,我希望最终能得到一些东西,谢谢。
    • 伟大的总结@pinoyyid。您对如何使用更新的 oauth 流程处理用户登录/注销有什么建议吗?我的应用目前使用 UserService 和 OpenId。我已经实现并运行了 OAuth2 工作流程,但我正在研究如何最好地处理用户状态。谢谢!
    • @djpark 首先确定您所说的注销是什么意思。您的意思是(a)终止与您的应用程序的会话,但让用户登录到谷歌,或者(b)退出谷歌。对于 (a),只需从会话对象中删除用户 ID(或您正在跟踪的任何内容)。对于 (b) 执行此操作并调用 google 注销 url。对于这两种情况,您可能应该显示某种模式,向用户解释即将发生的事情。
    • @pinoyyid 谢谢。我感到困惑的原因是,除了从会话中添加/删除用户之外,我的应用程序目前使用 AppEngine UserService API 通过调用 createLoginURL() 和 createLogoutURL() 来登录/注销用户。这使我能够使用 getCurrentUser()、isUserAdmin() 等服务,并且我试图弄清楚如何使用新的 oauth2 流来模拟它。我错过了一些明显的东西吗?这可能值得开始它自己的问题......
    【解决方案2】:

    我正在尝试做完全相同的事情,我同意 - 很难找到一个好的例子。

    我确实找到了这个 youtube 视频,我认为它会有所帮助:https://www.youtube.com/watch?v=tVIIgcIqoPw

    它来自 Google,它被称为 Google API 入门。视频的最后一段涉及身份验证。

    【讨论】:

      【解决方案3】:

      此页面上列出了几个用于 Java 的 OAuth 2 客户端和服务器库:http://oauth.net/2/

      这里是使用 Apache Otlu 的快速入门文档:https://cwiki.apache.org/confluence/display/OLTU/OAuth+2.0+Client+Quickstart

      如果您正在访问 Google API(作为客户端),则可以使用适用于 Java 的 Google 客户端库,该库执行 OAuth 以及 API 设置:https://code.google.com/p/google-api-java-client/

      【讨论】:

      • 感谢您的回复,我尝试使用示例 samples.google-api-java-client.googlecode.com/hg/… 但我不能,我将尝试基于其他示例构建我自己的示例,我坚持认为有没有关于如何使用 App Engine for Java 安装 OAuth 2 的初学者示例,我希望我可以制作一个用于分享,谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2015-05-16
      • 1970-01-01
      相关资源
      最近更新 更多