我目前正在讨论是否应该在我的某个网站上使用OpenID登录。我可能更难实现OpenID,因为我已经编写了注册和登录代码,但这只是一个时间考虑因素。与传统的网站用户帐户系统相比,使用OpenID有哪些优点和缺点。
答案 0 :(得分:5)
<强>优点强>
你有一个单点登录,实际上非常酷,特别是对于那里有很多帐户的人。
openid服务器提供有关用户的基本信息,无需每次都记下常用的基本信息。从这个意义上讲,您可以节省用户的麻烦。
它很好地增强了传统的用户/传递机制。有许多网站同时提供这两个系统。
将诚实信任从多方转移到只有一方。目前,我不知道我注册的任何网站是否以明文形式存储我的密码以窃取它并尝试在其他网站上使用它,假设我有相同的密码。
授权的技术优势。您不必被迫使用相同的提供商。你可以切换。
<强>缺点强>
您仍然需要向那些不了解新范例的人提供用户/密码,或者他们没有openid(可能他们拥有它,但他们不知道)。如果你想要解决的是广泛的人群,那么你可能会吓跑他们。
另外,我不会将它用于任何严肃的事情。我不相信我的银行要求我使用我的openid登录,也要求许多电子商务网站登录。对于不重要的事情是可以的。
openid提供商可以跟踪用户的习惯,因为他们收到所有身份验证请求。这就是我部署个人提供商的原因。
最后,就我所见,很多openid服务器都以明文形式移动密码,但这是我的理解,我可能是错的。我部署了自己的openid提供程序,并且我通过https传输了密码,即使我的openid被标记为http
答案 1 :(得分:1)
我看到的主要优点是,虽然不一定适用于您的情况,但如果您想保留现有系统,我不必担心存储密码。
太多人使用相同的密码(或一小组密码)来处理所有事情,所以如果我的网站遭到入侵(我希望我足够熟练以防止这种情况,但安全性是一个多层的野兽,所以任何增加额外安全性的东西在我的书中都很好)然后攻击者无法获取密码。
对于用户来说,他们现在可以合法地只拥有一个密码。他们使用他们信任的OpenID提供商,而不是必须信任任何汤姆迪克或哈利在互联网上的网站。
答案 2 :(得分:1)
以SO为例,它支持两者。我通过OpenID使用我的Google帐户登录,但仍需要一个帐户/用户名才能链接到我的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用户仍然需要拥有一个帐户,他们只是通过第三方进行身份验证。