转载请说明出处
http://blog.csdn.net/sinat_29071599/article/details/47997485
by 背包下的影子
OAuth2.0 概述
整体来看OAuth2.0整个授权验证流程还是比较简单的,关于OAuth2.0的授权流程可以参考下面的流程图。
其中
Client指第三方应用,
Resource Owner指用户,
Authorization Server是我们的授权服务器,
Resource Server是API服务器。
A.客户端向用户发出授权请求
B.用户同意客户端的请求 (拿到用户的 授权令牌 grant Token)
C.在经过用户同意后,客户端拿着”授权令牌”向授权服务器请求 “获取令牌”Access Token
D.授权服务器经过验证给予客户端“获取令牌”Access Token
E. 客户端拿着令牌向资源服务器申请用户所拥有的资源
F.资源服务器返回客户端所需要的资源
这里大体可以分三步:
1、拿到用户的 授权Token 这把钥匙 (A B);
2、用授权Token拿到Access Token这把钥匙(C D);
3、有了Access Token后,在有效期内我们通过开放平台给出的相应接口,拿到我们所需要的资源(E F)
OAuth2.0接口
对应上面三步的接口
- OAuth2/authorize 请求用户授权Token
- OAuth2/access_token 获取授权过的Access Token
OAuth2/get_token_info授权信息查询接口
- OAuth2/revokeoauth2授权回收接口
- OAuth2/get_oauth2_token OAuth1.0的Access Token更换至OAuth2.0的Access Token
一、请求用户的 授权Token
//请求示例代码
https://api.weibo.com/oauth2/authorize?client_id=APP_KEY&redirect_uri=https://api.weibo.com/oauth2/default.html&response_type=code
二、向授权服务器 请求 Access Token
url---> https://api.weibo.com/oauth2/access_token
post请求参数如下
必选 类型及范围 说明
client_id true string 申请应用时分配的AppKey。
client_secret true string 申请应用时分配的AppSecret。
grant_type true string 请求的类型,填写authorization_code
当grant_type为authorization_code时
code true string 调用authorize获得的code值。
redirect_uri true string 回调地址,需需与注册应用里的回调地址一致。
返回的结果json
{
"access_token": "ACCESS_TOKEN",
"expires_in": 1234,
"remind_in":"798114",
"uid":"12341234"
}
至此就拿到了accessToken了,拿到他就可以想资源服务器通过对应的rest接口申请相应的资源。
新浪微博SDK已经集成好的4中授权方式,可以使开发者快速进行授权
- SSO 授权:在有客户端的情况下,使用 SSO 授权登陆;无客户端的情况下,自动唤起 Web 授权
- Web 授权:在没有客户端的情况下,可直接使用该授权
- SSO 授权+Web 授权 混合授权, ( 如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权 )
- Code手动授权
第三种方式授权是官方推荐的
mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
mSsoHandler = new SsoHandler(MainActivity.this, mAuthInfo);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSsoHandler.authorize(new AuthListener());
}
});
class AuthListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle bundle) {
mAccessToken = Oauth2AccessToken.parseAccessToken(bundle);
if (mAccessToken != null && mAccessToken.isSessionValid()) {
String phone = mAccessToken.getUid();
Toast.makeText(getApplicationContext(), phone + "", Toast.LENGTH_LONG).show();
AccessTokenKeeper.writeAccessToken(MainActivity.this, mAccessToken);
}
}
@Override
public void onWeiboException(WeiboException e) {
}
@Override
public void onCancel() {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
确定之后,会返回
{
“access_token”: “SlAV32hkKG”,
“remind_in”: 3600,
“expires_in”: 3600
“refresh_token”: “QXBK19xm62”
}
自此,新浪微博OAuth2.0就此告一段落,希望能帮助你>_