我想在Yii中使用OpenID支持.
在研究了可能的插件之后,我找到了这两个插件.一个用于OpenidSelector,另一个用于LightOpenId
http://www.yiiframework.com/extension/simpleopenidselector/
http://www.yiiframework.com/extension/loid
这些是在Yii中用于OpenId支持的正确扩展吗?还要别的吗?如果这些扩展是正确的,我想了解如何处理这些扩展.
这是我认为我需要按照页面上的说明安装它们.
然后我有点迷失,因为我不理解Loid中的Usage样本,我不知道如何做(1)和(3).
如果我走在正确的轨道上并且可能提供一些指导,请告诉我.谢谢.
我正在用PHP开发一个OpenID消费者,并使用了梦幻般的LightOpenID库(http://gitorious.org/lightopenid).基于我在示例客户端脚本中找到的代码,我已成功创建了一个使用者.不过,我已经跨越了障碍跑:谷歌需要openid.identity和openid.claimed_id被设置为"http://specs.openid.net/auth/2.0/identifier_select"(见这里).如果我这样做它可以工作,但其他提供商(即AOL)不这样做.
这是我的问题:
identifier_select,与OpenID规范相反吗?identifier_select那么我只需硬编码就可以获得有限数量的提供商,或者通过OpenID规范确定这一点?我是OpenID内部的新手,所以如果这是一个愚蠢的问题,我不会感到惊讶.在搜索互联网后,我无法找到有关此主题的任何信息.
我正在使用LightOpenID对Google Apps进行OpenID身份验证.我做了初始的authURL()请求,事情很好.我调用validate()并且失败了.通过丰富的回声,我已将其追溯到最后几行validate().
从validate(),传递给discover($ url)的url是 https://www.google.com/accounts/o8/user-xrds?uri=http://my-domain.com/openid?id=117665028262121597341
discover()首先检查xrds-location,这是不存在的.discover()接下来检查内容类型是否为xrds + xml,这是真的.discover()检查Service(.*)/ Service,这是真的.这是服务,/服务的片段
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/a/<my domain>.com/o8/ud?be=o8</URI>
</Service>
Run Code Online (Sandbox Code Playgroud)
discover()看到我们正在使用OpenID 2并将URI字段提取到$ server变量中.discover()继续提取CanonicalID,发现Google支持AX而不是SREG.最后,discover()返回$ server ashttps://www.google.com/a/my-domain.com/o8/ud?be=o8
validate()继续清理data []中的每个字段,具体取决于magic_quotes.它将openid.mode设置为'check_authentication',请求发现($ url)返回的$ server和'/ is_valid:true'的preg.这是最后一个preg_match失败了.$ server url不返回验证,而是说"您请求的页面无效".
我正在寻找的答案是Google Apps验证的正确网址.紧随其后的是网址应该是什么样子,我将深入了解Google Apps返回的信息,看看我是否有类似的东西.
增加:不确定这是否重要,但我确实有/.well-known/host-meta文件.以下是内容:
Link: <https://www.google.com/accounts/o8/site-xrds?hd=my-domain.com>; rel="describedby http://reltype.google.com/openid/xrd-op"; type="application/xrds+xml"
如果您需要更多代码或数据,请告诉我们.
谢谢,Eric B.
您好
我几个小时前已经下载了LightOpenID(http://gitorious.org/lightopenid),但仍然无法弄清楚如何使它工作.
我把这个google示例保存在test.php文件中
<?php
require '../lib/init.php';
require '../lib/openID/openid.php';
try {
if(!isset($_GET['openid_mode'])) {
if(isset($_GET['login'])) {
$openid = new LightOpenID;
$openid->identity = 'https://www.google.com/accounts/o8/id';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Google</button>
</form>
<?php
} elseif($_GET['openid_mode'] == 'cancel') {
echo 'User has canceled authentication!';
} else {
$openid = new LightOpenID;
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
}
} catch(ErrorException $e) {
echo $e->getMessage();
} …Run Code Online (Sandbox Code Playgroud) 我遇到一个名为LightOpenID的小型OpenID库问题 .我可以对几乎所有提供商进行身份验证,但我不知道如何从提供程序获取数据.我只用print_r()得到了Array(),eaven.
我正在构建一个RESTful应用程序.我计划使用OpenID进行用户身份验证.目前,我使用LightOpenID进行OpenID身份验证,我可以对我的用户进行身份验证.
我的问题是下一步是什么?认证后!
我确实搜索了有关实现的示例,但所有示例都停止了身份验证,并且没有谈论会话管理!我想知道您如何管理应用程序中的会话,以及在实施方法时可能的最佳实践和关注点.
如果您了解任何参考实施,请提供链接.
我目前正在使用LightOpenID来允许用户登录我的网站,在那里我可以自动提取他们的用户名和电子邮件地址:
$openid->required = array('namePerson/first', 'namePerson/last', 'contact/email');
$openid->identity = 'https://www.google.com/accounts/o8/id';
Run Code Online (Sandbox Code Playgroud)
在这里我使用的参数namePerson/first,namePerson/last和contact/email.
我知道为了获得用户联系人列表,我必须使用feed:
https://www.google.com/m8/feeds
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法弄清楚我需要使用哪些参数?
如果我完全删除参数行,我只会得到一个空数组.
任何人都可以帮我弄清楚我需要哪些参数来获取联系人?
这是我目前的代码:
<?php
require '/var/www/libraries/openid.php';
try {
$openid = new LightOpenID;
if(!$openid->mode) {
//$openid->required = array('gd/fullName');
$openid->identity = 'https://www.google.com/m8/feeds/contacts/oshirowanen.y%40gmail.com/full';
header('Location: ' . $openid->authUrl());
exit;
} elseif($openid->mode == 'cancel') {
echo "cancelled";
exit;
} else {
if ( $openid->validate() ) {
$returned = $openid->getAttributes();
print_r($returned);
exit;
} else {
echo "something is wrong";
exit;
}
}
} catch(ErrorException $e) {
echo …Run Code Online (Sandbox Code Playgroud) 最近,我开始编写自己的PHP OpenID消费者类,以便更好地理解openID.作为指南,我一直在引用[LightOpenID Class] [1].在大多数情况下,我理解代码以及OpenID的工作原理.在查看作者的discover功能时,我感到困惑:
function discover($url)
{
if(!$url) throw new ErrorException('No identity supplied.');
# We save the original url in case of Yadis discovery failure.
# It can happen when we'll be lead to an XRDS document
# which does not have any OpenID2 services.
$originalUrl = $url;
# A flag to disable yadis discovery in case of failure in headers.
$yadis = true;
# We'll jump a maximum of 5 times, to avoid endless redirections.
for($i = …Run Code Online (Sandbox Code Playgroud) 我想用最新的LightOpenID版本实现一个OpenID登录系统.我测试设置有由线的源代码行的例子(I刚刚更换localhost与$_SERVER['HTTP_HOST']在构造).
问题是在我的私人网络(Windows Vista上的PHP/5.3.6)的开发框中一切正常,但在HSP公共网络(CentOS上的PHP/5.3.3)的生命服务器中验证总是失败.
我已经添加了var_dump()所有内容,我可以告诉你,代码的两个副本产生完全相同的请求参数并接收完全相同的响应参数(通过GET).只有openid.assoc_handle,openid.sig,openid.response_nonce并openid.return_to有不同的价值观,这是我的猜测是预期的行为.
但是,我的开发框从OpenID提供程序收到此信息(无论我使用哪一个):
is_valid:true
ns:http://specs.openid.net/auth/2.0
Run Code Online (Sandbox Code Playgroud)
......我的活狐得到了这个:
is_valid:false
ns:http://specs.openid.net/auth/2.0
Run Code Online (Sandbox Code Playgroud)
没有涉及任何非ASCII字符,因此它不能成为编码问题.我的托管服务肯定有问题,但我无法弄清楚是什么.
我需要有关可能原因和故障排除提示的建议.