7

我今天刚刚使用了 Google API,以允许我们网站的一些用户将视频上传到我们自己组织的 YouTube 帐户。我不希望我们的用户知道我们的用户名和密码,而是让他们选择是否要将视频上传到 youtube。如果他们选择这样做,他们会选中一个复选框并点击提交按钮。

我一直在开发人员指南中反复看到 ClientLogin 对我来说似乎是实现我想要做的最佳选择,但对于 Web 应用程序中的用户身份验证来说并不是一个好主意。“Web 应用程序的 AuthSub”似乎不是我想要实现的最佳机制!

关于做什么的任何想法?

谢谢

4

3 回答 3

3

在使用了 google API 和其他视频服务提供商 API 之后,我学到了很多关于身份验证的知识。oAuth 和 AuthSub 是谷歌用来向用户帐户验证第三方 Web 应用程序的两种方法。

这个过程起初可能看起来很混乱,但一旦你理解它,它就不会太糟糕。下图显示了 AuthSub 过程。

替代文字

  1. 当 Web 应用程序需要访问用户的 Google 服务时,它会对 Google 的授权代理服务进行 AuthSub 调用。
  2. 授权服务通过提供访问请求页面进行响应。这个由 Google 管理的页面会提示用户授予/拒绝访问其 Google 服务的权限。可能首先要求用户登录他们的帐户。
  3. 用户决定是授予还是拒绝对 Web 应用程序的访问。如果用户拒绝访问,他们将被定向到 Google 页面,而不是返回 Web 应用程序。
  4. 如果用户授予访问权限,授权服务会将用户重定向回 Web 应用程序。重定向包含一个适合一种用途的授权令牌;它可以兑换成长期存在的代币。
  5. Web 应用程序通过请求联系 Google 服务,使用授权令牌充当用户的代理。
  6. 如果 Google 服务识别出令牌,它会提供请求的数据。

http://code.google.com/apis/accounts/docs/AuthSub.html#AuthProcess

当您请求进行身份验证并且用户登录到他/她的 google 帐户时,在他/她授予您的应用程序在其帐户中执行操作的权限之前,如果您的域尚未在 google 注册,用户将获得一个讨厌的红色框告诉他们要小心,因为他们将要访问的应用程序没有向他们注册。

这些方法相对于旧式用户名和密码的优势(在我看来)如下:

  1. 增强用户的安全性:用户不必向您提供他们的用户名和密码,他们必须登录到 google,您将获得一个访问令牌,您将使用该令牌进行任何进一步的 API 调用。如果他们愿意,用户可以从谷歌内部撤销对您的应用程序的访问。
  2. 该过程可以向用户保证您的应用程序是“合法的”。如果用户必须通过 google 登录并允许您的应用程序,如果您的域已在 google 注册,它可能看起来不错。
  3. 令牌可以提升为会话令牌:这意味着您不必每次需要请求访问 google 用户帐户时都要求用户登录,只需使用会话令牌(您必须安全地保存在某处)你就完成了。
  4. 一旦你理解了这个过程,验证用户就很简单了。
  5. (未验证)如果用户更改了密码,您不必更新安全令牌。
  6. 最后,如果您使用 oAuth,您可以创建一个界面,以便您在连接到其他 Web 服务(如 Vimeo)时轻松验证用户身份!

综上所述,我想您可以弄清楚为什么使用用户名和密码(这是 ClientLogin 所做的)连接到用户帐户是个坏主意。其他身份验证方法允许您做同样的事情(请求访问)并增加许多优势。

可以在此处找到有关如何使用 AuthSub 对用户进行身份验证的代码,它几乎是即插即用的。只需确保将 $_SESSION['sessionToken'] 保存到更永久的位置,例如数据库。

http://code.google.com/apis/youtube/2.0/developers_guide_php.html#AuthSub_for_Web_Applications

于 2010-03-31T20:50:21.730 回答
2

ClientLogin 不是这里的首选机制,因为您的应用程序被迫为用户处理登录凭据。如果用户的身份需要建立比会话更长的时间,您将被迫存储凭据,这是不理想的 - 您的服务器的妥协会导致谷歌用户的妥协。因此,ClientLogin 不是您的应用程序的正确方法。

你看过谷歌 OAuth吗?它非常优雅地解决了密码处理问题,并且是一个既定标准。

于 2010-07-09T18:13:27.347 回答
0

我遇到了同样的问题,最后我使用了 ClientLogin。如果您不希望您的用户看到登录过程的任何部分,则可以这样做。

我不知道使用 AuthSub 或其他身份验证方法是否有更好的方法。

于 2010-02-09T19:17:07.533 回答