原文:http://blog.csdn.net/coolszy/article/details/6576536
本次讲解腾讯微博OAuth认证的最后一步使用授权后的Request Token换取Access Token,当我们获取到Access Token后,我们就可以进行微博平台的资源访问。
照例我们先看下交换access_token的API:
交换access_token
URL:https://open.t.qq.com/cgi-bin/access_token
格式:xml,json
HTTPS请求方式:GET
是否需要鉴权:true
请求数限制:true
请求参数:
oauth_callback:回调URL
oauth_consumer_key:你申请的appkey
oauth_nonce:随机串(32个字符长度)
oauth_signature:oauth请求签 名
oauth_signature_method: 签 名方法(HMAC-SHA1)
oauth_timestamp:时间戳
oauth_token: request_token
oauth_version: oauth版本号填(1.0)
oauth_verifier:验证码
使用示例如下:
https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac&oauth_nonce=35885b07fe7dc53942d405e552d086fe&oauth_signature=TXBihj%2FH4avLJaWmjYARDVVCu8M%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288933101&oauth_token=66ae88faecd14a1f8e826d35d5e857a7&oauth_verifier=335566&oauth_version=1.0
返回结果:
oauth_token=ffc37464473e48a2b22226350dc98210&oauth_token_secret=3fe92ec42e936672ceca549d432c237d&name=starjiang
返回结果说明:
oauth_token: access_token
oauth_token_secret: access_secret
name: 微博帐户名
说明:
①本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)
②获得返回值后就可以使用Access Token来访问资源了。
③Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。
通过API的我们可知请求URL为https://open.t.qq.com/cgi-bin/access_token,传递的参数个数为9个,但是官方给出的使用示例中传递的参数为8个,其中oauth_callback并未传递,个人认为是API提供错误,因为在前面的请求中我们已经指定了oauth_callback,我编写代码的时候也是没有传递oauth_callback。另外oauth_verifier即为我们在上一节中获取的验证码。同时还有一点要注意的是我们在生成签名的时候密钥是有两部分组成的:App Secret和Request Token Secret,其中Request Token Secret既是我们在获取未授权的Token中的返回值oauth_token_secret的值。
由于我们在请求时需要传递验证码,因此我在界面中添加了一个EditText用来接收用户输入的验证码:
同时添加了一个Button用于执行请求,代码如下:
url="https://open.t.qq.com/cgi-bin/access_token";
httpMethod = "GET";
Map<String, String> map = new HashMap<String, String>();
try
{
params = OAuth.getPostParams(url, httpMethod,null, tokenSecret, oauthToken, verifier);
SyncHttp http = new SyncHttp();
String response = http.httpGet(url, params);
map = TextUtil.splitResponse(response);
} catch (Exception e)
{
e.printStackTrace();
}
return map;
在这里要注意的是OAuth中的getPostParams()方法我做了相应的修改,这个会在视频中给大家讲解,这里仅附上代码:
public static String getPostParams(String url, String httpMethod, String callBack, String tokenSecret,String oauthToken,String verifier) throws Exception
{
// 保存参数集合
List<Parameter> params = new ArrayList<Parameter>();
// 获取时间戳
String timestamp = generateTimeStamp();
// 获取单次值
String nonce = generateNonce();
// 添加参数
params.add(new Parameter("oauth_consumer_key", CONSUMER_KEY));
params.add(new Parameter("oauth_signature_method", SIGNATURE_METHOD));
params.add(new Parameter("oauth_timestamp", timestamp));
params.add(new Parameter("oauth_nonce", nonce));
params.add(new Parameter("oauth_version", "1.0"));
if (!TextUtil.isEmpty(callBack))
{
params.add(new Parameter("oauth_callback", callBack));
}
//验证码
if (!TextUtil.isEmpty(verifier))
{
params.add(new Parameter("oauth_verifier", verifier));
}
//oauthToken
if (!TextUtil.isEmpty(oauthToken))
{
params.add(new Parameter("oauth_token", oauthToken));
}
// 获取签名值
String signature = generateSignature(httpMethod, url, params, CONSUMER_SECRET, tokenSecret);
params.add(new Parameter("oauth_signature", signature));
// 构造请求参数字符串
StringBuilder urlBuilder = new StringBuilder();
for (Parameter param : params)
{
urlBuilder.append(param.getName());
urlBuilder.append("=");
urlBuilder.append(param.getValue());
urlBuilder.append("&");
}
// 删除最后“&”字符
urlBuilder.deleteCharAt(urlBuilder.length() - 1);
Log.i(TAG, "params="+urlBuilder.toString());
return urlBuilder.toString();
}
通过上面的代码我们就可以获取到Access Token,整个程序执行流程如下图表示:
通过上面的流程,我们发现在授权的过程中还需要用户的操作,既手动输入验证码,这样使我们的程序显得非常不友好。我也在参考其它的资料寻找解决方法,现在还找研究中,不管是否成功,在下一节课中会分享下思路,同时也期待各位朋友介绍更好的解决方案。
另外如果认证成功,我们可登陆open.t.qq.com,输入认证QQ账号,然后进入“应用”——“已授权应用”就可以看到我们授权的程序:
课程下载地址:http://u.115.com/file/e60jb8jl
文档下载地址:http://download.csdn.net/source/3405215
源码下载地址:http://u.115.com/file/dn4kdfdt
分享到:
相关推荐
腾讯微博Android客户端开发——获取未授权的Request Token,课程下载地址:http://blog.csdn.net/coolszy
6.换取Access_Token.rar 6.换取Access_Token.rar 6.换取Access_Token.rar 腾讯微博Android客户端开发
4.获取未授权的Request_Token.rar 4.获取未授权的Request_Token.rar .获取未授权的Request_Token.rar .腾讯微博Android客户端开发
5.获取请求用户授权Request_Token.rar 5.获取请求用户授权Request_Token.rar 5.获取请求用户授权Request_Token.rar 腾讯微博Android客户端开发
JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...
Android手机上的新浪微博客户端程序Java源码下载,可了解到android中的域名获取等操作,http操作,发微博的作者操作,sqlite操作和微博浏览显示操作,包括了界面到数据库和网络较综合的操作技巧。包括使用sqlite创建...
本SDK采用腾讯目前oauth1.0的授权机制,换取2.0token,API功能接口利用了oauth2,更为简洁。 实现的功能: 1.oauth1.0授权及2.0授权 2.实现了腾讯开放平台上列举出的所有功能,包括比较复杂的发表图片微博 3.可以...
使用oauth授权,实现新浪微博与自己网站帐号绑定,并发布微博内容;根据这个功能, 主要将新浪微博返回来的oauth_token,oauth_token_secret存储到数据库中,然后可以 ...————————转发——————————
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样
—————————————————————————————————— 生成私钥 - ssh-keygen -t rsa -b 2048 -f private.key —————————————————————————————————— 生成公钥 ...
ios版本新浪微博客户端源代码 client_ID = (你申请应用的appkey) client_SERCRET =(你申请应用的app_secret) redirect_URI =(回调地址,跟网上配置的一致,本人比较穷,而且用的是客户端,所以这里就为空) ...
前言: 这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。...小程序获取token.png 这里介绍的主要是后端开发的流程,前端的不是本文介绍的重点 二:如何将cod
博客教程《微信公众平台开发教程第22篇-如何保证access_token长期有效》的配套代码,教程地址如下: http://blog.csdn.net/lyq8479/article/details/25076223
使用'mechanize'写的对于新浪的Oauth2取得access_token.
SpringSecurity-JWT-VERSION2(AccessToken和RefreshToken) version1太复杂,无法优化。accessToken refreshToken流安全登录处理流程详细说明转到博客文章JWT异常处理安全异常处理(AuthenticationEntryPoint,...
主要介绍了Android token过期刷新处理的方法示例,本文详细的介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
php获取微信access tokenphp获取微信access tokenphp获取微信access tokenphp获取微信access tokenphp获取微信access tokenphp获取微信access token
主要介绍了使用java代码获取新浪微博应用的access token实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这是微信公关平台的access-token如果用户在微信中(Web微信除外)访问公众号的第三方网页,公众号开发者可以通过此接口获取当前用户基本信息(包括昵称、性别、城市、国家)。