在PHP中创建OpenID提供程序

Nat*_*n H 12 php openid zend-framework

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

我想,因为OpenID被表示为URL,我将做类似的事情:http://login.mydomain.com/username

我已经设置了一个子域名,并创建了一个htaccess,将所有URL重定向到/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),但也没有帮助.

这似乎是一件很常见的事情.那里有一个教程还是一个我可以很容易适应的例子?

Ale*_*lex 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)
Run Code Online (Sandbox Code Playgroud)

重要的是$storage参数.

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

基本上这个例子应该是完全有用的.您可以通过致电注册更多用户$server->register($someid, $somepassword);

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

$dir = "/var/lib/myopenidusers";
mkdir($dir);
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir) );
Run Code Online (Sandbox Code Playgroud)

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

看看抽象类abstract class Zend_OpenId_Provider_Storage.这是您必须实现的方法.