2009-07-20 151 views
6

我目前正在辩论是否应该为我的某个网站使用OpenID登录。 OpenID对我来说可能比较难实现,因为我已经编写了注册和登录代码,但这只是时间考虑。与传统的网站用户帐户系统相比,使用OpenID有哪些优点和缺点。使用OpenID的优点和缺点是什么?

回答

5

优势

你有一个单点登录这实际上是很酷,特别是在这里和那里有很多账户的人。

openid服务器提供了有关用户的基本信息,每次都可以记录通常的基本信息。从这个意义上说,您可以将麻烦保存到您的用户。

它很好地增强了传统的用户/传递机制。有许多网站同时提供两个系统。

将诚信的信任从多方移到只有一方。目前,我不知道我注册的任何网站是否以明文形式存储了我的密码,以窃取密码并尝试在其他网站上使用密码,前提是我拥有​​相同的密码。

委派的技术优势。你不会被迫使用同一个提供者。你可以切换。

缺点

您还必须对那些谁不明白的新范式提供用户名/密码或他们没有一个OpenID(也许他们有它,但他们不知道) 。如果它是你想要解决的广泛的人,那么你可以把它们吓跑。

此外,我不会用它来认真对待任何事情。我不相信我的银行要求我用我的openid登录,而且还有很多电子商务网站。不重要的事情可以。

openid提供商可以跟踪用户的习惯,因为他们收到所有的认证请求。这就是我部署个人提供商的原因。

最后,据我所见,许多openid服务器以明文形式移动密码,但这是我的理解,我可能是错的。我部署了我自己的openid提供商,并且我花了很大功夫,以便通过https传输密码,即使我的openid被标记为http

1

我看到的主要优势,尽管不一定适用于您的情况希望保留现有的系统,是我不必担心存储密码。

太多人对所有的东西都使用相同的密码(或一小组密码),所以如果我的网站被泄露了(我希望我足够熟练以防止这种情况发生,但安全性是一个多层野兽,所以任何增加额外安全性的东西在我的书中都是很好的),那么攻击者就无法获得密码。

对于用户,他们现在可以合法地拥有一切的密码。他们使用他们信任的OpenID提供商,而不必信任任何汤姆迪克或在互联网上通过网站哈利。

1

以SO为例,它支持两者。我使用我的Google帐户通过OpenID登录,但我仍然需要一个帐户/用户名来链接到我的OpenID。我假设您只允许通过OpenID登录,但不允许您的用户使用您的网站作为OpenID服务器登录。

所以清理一下;您可以使用大量的登录/注销代码,您将需要它,因为唯一的区别是您通过第三方而不是您自己的数据库进行身份验证。在伪代码想象:

authenticate_from_db(String username, String password) 
{ 
     fetch username and password where username = username 
     if username = username and password = hash_of(password) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 

authenticate_from_openid(String openId_provider) 
{ 
    provider = contact_openID_provider(openID_provider) 
    if(provider) 
    { 
     login.username = map(returned_user, your_db) 
     return true 
    } 
    else 
    { 
     return false; 
    } 
} 

所以你看,主要是认证过程改变,而你自己的仍然使用。

的优点是相当清楚的:

  • 允许用户通过自己的OpenID提供商的现有帐户登录。

    • 敌对的OpenID提供商(?垃圾邮件)验证自己的反垃圾邮件插件等
    • 其他安全:
    • 现有用户可以通过自己的OpenID提供商

    缺点是(我能想象)任选登录通过允许第三方验证您的用户的担忧


我想强调,支持OpenID不应该改变任何东西为您的现有用户。

OpenID用户仍然需要有一个帐户,他们只是通过第三方进行身份验证。

+0

的确,OpenID形成了认证元素(他们是谁)。您的应用程序中的用户帐户定义了授权元素(他们可以做什么)。 – 2009-07-20 01:33:07

相关问题