OAuth2.0授权
OAuth2.0授权概述(总结)
实现新浪微博OAuth2.0授权认证并不难,新浪微博SDK里面就提供好了实现授权的demo,仿照这个demo来写就行了。
OAuth总的来说就是新浪微博允许用户提供了一个自己的AccessToken,第三方应用根据这个AccessToken就能访问新浪微博资源服务器上这个用户的信息了。
新浪微博OAuth2.0授权认证过程就是:
1、先在新浪微博开发者平台创建一个应用,新浪服务器认为这个创建的应用合法的话就给这个应用分配一个app key
2、第三方应用获取到app key之后,进入新浪微博的授权界面,
3、在授权界面中输入用户名的账号和密码,同意给这个第三方应用授权之后,资源服务器会根据app key和用户信息给第三方应用分配一个AccessToken。
4、第三方应用获取这个AccessToken之后,就能通过微博提供的API访问微博服务器用户的特定信息了。
新浪微博OAuth2.0授权涉及到三个概念,简单介绍一下:
第三方应用:这里的第三方应用指的就是我们要访问资源服务器上用户的特定信息的客户端。
用户:就是字面意思,用户名 密码啊
资源服务器:存放用户受保护的资源,用户的信息,譬如说好友信息啊、发表的微博信息啊这些都是保存在资源服务器上的,也就是微博服务器。OAuth2.0授权过程
图:
1、首先开发者向一个用户(Resource Owner)发出授权请求,用户同意授权,就返回一个授权许可(Grant)
2、开发者根据这个授权许可访问授权服务器(Server),授权服务器给开发者返回一个Access Token,(这时应该把Access Token保存起来)
3、开发者根据这个Access Token就可以访问资源服务器了,也就是通过微博API访问用户资源
实现过程:参考SDK文档
1、获得一个Weibo对象,参数为APP key + 回调地址
2、通过Weibo对象,调用weibo.authorize()进入授权界面
3、将获取的access_token和有效期expires_in构造成OAouth2AccessToken(access_token,expires_in),调用keepAccessToken保存到SharedPreference中(会生成XML文件),
AuthActivity类:
//授权界面加载完成以后,调用如下onComplete回调方法,获得access_token,并保存在SharedPreference中(xml文件)
class AuthDialogListener inplements WeiboAuthListener {
@override
public void onComplete(Bundle values) {
String access_token = values.getString("access_token
");
String expires_in= values.getString("expires_in
");
Oauth2AccessToken token = new Oauth2AccessToken(access_token ,expires_in)
AccessTokenKeeper.keepAccessToken(this,token)
Application access_token = token ; //再次将AccessToken保存到Application对象中
}
}
4、再将access_token值保存到Application中(Application,整个应用只有一个,单例模式,会在Activity之前就初始化)
public class Application extends android.os.Appliocation {
public static Oauth2AccessToken access_token = new Oauth2AccessToken();
}
5、下次访问时就不用再次授权了,因为Access_token保存起来了
//读取sharedpreference文件中的AccessToken
OAuth2AccessToken.accessToken = accesstokenKeeper.readAccessToken(this);
if(!TextUtil.isEmpty(accessToken.getToken)) {
Application.accessToken = accessToken;
//然后直接跳转到登录界面
}
获取微博列表
获取微博列表示例:
(OAouth2AccessToken对象的值会被经常用到,应该保存到一个Application中,Application在Activity之前被初始化且一次)
1、首先通过access_token获取代表微博API的对象StatuesAPI
2、通过API对象调用获取微博列表API,得到微博列表的json数据(要实现listener)
StatuesActivity:
//获取代表微博API的对象StatuesAPI
StatuesAPI api = new StatuesAPI(Application.access_token);
//调用获取微博列表API(要实现该listener)
api.friendsTimeline(since_id, max_id, count, page, base_app, feature, trum_user, listener)
class WeiboRequestlistener implements RequestListener {
public void onComplete(String result)
{
result即为json数据
}
}
3、ListView + adapter显示数据 + json数据与Javabean对象的转换 + 模板文件
SSO认证
single sign on 单点登录:例如一个平台有很多个系统,只需要在一个应用程序上登录即可
(新浪SSO认证的要求:要有手机客户端 + 有版本要求)