Windows Live ID当作OpenID使用

| 评论(8) | 引用通告(4)
MSN庞大的客户群体是不可忽视的,虽然Live有OpenID,但是很少有人会去开通,并且记得住的不多。记得上次有人在他的BLOG上说很多上网的人其实很白痴,连登录Gmail都要用hao123。包括在我使用OpenID的网站(OpenTags.org)上,真正使用OpenID登录的并不多,Google、Yahoo、Live的用户才多。Google、Yahoo虽然支持OpenID,但是都被阉割了,只是有选择的支持sreg。关于Google、Yahoo,下次再说,今天说Windows Live ID。

Windows Live ID,注意是ID不是OpenID,如果使用Login的方式会得到一个userid,但是这个userid只是一个识别符号,不是真正的Live ID,这个userid只能在你的网络识别Live ID,即一个appid对应一个userid,如果换了appid,即换站userid也跟着变。如果要再作第三方的认证就不合适了。我这里介绍的是取得真正的Live ID,即通过获取Live ID的联系人信息来获取Live ID。

如果要Login方式的userid可以不用再往下面看了,说一下获取Login方式的userid很简单,下载SDK包,然后里面有个sample,看下就懂了,记得要修改Application-Key.xml。

要取得真正的Live ID,按下列步骤即可:

申请(New Project >> Live Services: Existing APIs)


下载 Windows Live ID Web Authentication SDK 1.2 webauth-php-1.2.tar.gz


修改Application-Key.xml


$LoginUrl = '登录地址';
$AuthUrl = '验证地址';
$RealmUrl = '退出后返回的地址';

$DEBUG = true;
$KEYFILE = './Live/Application-Key.xml';
$COOKIE = 'webauthtoken';
$COOKIETTL = time() + (10 * 365 * 24 * 60 * 60);

include_once('./Live/lib/windowslivelogin.php');
$wll = WindowsLiveLogin::initFromXml($KEYFILE);
$wll->setDebug($DEBUG);

if(!empty($_REQUEST['action'])){
switch($_REQUEST['action']) {
case 'logout':
setcookie($COOKIE);
$LocationUrl = $RealmUrl;
break;
case "clearcookie":
setcookie($COOKIE);
$LocationUrl = $AuthUrl;
break;
default:
$user = $wll->processConsent($_REQUEST);
if(!empty($user)){
setcookie($COOKIE, $user->getToken(), $COOKIETTL);
$LocationUrl = $AuthUrl;
}else{
$LocationUrl = $LoginUrl;
}
break;
}
LocationHtml($LocationUrl);
}
$token = $_COOKIE[$COOKIE];
if($token){
$user = $wll->processConsentToken($token);
if(!$user->isValid()){
$LocationUrl = $AuthUrl.'?AuthType=Live&action=clearcookie';
}else{
$url = 'https://livecontacts.services.live.com/users/@L@'.$user->getLocationID().'/rest/livecontacts/owner';
$owner = getLiveID($url, array('Authorization: DelegatedToken dt="'.$user->getDelegationToken().'"'));
$openid = $owner->WindowsLiveID;
$email = $owner->WindowsLiveID;
$fullname = $owner->Profiles->Personal->LastName.' '.$owner->Profiles->Personal->FirstName;
$nickname = $owner->Profiles->Personal->DisplayName;
echo('<pre>');
print_r($owner);
echo('</pre>');
}
}else{
$LocationUrl = $wll->getConsentUrl('Contacts.View', 'zh-CN');
}


function getLiveID($url, $header){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
try{
$xml = new SimpleXMLElement($data);
}catch(Exception $e){
return false;
}
return $xml;
}

function LocationHtml($url, $e=null){
if(empty($url))
exit;
echo('<html>');
echo('<head>');
echo('<title>Redirect to: '.$url.'</title>');
echo('<meta http-equiv="refresh" content="1;url='.$url.'">');
echo('</head>');
echo('<body bgcolor="#FFFFFF" onload="window.location.href=\''.$url.'\'">');
echo('<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" height="100%" width="100%">');
echo('<tr>');
echo('<td align="center" valign="middle">');
echo('<a href="'.$url.'" style="color:#000000;text-decoration:none">');
echo($url);
echo('</a>');
echo('</td>');
echo('</tr>');
echo('</table>');
if(!empty($e)){
echo('<script type="text/javascript">');
if(is_array($e))
echo('alert("'.implode('\n', $e).'");');
else
echo('alert("'.$e.'");');
echo('</script>');
}
echo('</body>');
echo('</html>');
exit;
}


注意:getLiveID要CURL支持,如果不支持请用其他办法。

引用通告(4)

来自Casino 1242896914:Casino 1242896914
引用时间:2009年5月21日 16:14

Casino 1242896914 查看全文

来自王炜's Blog:OpenID登陆!
引用时间:2009年5月25日 10:07

这个就不用说太多了,是标准的! if(empty($_REQUEST['op... 查看全文

来自王炜's Blog:Google的OpenID
引用时间:2009年5月25日 12:23

上次写了Windows Live ID当作OpenID使用的方法,这次写Goog... 查看全文

来自王炜's Blog:Yahoo的OpenID登陆
引用时间:2009年5月25日 13:14

前两次写了Windows Live ID当作OpenID使用的方法和Google... 查看全文

评论(8)

王大哥您好~

先謝謝您分享這麼寶貴的實作經驗!

我也依照您的代碼修改成我需要的功能
目前google、yahoo都成功了

但在以LiveID登入後卻總是跳轉到下面這個頁面
https://consent.live.com/pp700/Error.aspx?mkt=zh-TW&ErrorCode=2002

appID申請了
也修改了Application-Key.xml
請問還有什麼地方需要注意的呢?

謝謝您了~

王大哥您好~

先謝謝您分享這麼寶貴的實作經驗!

我也依照您的代碼修改成我需要的功能
目前google、yahoo都成功了

但在以LiveID登入後卻總是跳轉到下面這個頁面
https://consent.live.com/pp700/Error.aspx?mkt=zh-TW&ErrorCode=2002

appID申請了
也修改了Application-Key.xml
請問還有什麼地方需要注意的呢?

謝謝您了~

王大哥您好~

先謝謝您分享這麼寶貴的實作經驗!

我也依照您的代碼修改成我需要的功能
目前google、yahoo都成功了

但在以LiveID登入後卻總是跳轉到下面這個頁面
https://consent.live.com/pp700/Error.aspx?mkt=zh-TW&ErrorCode=2002

appID申請了
也修改了Application-Key.xml
請問還有什麼地方需要注意的呢?

謝謝您了~

謝謝王大哥的提示!
修改過xml之後是有一些進展了
https://consent.live.com/pp700/Delegation.aspx
這頁正常通過了
不過還是沒有跳轉回return url的頁面

跟您的演示對照之後發現
跳轉過程中會先經過下面這頁(這部份我也正常通過)
https://consent.live.com/pp700/Delegation.aspx?ps=Contacts.View&ru=http%3A%2F%2Ffreebapp.org%2Ftools%2Fopenid%2Fauth.php&pl=http%3A%2F%2Ffreebapp.org%2Fpolicy_url.html&app=appid%3D0000000044(後面省略)

但是接下來您的演示就會直接跳轉回return url
而我的卻會卡在
https://consent.live.com/Delegation.aspx?ps=Contacts.View&ru=http%3A%2F%2Fart2money.com%2FopenID%2Fauthentication.php&pl=http%3A%2F%2Fart2money.com%2FopenID%2Fpolicy_url.html&app=appid%3D0000000040(後面省略)

請問還有哪邊需要注意的嗎?
感覺離成功不遠了~

I propose not to hold back until you get big sum of cash to buy goods! You can take the home loans or financial loan and feel comfortable

Mr Wang

王炜,现在福建泉州从事 B2C 电子商务。爱好编程,业余时间在 FreeBSD / Apache / PHP / PostgerSQL 平台开发 B/S 架构的免费软件。

Follow Google Buzz Twitter Facebook Sina

收藏王炜's Blog

Bookmark and Share

关于此日记

此日记由 王炜 发表于 2009年4月 7日 10:36

此Blog上的上一篇日记我的服装行业日子不好过

此Blog上的下一篇日记Nmap网络安全扫描器在FreeBSD下的安装和命令

首页归档页可以看到最新的日记和所有日记。