【问题标题】:Can I use an OAuth token from backend in my frontend?我可以在前端使用来自后端的 OAuth 令牌吗?
【发布时间】:2014-02-27 01:57:59
【问题描述】:

我刚刚浏览了Java中Google's DrEdit sample app的描述(source code)。它展示了如何编写一个简单的云端硬盘应用并在后端处理授权。

这是一个很好的例子,但我注意到的最大缺点是当用户想要从他的云端硬盘中选择一个文件时需要再次登录(尽管之前授权该应用这样做)。这很不方便,所以我想避免这种情况。选择文件是使用 Google Picker API 完成的,该 API 仅在 Javascript 中可用。

因此,我想在我的后端和前端之间共享授权信息 - 我可以将我在后端拥有的 OAuth 令牌传递给前端吗?如果是这样,有推荐的方法吗?

【问题讨论】:

    标签: java javascript google-drive-api google-oauth


    【解决方案1】:

    是的,完全没问题。 @tydotg 所描述的在客户端窥探并不是真正的问题,因为访问令牌同样是可窥探的,无论它是在客户端还是在服务器上生成的。

    唯一真正的挑战是确保您只将令牌下载给经过正确身份验证的用户。您可以使用多种方案来执行此操作,例如:-

    1. 用户使用基于服务器的 OAuth 对您的应用进行身份验证。
    2. 服务器将用户 ID 或电子邮件存储在会话变量中
    3. 当您的客户端请求令牌时,您使用会话用户生成令牌

    【讨论】:

    • 好吧,这就是我的怀疑,谢谢。只是为了确保我明白了:当我发现我的前端没有有效的令牌时,我调用后端,它要么返回一个有效的令牌,要么请求一个新的令牌,然后将它返回给前端?
    • 是的。请注意过期的会话
    【解决方案2】:

    我相信你可以(我不太熟悉 Java,但在 Rails 中,例如,这很容易),但你不想这样做的原因是出于安全考虑。

    服务器端的任何东西都非常安全,客户端无法访问。然而,客户端上的任何东西都是公平的游戏。我可以检查元素,如果我知道我在寻找什么,我可以获取 OAuth 令牌。

    【讨论】:

      【解决方案3】:

      使用交叉身份来实现这一点:

      https://developers.google.com/accounts/docs/CrossClientAuth

      【讨论】:

      • 我读过它,我的理解是:我应该在我的前端和后端实现 OAuth 流程,如果应用程序已经被授权,它将获得一个访问令牌而不提示用户。对吗?
      • 在我的场景中,用户必须始终首先在后端进行授权,所以 pinoyyid 的答案就是我正在寻找的答案。但这是一个很好的选择。不过,它的缺点是弹出窗口的显示时间很短。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2020-11-15
      • 1970-01-01
      相关资源
      最近更新 更多