OAuth相关说明

出自天涯开放平台资源

跳转到: 导航, 搜索

目录

概述

为了使用天涯开放平台提供的API(应用程序接口),对每个注册的应用,我们会分配一个专属的App Key和App Secret。Key跟Secret的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将key和secret结合,为你发出的每个请求添加签名,以此来向天涯开放平台表明自己身份的合法性。Web应用应该使用完整的OAuth来进行用户认证。

天涯开放平台使用的是OAuth 1.0a 版本 。

OAuth授权流程

请求签名

所有的OAuth请求使用同样的算法来生成(signature base string)签名字符基串和签名。

base string是把http方法名,请求URL以及请求参数用&字符连起来后做URL Encode编码。具体来讲,base string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和访问路径及&。接下来,把所有的请求参数包括POST方法体中的参数,经过排序(按参数名进行文本排序,如果参数名有重复则再安参数值进行重复项目排序),使用%3D替代=号,并且使用%26作为每个参数之间的分隔符,拼接成一个字符串。

这个算法的PHP简单示例:


//BASE String = method+address+params
$a = urlencode('oauth_consumer_key').'%3D'.urlencode($appkey).'%26';
$b = urlencode('oauth_nonce').'%3D'. urlencode($randstr).'%26';
$c = urlencode('oauth_signature_method').'%3D'. urlencode('HMAC-SHA1').'%26';
$d = urlencode('oauth_timestamp').'%3D'. urlencode($timestamp).'%26';
$e = urlencode('oauth_version').'%3D'. urlencode('1.0');
$basestr = 'GET&'.$callbackurl.'&'.$a.$b.$c.$d.$e;
$signature = base64_encode(hash_hmac('sha1',$basestr,$appsecret,true));


无论生成何种OAuth1.0请求,生成BASE STRING的规则始终不变,并要求所有的OAuth请求都使用HMAC-SHA1算法生成签名。

获取request token

天涯开放平台的request token获取接口地址为:http://open.tianya.cn/oauth/request_token.php
PHP例子如下:


$timestamp = time();
//random string-oauth_nonce
$randstr = md5(rand().$timestamp);
//APP KEY-oauth_consumer_key
$appkey ='a3f956bf848461cb937f8b5422ed1e9604dc3a413';
$appsecret = '75a7e311db9b3104673176bc0810b584&';

//call back url
$callbackurl = urlencode('http://open.tianya.cn/oauth/request_token.php');

//BASE String = method+address+params
$a = urlencode('oauth_consumer_key').'%3D'.urlencode($appkey).'%26';
$b = urlencode('oauth_nonce').'%3D'. urlencode($randstr).'%26';
$c = urlencode('oauth_signature_method').'%3D'. urlencode('HMAC-SHA1').'%26';
$d = urlencode('oauth_timestamp').'%3D'. urlencode($timestamp).'%26';
$e = urlencode('oauth_version').'%3D'. urlencode('1.0');
$basestr = 'GET&'.$callbackurl.'&'.$a.$b.$c.$d.$e;

$signature = base64_encode(hash_hmac('sha1',$basestr,$appsecret,true));

$url = 'oauth_consumer_key='.$appkey.'&'.
'oauth_nonce='.$randstr.'&'.
'oauth_signature_method='.'HMAC-SHA1'.'&'.
'oauth_timestamp='.$timestamp.'&'.
'oauth_version='.'1.0'.'&'.
'oauth_signature='.$signature;

$oauth_ts = file_get_contents("http://open.tianya.cn/oauth/request_token.php?".$url);
$ots = array();
parse_str($oauth_ts,$ots);
$oauth_token = $ots['oauth_token'];
$oauth_token_secret = $ots['oauth_token_secret'];

session_start();
$_SESSION['oauth_token'] = $oauth_token;
$_SESSION['oauth_token_secret'] = $oauth_token_secret;

echo "<a href='http://open.tianya.cn/oauth/authorize.php?
oauth_token=".$oauth_token."&consumer_key=".$appkey."&oauth_callback=".urlencode("http://me.tianya.cn/oauth/test/callback.php")."'>click me</a>";


用户认证

Pc端OAuth相关说明

这一步主要是发送你获取的oauth_token,并且获得用户的授权。天涯开放平台的验证URL是http://open.tianya.cn/oauth/authorize.php 。要求必须以oauth作为参数。

如果用户没有登录天涯,则会要求用户登录。如果用户第一次访问,将会出现一个页面,用户可以在此页面上一键同意或者拒绝对此应用授权。用户授权后,web应用页面将会重定向至你指定的oauth_callback,用户已经授权过,则返回access token。


移动OAuth相关说明

天涯开放平台为第三方移动应用提供无线授权,帮助用户随时随地使用天涯移动应用。移动应用开放平台提供相关接口,以实现第三方WAP站和客户端等多种应用的接入。这一步主要是发送你获取的oauth_token,并且获得用户的授权。天涯开放平台的验证URL是http://openrelease.tianya.cn/oauth/mobile_authorize.php 。要求必须以oauth作为参数。


如果用户没有登录天涯,则会要求用户登录。如果用户第一次访问,将会出现一个页面,用户可以在此页面上一键同意或者拒绝对此应用授权。用户授权后,无线应用页面将会重定向至你指定的oauth_callback,用户已经授权过,则返回access token。 文件:应用授权.png

获取access token

天涯开放平台access token请求地址为:http://open.tianya.cn/oauth/access_token.php
请求获取access token的PHP示例代码如下:


//Base String

$a = urlencode('oauth_consumer_key').'%3D'.urlencode($appkey).'%26';
$b = urlencode('oauth_nonce').'%3D'. urlencode($randstr).'%26';
$c = urlencode('oauth_signature_method').'%3D'. urlencode('HMAC-SHA1').'%26';
$d = urlencode('oauth_timestamp').'%3D'. urlencode($timestamp).'%26';
$e = urlencode('oauth_token').'%3D'. urlencode($oauth_token).'%26';
$f = urlencode('oauth_verifier').'%3D'. urlencode($oauth_verifier).'%26';
$g = urlencode('oauth_version').'%3D'. urlencode('1.0');
$basestr = "GET&".$urltoken."&".$a.$b.$c.$d.$e.$f.$g;
//Key=App Secret +”&”+ Oauth_token_secret
$key = $appsecret.$oauth_token_secret;

//-oauth_signature
//echo $basestr.'
';
$signature = base64_encode(hash_hmac('sha1',$basestr,$key,true));
//echo $signature.'
';
//url
$url = 'oauth_consumer_key='.$appkey.'&'.
'oauth_nonce='.$randstr.'&'.
'oauth_signature_method='.'HMAC-SHA1'.'&'.
'oauth_timestamp='.$timestamp.'&'.
'oauth_token='.$oauth_token.'&'.
'oauth_verifier='.$oauth_verifier.'&'.
'oauth_version='.'1.0'.'&'.
'oauth_signature='.$signature;

echo "<a href='http://open.tianya.cn/oauth/access_token.php?".$url."'>get access token</a>";

获取用户信息

获取access token之后,应用可以凭该授权访问当前用户信息
请求地址为:http://open.tianya.cn/api/user/info.php

可选参数为:outformat
返回格式为:json,xml
请求之前请创建客户端链接,具体请参考user/info

使用OAuth调用其他API

完整示例

OAuth库和资源

PHP

   oauth-php http://code.google.com/p/oauth-php/
查看
个人工具
成功案例
帮助中心