新浪微博OAuth2.0的用法
最近学习Android开发,照着视频开发新浪微博,但是视频里的介绍的是OAuth1.0的授权方式,试了半天发现用不了。
原来现在一般没审核的用户只能使用OAuth2.0了,视频教学里的方法已经过时了。于是只好自己研究如何进行微博认证。
OAuth2.0的授权过程

说白了,就是请求获取Grant Code→使用Grant Code申请Access Token→以后就使用这个Access Token获取微博的服务,这比OAuth1.0的授权方式简化了不少。
如果不使用别的第三方OAuth认证的库或者自己开发认证方法的话,初入门可以直接使用新浪提供的SDK,简单方便,而且说明详细。
http://open.weibo.com/wiki/SDK#Android_SDK这个地址下载新浪的sdk库weibosdkcore.jar
然后倒入到Android的项目中
将官方的提供SDK JAR包(weibosdkcore.jar)放到工程的libs目录下
添加JAR包:工程→右键→properties→java build path→libraries→add external jar
新浪的这个SDK支持三种方法的认证,SSO认证、Web认证、Code认证。这个Code认证就是很多教学视频里使用的根据APP_KEY和APP_SECRET获取Token和Token_secret的方法。另外两个方法自己研究吧。
使用新浪的SDK完成认证就是两句话
Scope说明可以看http://open.weibo.com/wiki/Scope#scope.E8.AF.B4.E6.98.8E
WeiboAuth wa = new WeiboAuth(OAuthActivity.this, APP_KEY, REDIRECT_URL, "all");//最后一个参数是Scope
wa.authorize(new AuthListener(),WeiboAuth.OBTAIN_AUTH_CODE);//这个AuthListener是要自己实现的
获取Grant Code
AuthListener是继承WeiboAuthListener的一个实现,当输入完成账号密码,完成授权后就会回调这个实现。
public class AuthListener implements WeiboAuthListener {
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
private Oauth2AccessToken mAccessToken;
@Override
public void onCancel() {
Log.i("AuthListener","----auth canceled");
}
/**
* 微博认证授权回调类。
* 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
* 该回调才会被执行。
* 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
* 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
*/
@Override
public void onComplete(Bundle arg0) {
// 从 Bundle 中解析 Code
if (null == arg0) {
Log.e("AuthListener", "obtain auth code fail!");
return;
}
String code = arg0.getString("code");
mCode = code;
if (TextUtils.isEmpty(code)) {
Log.e("AuthListener", "obtain auth code fail!");
return;
}
//进行授权的下一步
fetchTokenAsync(mCode, APP_SECRET);//这是异步获取Token
}
@Override
public void onWeiboException(WeiboException arg0){
Log.i("AuthListener","----"+arg0.getMessage());
}
}
获取Access Token
获取Token,如果成功,那么授权就完成了。
/**
* 异步获取 Token。
*
* @param authCode 授权 Code,该 Code 是一次性的,只能被获取一次 Token
* @param appSecret 应用程序的 APP_SECRET,请务必妥善保管好自己的 APP_SECRET,
* 不要直接暴露在程序中,此处仅作为一个DEMO来演示。
*/
public void fetchTokenAsync(String authCode, String appSecret) { WeiboParameters requestParams = new WeiboParameters();
requestParams.put("client_id", APP_KEY);
requestParams.put("client_secret", appSecret);
requestParams.put("grant_type", "authorization_code");
requestParams.put("code", authCode);
requestParams.put("redirect_uri", REDIRECT_URL); // 异步请求,获取 Token
AsyncWeiboRunner.requestAsync(ACCESS_TOKEN_URL, requestParams, "POST", new RequestListener() {
@Override
public void onComplete(String response) {
Log.d(TAG, "Response: " + response); // 获取 Token 成功,Oauth2AccessToken是一个封装了"access_token","expires_in","refresh_token"的类
Oauth2AccessToken token = Oauth2AccessToken.parseAccessToken(response);
if (token != null && token.isSessionValid()) {
Log.d(TAG, "Success! " + token.toString()); mAccessToken = token; Toast.makeText(OAuthActivity.this,
"授权成功 Token="+token.getToken(), Toast.LENGTH_SHORT).show();
} else {
Log.d(TAG, "Failed to receive access token");
}
} @Override
public void onWeiboException(WeiboException e) {
Log.e(TAG, "onWeiboException: " + e.getMessage());
Toast.makeText(OAuthActivity.this,
"授权异常" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
新浪微博OAuth2.0的用法的更多相关文章
- 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)
java发送新浪微博,一下博客从注册到发布第一条微博很详细 利用java语言在eclipse下实现在新浪微博开发平台发微博:http://blog.csdn.net/michellehsiao/art ...
- 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
---------------------------------------------------------------------------------------------- [版权申明 ...
- 新浪微博 oauth2.0 redirect_uri_mismatch
新浪微博开放平台出来很久了,现在才开始研究,貌似有点晚了.... 第一次折腾,总是出现这样那样的问题,即使照着别人成功的例子也是一样,这不,开始运行的时候,运行下面的例子,总是报error:redir ...
- 新浪微博Oauth2.0授权 获取Access Token
新浪微博开放平台提供了丰富的API接口,利用这些接口,开发者能够开发出独具特色的微博应用.但是,大部分接口都需要用户授权给应用,应用利用授权得到的Access Token来调用相应的接口来获取内容. ...
- iOS新浪微博OAuth2.0认证代码
#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...
- OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token
在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...
- OAuth2.0 错误码
http://open.taobao.com/doc/detail.htm?id=118 OAuth2.0 错误码 新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2 ...
- 新浪微博 使用OAuth2.0调用API
# -*- coding: cp936 -*- #python 2.7.10 #xiaodeng #新浪微博 使用OAuth2.0调用API #微博开放接口的调用,都需要获取用户的身份认证.目前微博开 ...
- 新浪微博API Oauth2.0 认证
原文链接: http://rsj217.diandian.com/post/2013-04-17/40050093587 本意是在注销账号前保留之前的一些数据.决定用python 爬取收藏.可是未登录 ...
随机推荐
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...
- windows远程连接Linux(Ubuntu)的方法
需要做的工作: 1.在Linux(Ubuntu)端安装.设置好SSH 2.下载putty,并通过putty的SSH连接登录Linux 一 .如何在Linux(Ubuntu)端安装.设置好SSH,获取I ...
- bind() live()和delegate 区别
Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置s ...
- [推荐]dubbo分布式服务框架知识介绍
[推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程 http://wenku.baidu.com/view/20e8f36bf ...
- Activiti 查询最新版本的流程定义
package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...
- C# 动态修改dll的签名 以及修改引用该dll文件的签名
在读取RedisSessionStateProvider配置 提到用mono ceil 来修改程序集以及它的签名,里面GetPublicKey 和GetPubliKeyToken 方法里面那个字符串的 ...
- HTML5手机APP开发入(5)
HTML5手机APP开发入(5) 回顾一下 HTML5手机APP开发入(4) 如何自定义Component,directive HTML5手机APP开发入(3) 如何实现MVC的代码重构,自定义一个P ...
- arcgis server10.1注册服务——避免在发布服务中拷贝数据
之前用的arcgis10.1前的版本,后来换成10.1还有点不习惯,变化挺多的.发布服务过程中,进行分析的时候,其中有一项提醒:xxx图层没有注册到服务,很纳闷,为什么会有这种提示,不管,点击发布,会 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- 【WebMisCentral WMC】基于Extjs 4.2x的企业级用户授权认证中心系统(SSO+AM+SM),多租户SAAS应用
http://saas.chinacloudtech.com 题记 三年磨一剑,在企业信息化的道路上已经走了3年之久了,3年多时间里做了很多,突破了很多:有无奈和辛酸,也有收货与喜悦:自我价值也在不断 ...