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支持,如果不支持请用其他办法。
8 Comments
上面的注册地址没用了,MS好像不支持了,要从以下地址进去注册服务
去https://msm.live.com/app/default.aspx申请一个appID,申请前需要先使用一个Live ID登陆。
用得到的
Application ID:00000000400201XX
Secret Key:V2jDP8DkmiaDR1IsLNVi8jgAC5kkyXXX
去修改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
請問還有什麼地方需要注意的呢?
謝謝您了~
王大哥您好~
先謝謝您分享這麼寶貴的實作經驗!
我也依照您的代碼修改成我需要的功能
目前google、yahoo都成功了
但在以LiveID登入後卻總是跳轉到下面這個頁面
https://consent.live.com/pp700/Error.aspx?mkt=zh-TW&ErrorCode=2002
appID申請了
也修改了Application-Key.xml
請問還有什麼地方需要注意的呢?
謝謝您了~
<windowslivelogin>
<appid>000000004401XXXX</appid>
<secret>S3cbebBmaMkmytfeBxbw96Tx37smXXXX</secret>
<securityalgorithm>wsignin1.0</securityalgorithm>
<policyurl>http://freebapp.org/policy_url.html</policyurl>
<returnurl>http://freebapp.org/tools/openid/auth.php</returnurl>
</windowslivelogin>
再看看!
除了wsignin1.0不要改其余都要改!
謝謝王大哥的提示!
修改過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