新浪微博客户端 -- OAuth认证

来源:互联网 发布:苹果软件安装 编辑:程序博客网 时间:2024/04/29 11:47


 OAuth的基本概念,OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。同样新浪微博提供OAuth认证也是为了保证用户账号和密码的安全,在这里通过OAuth建立普通新浪微博用户、客户端程序(我们正在开发的这个android客户端程序)、新浪微博三者之间的相互信任关系,让客户端程序(我们正在开发的这个android客户端程序)不需要知道用户的账号和密码也能浏览、发布微博,这样有效的保护了用户账号的安全性不需要把账号密码透露给客户端程序又达到了通过客户端程序写微博看微博目的。这个是OAuth的作用。

      结合新浪微博的OAuth认证来说说具体的功能实现,首先罗列一下关键字组,下面四组关键字跟我们接下来OAuth认证有非常大的关系。

      第一组:(App Key和App Secret),这组参数就是本系列文本第一篇提到的建一个新的应用获取App Key和App Secret。

      第二组:(Request Token和Request Secret)

      第三组:(oauth_verifier

      第四组:(user_id、Access Token和Access Secret) 

     新浪微博的OAuth认证过程,当用户第一次使用客户端软件时,客户端程序用第一组作为参数向新浪微博发起请求,然后新浪微博经过验证后返回第二组参数给客户端软件同时表示新浪微博信任本客户端软件,当客户端软件获取第二组参数时作为参数引导用户浏览器跳至新浪微博的授权页面,然后用户在新浪的这个授权页面里输入自己的微博账号和密码进行授权,完成授权后根据客户端设定的回调地址把第三组参数返回给客户端软件并表示用户也信任本客户端软件,接下客户端软件把第二组参数和第三组参数作为参数再次向新浪微博发起请求,然后新浪微博返回第四组参数给客户端软件,第四组参数需要好好的保存起来这个就是用来代替用户的新浪账号和密码用的,在后面调用api时都需要。从这个过程来看用户只是在新浪微博的认证网页输入过账户和密码并没有在客户端软件里输入过账户和密码,客户端软件只保存了第四组数据并没有保存用户的账户和密码,这样有效的避免了账户和密码透露给新浪微博之外的第三方应用程序,保证 了安全性。


新浪微博的SDK的导入:  新浪微博的SDK是源码方式开放的,和我们平时使用的有些不一样,导入步骤如下:

1)新浪微博官方的SDK包中一般有2个目录,一个是SDK的源码包(此包中有Android平台微博SDK说明文档),另一个是例子。首先需要将源码包导入到eclipse中。SDK工程的编码格式为UTF-8。

 2)在需要集成新浪微博SDK包的工程项目中添加Library,右键 -> Properties -> Android。设置Library属性。

认证的代码如下,也可以直接参考例子中的AuthorizeActivity类的代码


[java] view plaincopy
  1. private static final String CONSUMER_KEY = "*******";// 替换成你自己申请的KEY     
  2.     private static final String CONSUMER_SECRET = "**************************"// 替换陈你自己申请的SECRET    
  3.     Weibo weibo = Weibo.getInstance();    
  4.     weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);    
  5.     // Oauth2.0 隐式授权认证方式    
  6.     weibo.setRedirectUrl("http://www.sina.com");// 此处使用的URL必须和新浪微博上应用提供的回调地址一样    
  7.     weibo.authorize(OAuthWeiboActivity.thisnew AuthDialogListener());    
  8.    

对于Mobile客户端应用来说,是不存在Server的,故此处的应用回调页地址只要与新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了。

以下代码实现WeiboDialogListener接口,授权成功后可在onComplete函数中获得AccessToken信息。具体如何保存、使用AccessToken信息由开发者自行处理,比如存放在SharedPreferences中,但是AccessToken的有效期有限制,一般正常情况下是7天存活期,过期后需要重新获得。如果保存在SharedPreferences或者db文件中,则需要另外实现方法判断AccessToken是否过期(以最近保存过的时间为准),未过期则直接使用,过期后则按照正常流程重新获取.

[java] view plaincopy
  1. class AuthDialogListener implements WeiboDialogListener     
  2.     {    
  3.             @Override    
  4.             public void onComplete(Bundle values) {    
  5.                 String token = values.getString("access_token");    
  6.                 String expires_in = values.getString("expires_in");    
  7.                 Log.i(“info”,"access_token : " + token + "  expires_in: " + expires_in);    
  8.                 AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);    
  9.                 accessToken.setExpiresIn(expires_in);    
  10.                 Weibo.getInstance().setAccessToken(accessToken);    
  11.                 Intent intent = new Intent();    
  12.                 intent.setClass(OAuthWeiboActivity.this, MySinaWeiboActivity.class);    
  13.                 startActivity(intent);    
  14.             }    
  15.             @Override    
  16.             public void onError(DialogError e) {    
  17.                 Toast.makeText(getApplicationContext(), "Auth error : " + e.getMessage(),    
  18.                         Toast.LENGTH_LONG).show();    
  19.             }    
  20.             @Override    
  21.             public void onCancel() {    
  22.                 Toast.makeText(getApplicationContext(), "Auth cancel", Toast.LENGTH_LONG).show();    
  23.             }    
  24.             @Override    
  25.             public void onWeiboException(WeiboException e) {    
  26.                 Toast.makeText(getApplicationContext(), "Auth exception : " + e.getMessage(),    
  27.                         Toast.LENGTH_LONG).show();    
  28.             }    
  29.         }    
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办 宝宝磕碰到家具上鼻梁碰破该怎么办 月经推迟11天了怎么办孕测棒单杠 小孩子不小心把蜡笔吃一点怎么办 线切割切割的工件表面有条纹怎么办 苹果手机不能用流量更新吃鸡怎么办 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办 绝地求生刺激战场模拟器满了怎么办 绝地求生刺激战场电脑版满了怎么办 绝地求生手游模拟器注册上限怎么办 绝地求生电脑模拟器已达上限怎么办 三星s5锁屏密码忘了怎么办 字画装框的时候起褶皱怎么办 指甲油抹在手上不在指甲上怎么办 我把油画的布割破了怎么办 胜战本领怎么看、走上战场怎么办 胜战本领怎么看 走上战场怎么办 数码相机拍出的相片亮度太亮怎么办 国考照片错了怎么办招生办能改吗 国考英语准考证名字错了怎么办 玻尿酸打鼻子双眼间距好怪怎么办 喝咖啡后胃不舒服想吐怎么办 分期付款买的车不想还款了怎么办 考试时打小抄被同学发现怎么办 生完二胎计生办强制要求上环怎么办 没办二代身份证户口被注销怎么办 川航特价儿童票名字写错怎么办 川航机票名字错一个字怎么办 买飞机票名字打错了一个字怎么办 坐飞机耳朵聋了下飞机还痛怎么办 小孩咳嗽两个月了还不好怎么办 生完小孩肚子瘦不下来怎么办 胆子小一个人在家里都害怕怎么办 怀了双胞胎两个宝宝很挤怎么办 飞机无人陪护如果接机延误该怎么办 过年要坐火车回家 狗狗怎么办