2010-07-08 71 views
12

我有一个现有的网站,我想变成一个OpenID提供程序。我所有的用户帐户都存储在一个MySQL表中。在PHP中创建一个OpenID提供程序

我想既然一个OpenID表示为一个URL,我会做这样的事情:http://login.mydomain.com/username

我设置一个子域,并创建了所有重定向URL到/login.php?username一个htaccess = [用户名]

我看到它的方式,并告诉我如果我错了,有人去让我们说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),但没有帮助。

这似乎是一件很常见的事情。有没有教程或我可以轻易适应的例子?

+1

我想要举一些这方面的例子,我正在努力成为OpenID Provider,我们可以合作。我打算使用Janrain OpenID Enabled:http://www.janrain.com/openid-enabled,因为Zend已经失败了我的一些要求。我恐怕你必须阅读源代码... – jayarjo 2010-07-12 07:02:50

+0

我打开openid启用或任何其他。很难找到帮助成为提供者。我为这个问题设置了一个小小的奖励。也许它会帮助...为这个问题投票。 – 2010-07-20 21:06:45

+0

Zends官方文档的质量很差。他们很难提供真实世界的例子。 – jantimon 2010-07-21 05:59:13

回答

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。这是你必须实施的方法。

+0

请注意,我的数据库中已有所有用户。我是否还需要“登记”他们? – 2010-07-26 17:02:06

+0

看来我必须写下所有的东西。我只想通过我的mysql表完成它的“登录”部分。在这里,我需要从头开始实现所有代码,其中大部分我甚至不明白... – 2010-07-27 00:06:58

1

您可以尝试JanRain Engage(http://www.janrain.com/products/engage)。它是OpenID与Web应用程序集成的简化界面。免费版应该足够适用于所有实际目的。

+1

开始Engage是接受OpenId,而不是提供者。你可能会想到FEDERATE,这不是免费的。 – 2010-07-26 17:03:56

0

我们使用:http://source.keyboard-monkeys.org/projects/show/communityid

从他们的网站:

“社区-ID是在PHP的OpenID的实现是OpenID的2.0兼容社区的ID是建立以100%的开源软件,这是。用户可以跟踪他们的可信站点并进行管理,登录到C-ID可以是用户名/密码,也可以是带有Yubikey的一次性密码,用户可以拥有多个配置文件,如私人或商业联系信息。

对于社区ID管理员统计信息可用于跟踪新用户注册,每天授权用户数或可信站点数。管理员可以在维护模式下设置网站或向所有注册用户发送电子邮件。

对于用户数据和身份验证,admin可以选择默认数据库存储或连接到LDAP服务器。目前确认支持的是OpenLDAP。其他LDAP服务器也应该很好地工作。”

+0

我试图设置这个,我与我和另外3个人经营一家小企业,我们运行4个网站,并希望SSO,我已经设置了SSO部分,但不知道如何转发其他网站以登录有了这个 :/ – MRVDOG 2014-05-07 01:46:50

0

SimpleID是一个小而漂亮的使用+设置OpenID提供商的软件。我用它自己,没什么可抱怨的。

2

我想在这里列出,社区ID一切, simplean,janrain等等,以及所有那些自称为OpenID Wiki/Libraries的提供者,但都失败了。然后我偶然发现了Prairie,并在大约一个小时内运行了它。在index.php和login.php中更改了一些查询我正在使用它来对付我的用户表

相关问题