像 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的主要内容,如果未能解决你的问题,请参考以下文章
QFile.open() 在上下文管理方面是不是像 Python 的 open() 一样?