在PHP中创建OpenID提供程序

时间:2010-07-08 23:52:52

标签: php zend-framework openid

我有一个现有的网站,我想转变为OpenID提供商。我的所有用户帐户都存储在一个mysql表中。

我认为因为OpenID被表示为URL,所以我会做类似的事情:http://login.mydomain.com/username

我已经设置了一个子域名,并创建了一个htaccess,将所有网址重定向到/login.php?username=[username]

我看到它的方式,并告诉我,如果我错了,有人会说让StackOverflow,他们进入http://login.mydomain.com/myUsername。他们到我的服务器上的一个页面询问他们的密码(因为我已经知道他们的用户名),我检查它是否匹配,然后返回密钥?

在线推荐使用Zend_OpenId_Provider的人。我一直在阅读他们的文档(http://framework.zend.com/manual/en/zend.openid.provider.html),但我觉得很困惑。他们没有真实世界的例子,用户登录/密码存储在数据库中。

我也看过php-open-id(http://github.com/openid/php-openid),但也没有帮助。

这似乎很常见。是否有一个教程或一个我可以轻松适应的例子?

6 个答案:

答案 0 :(得分:8)

当您使用zend-framework标记此问题时,我认为您希望使用ZF实现此功能。

查看Zend_OpenId_Provider

的构造函数
public function __construct($loginUrl = null,
                            $trustUrl = null,
                            Zend_OpenId_Provider_User $user = null,
                            Zend_OpenId_Provider_Storage $storage = null,
                            $sessionTtl = 3600)

重要的是$storage参数。

http://framework.zend.com/manual/en/zend.openid.provider.html上的示例中,它们不传递任何参数。这意味着默认使用Zend_OpenId_Provider_Storage_File提供程序。同样,这个将默认存储在TEMP目录中的文件中(Linux上为/tmp)。

基本上,该示例应该是完全正常的。您可以致电$server->register($someid, $somepassword);

注册更多用户

但是因为它在临时目录中按默认存储帐户,所以你应该用这样的东西替换该行(如果可以将文件存储在文件中):

$dir = "/var/lib/myopenidusers";
mkdir($dir);
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir) );

现在,如果您希望将用户存储在数据库中,则必须实现自己的Provider_Storage。

查看抽象类abstract class Zend_OpenId_Provider_Storage。这是您必须实施的方法。

答案 1 :(得分:2)

我尝试了此处列出的所有内容,社区ID,simpleid,janrain等,以及声称是OpenID Wiki / Libraries提供商且失败的所有人。然后我偶然发现了Prairie并在大约一个小时内运行了它。还有一些更改index.php和login.php中的查询的工作,我正在使用它来对付我的用户表。

答案 2 :(得分:1)

您可以尝试phpMyId。请参阅http://phpmyid.com/的演示。有关phpMyId的每个详细信息都可以在http://siege.org/phpmyid.php找到。

答案 3 :(得分:1)

答案 4 :(得分:0)

答案 5 :(得分:0)

SimpleID是一个很小的,很好用的+ setup OpenID提供程序软件。我自己使用它并且不能抱怨。