使用RPX托管OpenID登录服务

2009年07月23日

自己做一个OpenID的登录接口总的来说是见比较麻烦的事情。RPX提供了登录接口的托管服务,只要在网页上放一段代码就可以一举搞掂OpenID的登录验证过程,甚至还可以支持Google、Yahoo、Windows Live等账号的登录。

首先到RPX网站上申请一个APIKEY和登录代码。该网站也是用OpenID来进行登录的,但可能是由于它加入了FaceBook登陆的功能,而目前FaceBook在国内是无法访问的,所以登录的时候老是出现脚本错误而不能继续。搞一个国外的代理来访问就可以了。

申请到代码以后,在网页上嵌入就可以了。可以看演示页面:RPX登录测试

虽说登录的界面只是嵌入一个IFRAME就搞掂了,但是返回数据的处理还是费了我不少劲才弄明白。RPX的文档中所提供的例子代码基本上没有什么用。简要的说是这么个处理过程:

在登入的IFRAME的URL中有一个参数“token_url”是指定登录完成以后重定向返回的URL。登录验证通过以后返回时RPX会给这个“token_url”带回一个参数“token”,例如:http://openid.bluesky.cn/service/test/test.php?token=04e58fca0f9a43a46dc4f097e9e3d619436d7eae,而后这个页面就要取出这个token的值并凭这个值和申请RPX服务时所得到的apiKey去访问接口https://rpxnow.com/api/v2/auth_info来获取用户信息。相应的php代码如下:

<?php
$token="";
if(isset($_REQUEST['token']))$token=$_REQUEST['token'];
if($token!=""){
	$apikey="c4e8e6bdd19fafee4f1e1275ff112829ab25155b";
	$auth_info_url="https://rpxnow.com/api/v2/auth_info?format=xml&apiKey=".$apikey."&token=".$token;
 
	function download_page($path){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$path);
		curl_setopt($ch, CURLOPT_FAILONERROR,1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		$retValue = curl_exec($ch);
		curl_close($ch);
		return $retValue;
	}
	$sXML = download_page($auth_info_url);
	$oXML = new SimpleXMLElement($sXML);
	echo("<p>登录验证返回的数据如下:");
	try{
		echo("<br />OpenID URL:".$oXML->profile->url);
		echo("<br />名字:".$oXML->profile->displayName);
		echo("<br />昵称:".$oXML->profile->preferredUsername);
		echo("<br />EMAIL:".$oXML->profile->email);
		echo("<br />性别:".$oXML->profile->gender);
		echo("<br />生日:".$oXML->profile->birthday);
	}catch (Exception $e) {
  	echo 'Caught exception: ',  $e->getMessage(), "\n";
	}
	echo("<p>未解析的原始返回数据为:<br /><textarea cols='80' rows='10' >");
	echo($sXML);
	echo("</textarea>");
}
?>
<p>其中的$apikey要换成你自己所申请获得的那个。</p>




标签: , ,
归类: OPENID

Leave a Reply

*

您也可以使用微博账号登陆