13

我不创建大型网站,所以我主要是 openid 的用户,它是各种实现。我在 SO 中使用 openid,我喜欢它,因为我将我的 gmail 帐户用于所有事情(我计划将来退出 gmail,但现在我将它用于所有事情),所以我不必记住另一个登录名/帐户。

所以,在我天真的用户心目中,我认为使用 openid 很简单:您有很多提供者,当用户尝试登录时,您的应用程序会询问他/她的提供者:“这个人能够登录吗?”,提供者返回“这个用户是有效的”有一些数据(有些可能会返回比其他更多的数据),或者如果登录不成功,则不返回任何内容。

我打算在未来的网站中使用 openid。在我看来,我想我会使用某种可以为我“抽象”的库:您的用户使用提供商登录,您的应用程序不知道每个提供商,并且该库从用户名返回一个唯一标识符提供者。例如:myemail@gmail.com 用于登录。它在库中有一个唯一的 id,在哈希计算或其他东西之后返回,你的应用程序将它用于所有事情。

在我的应用程序中,我会尝试只处理由 openid libm taht 创建的这个 id,它将处理 facebook、twitter、gmail 等。也许这个库有一个带有提供者名称的表,当一个人第一次登录你的网站时,你在数据库中有一行说“这个唯一的 id 来自 twitter”。从理论上讲,这似乎在我的脑海中起作用。

...但是在阅读Openid is a Nightmare之后,我开始思考是否真的是一个好主意,即使尝试找到这样一个可以完美运行的库。

由于每个人(openid 提供者)现在都有自己的登录机制,而不是只担心一个系统(我自己的,我要创建自己的登录机制)——现在我不得不担心几​​十个系统——openid 应该解决正是这样。现在,我需要一个巨大的库来抽象这整个混乱。

像我描述的那样的图书馆是否存在?如果是这样,是否有可能创建一个至少尝试表现得像一个真正的“openid”梦想的应用程序?

(我知道 openid 与 facebook auth 等不同......但从最终用户的角度来看,它是相同的恕我直言,“跨网站使用相同的登录”。即使协议不是,我也想抽象登录过程t 只是为了那个。对于很多服务,你只需要知道某人是否是她声称的那个人。)

4

5 回答 5

11

库确实存在(例如DotNetOpenAuth),但这些通常只为您抽象协议和规范 - 您的应用程序仍然必须了解各个提供者(及其怪癖)。

在我看来,OpenId/OpenAuth 的最大问题之一是许多提供商的做法略有不同:其中一些会为您提供您要求的信息,而另一些则不会。其中一些响应 Simpleregistration/Claim,一些响应 AttributeExchange/Fetch。有些使用通用 url 登录,有些则需要包含用户名的 URL。

有许多细微的差异,这使得 OpenId 比它应有的弱很多。理想情况下,它应该是我(作为网站所有者)可以实施的系统,并且我相信我现在支持任何拥有 OpenId 提供商帐户的用户。实际情况完全不同。即使您使用 OpenId 进行身份验证,您也总是需要使用您自己的 id 来跟踪您的用户。

有一些服务,例如RPX/Janrain,声称可以为您处理所有这些杂乱的细节,但我听说即使这样也令人头疼(例如,在您引用的文章中提到了它)。

归根结底,这可能取决于您运行的网站类型。问自己这个(相当愤世嫉俗的)问题 - 如果个人用户无法登录,我有多在意?如果答案是“很多”(因为每个问题都会花费您金钱或引起其他悲伤),那么现在可能忘记 openId。如果它是像 stackoverflow 这样的大众/免费网站,那么它可能是要走的路。


更新

这里有一些提供者实现的比较:http: //spreadopenid.org/provider-comparison/。虽然它不再更新,所以它可能已经过时了。 [目前关闭,可能是永久关闭,但请参阅google 的缓存]

您也许可以通过Wikipedia 的提供者列表找到更多信息

这里还有一个相当全面的供应商比较

于 2010-11-23T12:02:19.583 回答
1

有一些库可以处理所有这些,但这取决于您使用的技术。我在 Django 中使用过django-socialauth,它很棒(支持通过 Twitter、Facebook、Gmail、Yahoo 和 OpenID 进行身份验证)。这里有大量可用的库列表。

于 2010-11-27T02:40:16.277 回答
1

您没有指定编程语言。

对于 Java,您可能需要查看 socialauth: http ://code.google.com/p/socialauth/

于 2010-11-27T20:03:49.017 回答
1

您所描述的更多的是 OAuth 的工作方式,它是 openid 的继任者(松散地使用“继任者”一词——它比 OpenID 获得了更多的牵引力。)对于 ruby​​,有一些可用的实现,尤其是 janrain 的参与产品和最近的 Intridea 的omniauth 库。我用过 Engage 并且喜欢它,但是omniauth 看起来很容易上手,而且它更开放,因为它不依赖于 Janrain 的服务。

于 2010-11-28T04:18:36.237 回答
1

只是为了向这个线程添加另一个资源,HybridAuth 库是上面提到的库的开源 PHP 等效项。据我所知,它是唯一一个涵盖所有流行形式的联合身份验证、OAuth 和 PHP 的 OpenID 的库。与我见过的其他文档和示例相比,文档和示例也相当不错。

我相信这个库仍然有些不成熟,但绝对是朝着为 PHP 开发人员统一身份验证混乱的正确方向迈出的一步。

http://hybridauth.sourceforge.net/index.html

于 2011-06-13T18:24:25.743 回答