oAuth介绍
简单介绍一下oAuth,它是一个开发的授权标准。它允许用户让第三方网站访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方网站。
标准的流程是
在认证和授权的过程中涉及的三方包括:
服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。
用户,存放在服务提供方的受保护的资源的拥有者
客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。
使用OAuth进行认证和授权的过程如下所示:
用户访问客户端的网站,想操作用户存放在服务提供方的资源。
客户端向服务提供方请求一个临时令牌。
服务提供方验证客户端的身份后,授予一个临时令牌。
客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
授权成功后,服务提供方引导用户返回客户端的网页。
客户端根据临时令牌从服务提供方那里获取访问令牌。
服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
有一点复杂,回到我们的应用。就是我们网站(第三方的服务提供方)想要访问当前用户(客户端)存放在Dena网络(用户)上的资源。真实流程又如何呢。在第 一次GadgetServer给我们请求的时候,就已经发给我们了访问令牌,而我们再次发API请求的时候,必须把这个令牌和请求内容一并发给 APIServer,这时候Server一看到我们令牌和当初一致,就返回信息给我们的网站。
oAuth通讯的实现方法(PHP)
oAuth自己官方网站上有一个PHP实现的Lib类。
$reqOrg->get_parameter(‘oauth_token_secret’));
//建立API Request。除了刚才所说的令牌,还需要提供API REST URL,Mehtod等
$url=”http://xxx.com/api/restful/v1/people/@me/@self”;
$method = ‘GET’;
parse_str(parse_url($url, PHP_URL_QUERY), $params);
$request = OAuthRequest::from_consumer_and_token($consumer, $token, $method, $url, $params);
//光有Request还不行,还要把原始Request的Base信息做一次加密,
//成为密钥放到header里面去。这里用的是HMAC_SHA1方式
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(),$consumer, $token,$reqOrg->get_parameter(‘opensocial_viewer_id’));
//哈哈,现在可以把做成header输出来了,准备发送
$auth_header = $request->to_header(“”,$reqOrg->get_parameter(‘opensocial_viewer_id’));
//以下就是用php的curl方法发送一个请求,并取得返回值,
//显然这种REST必须是同步调用,也就是等待返回的。
$headers = array($auth_header,”Content-Type: application/json; charset=utf-8″);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$res=curl_exec($ch);
curl_close($ch);
//把返回值打出来
print “
“;
print_r($res);
print ““;
?>[/sourcecode]