为什么在Google API中将ClientLogin用于网络应用是个坏主意?

时间:2010-02-09 02:03:30

标签: login client google-api authentication

我今天刚拿起Google API,允许我们网站的某些用户将视频上传到我们自己的组织YouTube帐户。我不希望我们的用户知道我们的用户名和密码,但如果他们想要将视频上传到youtube,请给他们选择。如果他们选择这样做,他们会勾选复选框并点击提交按钮。

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

关于该怎么做的任何想法?

谢谢

3 个答案:

答案 0 :(得分:3)

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

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

alt text

  1. 当网络应用程序需要访问用户的Google服务时,它会向Google的授权代理服务进行AuthSub调用。
  2. 授权服务通过提供“访问请求”页面进行响应。此Google管理的页面会提示用户授予/拒绝其Google服务的访问权限。可能首先要求用户登录其帐户。
  3. 用户决定是授予还是拒绝访问Web应用程序。如果用户拒绝访问,则会将其定向到Google页面,而不是返回到Web应用程序。
  4. 如果用户授予访问权限,则授权服务会将用户重定向回Web应用程序。重定向包含一次性使用的授权令牌;它可以兑换成长寿令牌。
  5. 网络应用程序通过请求与Google服务联系,使用授权令牌充当用户的代理。
  6. 如果Google服务识别出令牌,则会提供所请求的数据。
  7. http://code.google.com/apis/accounts/docs/AuthSub.html#AuthProcess

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

    这些方法优于旧学校用户名和密码的优点(在我看来)如下:

    1. 增强了用户的安全性:用户无需提供用户名和密码,他们必须登录谷歌,您将获得一个访问令牌,您将用它来进行任何进一步的API调用。如果用户愿意,用户可以撤消对Google应用程序的访问权限。
    2. 此过程可能会让用户确信您的应用是“合法”。如果用户必须通过谷歌登录并允许您的应用,如果您的域名已在谷歌注册,则可能看起来不错。
    3. 可以将令牌提升为会话令牌:这意味着您无需每次需要请求访问Google用户帐户时都要求用户登录,只需使用会话令牌(您必须安全)保存在某个地方)你已经完成了。
    4. 一旦您了解了该过程,就可以非常简单地对用户进行身份验证。
    5. (未验证)如果用户更改了密码,则无需更新安全令牌。
    6. 最后,如果您使用oAuth,您可以创建一个界面,使您可以在连接到其他Web服务(如Vimeo)时轻松验证用户身份!
    7. 所有这些说法我想你可以弄清楚为什么使用用户名和密码(这是ClientLogin所做的)连接到用户帐户是个坏主意。其他身份验证方法允许您执行相同的操作(请求访问)并添加一些优点。

      有关如何使用AuthSub对用户进行身份验证的代码可以在这里找到,它几乎可以播放。只需确保将$ _SESSION ['sessionToken']保存到更永久的位置,例如DB。

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

答案 1 :(得分:2)

ClientLogin不是此处的首选机制,因为您的应用程序被强制处理用户的登录凭据。如果用户的身份需要建立的时间超过一个会话,您将被迫存储凭据,这是不理想的 - 您的服务器的妥协将导致谷歌用户的妥协。因此ClientLogin不适合您的应用程序。

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

答案 2 :(得分:0)

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

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