对新浪微博OAuth认证的一点备忘,不求别人能看明白,只希望自己以后还能看懂……
第一步,通过已知的consumer key和consumer secret获取request token以及request token secret。
1
2
3
4
5
|
private
function
getRequestToken(){
$output
=
$this
->OAuthGet(self::
$REQUEST_TOKEN
, NULL);
$token
= OAuthUtil::parse_parameters(
$output
);
return
new
OAuthToken(
$token
[
'oauth_token'
],
$token
[
'oauth_token_secret'
]);
}
|
这里的$REQUEST_TOKEN为http://api.t.sina.com.cn/oauth/request_token,这个方法不用提供给外部调用,所以可以声明为私有方法。
第二步,获取第一步传回的request token,然后引导用户前往新浪认证页面,认证成功后会返回oauth_verifier。
1
2
3
4
5
6
|
public
function
GetAuthorization() {
$token
=
$this
->getRequestToken();
$result
->Url = self::
$AUTHORIZE
.
"?oauth_token={$token->key}"
;
$result
->Token =
$token
;
return
$result
;
}
|
第二步中的$AUTHORIZE为http://api.t.sina.com.cn/oauth/authorize,即认证页面。其中返回的$result->Url加上oauth_callback参数用来做302跳转,而$result->Token要保存起来(可以存到session中)以便在第三步使用。例如:
1
2
3
|
$info
=
$oauth
->GetAuthorization();
$_SESSION
[
'request_token'
] =
$info
->Token;
header(
"Location: {$info->Url}&oauth_callback="
. urlencode(CALLBACK_URL .
'?ret='
.
$_SERVER
[
'REQUEST_URI'
]));
|
第三步,用户在第二步中http://api.t.sina.com.cn/oauth/authorize认证成功之后,新浪会带上oauth_verifier参数再跳转一次,地址是由上一步oauth_callback参数指定的。这一步会连同第一步返回的request token和request token secret以及第二步返回的oauth_verifier做最后一次认证,通过之后返回access token和access token secret,这对密钥可以用来访问受限的资源,认证流程到此结束。
1
2
3
4
5
|
public
function
GetAccessToken(
$token
,
$verifier
) {
$output
=
$this
->OAuthGet(self::
$ACCESS_TOKEN
.
"?oauth_verifier=$verifier"
,
$token
);
$token
= OAuthUtil::parse_parameters(
$output
);
return
new
OAuthToken(
$token
[
'oauth_token'
],
$token
[
'oauth_token_secret'
]);
}
|
第三步认证其实是在上一步oauth_callback参数指定的地址中进行的,其中$ACCESS_TOKEN为http://api.t.sina.com.cn/oauth/access_token。
原文:http://www.zhoumingzhi.com/2010/10/30/sina-oauth/