像 Stack Overflow 一样的 OpenID

Posted

技术标签:

【中文标题】像 Stack Overflow 一样的 OpenID【英文标题】:OpenID like Stack Overflow 【发布时间】:2011-02-14 07:05:46 【问题描述】:

我想用 php 创建一个 OpenID 登录,就像在 Stack Overflow 上一样。

我知道对此有很多问题,但我的问题不同。

如果我理解正确的话,每个 OpenID 都是由一个唯一的 URL 定义的。但是:如果我点击 Stack Overflow 登录页面上的 Google 按钮,则会在文本字段中插入一个通用 URL。这是 OpenID 服务器的直接 URL 吗?如果是,我该如何将 URL 传递给this class?

【问题讨论】:

那个谷歌 URL 被称为“OP 标识符”,是的,它是启动谷歌登录的标识符。至于 PHP 是如何工作的,我不知道。 :) 【参考方案1】:

在 OpenID 规范 (section 7.3.1) 中说

为了发出 OpenID 身份验证请求,输入 OP 标识符时,值“http://specs.openid.net/auth/2.0/identifier_select”必须同时用作声明的标识符和 OP 本地标识符。

现在这基本上意味着,您可以使用通用 URL 并简单地指定身份提供者应在返回中提供用户的实际 OpenID URL,而不是使用“用户特定的 OpenID URL”。

请注意,这是 OpenID 2.0 的一项功能!很多库仍然是 OpenID 1.x

HTH

【讨论】:

【参考方案2】:

您无法使用 SimpleOpenID 向 Google 进行身份验证。该库仅支持 OpenID 1.1,而 Google 仅支持 OpenID 2.0。

【讨论】:

【参考方案3】:

与 SimpleOpenID 不适用于谷歌的其他答案一起使用。我最近在一个项目中使用了http://gitorious.org/lightopenid,它确实有效(并包括一个谷歌示例)。

该库在启用完整错误/警告的 php5 中运行良好。

【讨论】:

【参考方案4】:

OpenID 过程由几个步骤组成。首先是将浏览器重定向到 OpenID 提供者,然后用户返回您的页面,您会获得一些关于他的信息。

返回的信息中,提供了他的OpenID。这是您要查找的 OpenID,而不是用户在您的文本字段中写入的那个。

这个“OpenID”仅用于发现身份提供者,仅此而已。这就是您可以简单地将yahoo.com 放入 OpenID 框中并可以使用 yahoo 登录的原因。

【讨论】:

以上是关于像 Stack Overflow 一样的 OpenID的主要内容,如果未能解决你的问题,请参考以下文章

自动完成标签,如 Stack Overflow [重复]

为什么你的程序总是 stack overflow?

Stack overflow错误的一个原因

QFile.open() 在上下文管理方面是不是像 Python 的 open() 一样?

如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误

Stack Overflow 2016最新架构探秘