scribe-java调用新浪oauth认证callback无效的问题

最近看了看oauth和开源的类库。
比较郁闷的是,看的是oauth2.0的文档,类库看的却都是1.0a的,呵呵。

国内很多互联网公司都做了自己的sdk,如人人的renren4j,新浪的weibo4j等等。
这就有个问题,oauth是一个标准协议,能否使用一个统一的类库呢?
当然可以,scribe就是一个不错的东东。整个项目的业务对象抽象的很好,新加一个产品,只需要在org.scribe.builder.api下增加一个新的api即可,api只需指定REQUEST_TOKEN_URL,ACCESS_TOKEN_URL,AUTHORIZE_URL。

兴奋中,马上写测试例子实验一下,就拿最近一直在用的sina微博开始。
结果在引导用户去新浪授权这块,怎么也不能跳转callback地址,只能获取授权码。

找不出问题,无奈使用weibo4j进行测试,指定callback却好使。。。
查看了两边的源码和debug值,发现scribe和weibo4j生成的base-string基本相同,但是往header里的值设定的却不相同。
scribe是向header里指定callback的,但是weibo4j却不指定。
那么weibo4j的base-string中包含callback,但是header中不包含这个信息,到了验证段是应该报错401错误的,那么为什么可以正常调用呢?
weibo4j的源码如下:
byte[] bytes = postParam.getBytes("UTF-8");

con.setRequestProperty("Content-Length",
Integer.toString(bytes.length));

osw = con.getOutputStream();
osw.write(bytes);
osw.flush();

新浪是会把参数单独发送给服务器端的,而不是像scribe通过header的方式。

又从网上看了下这个问题的解决办法。
// NOTE: sina一定要再加上oauth_callback,否则只给授权码,不会跳转
authUrl = authUrl + "&oauth_callback=" + "http://www.baidu.com";

sina微博是需要手动在AuthorizationUrl中添加callback参数的。
加上后就可以正常跳转了。

推荐一篇关于国内oauth调用的文章,写的不错。
http://artori.us/something-about-oauth/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值