新浪微博OAuth授权的Java实现

Java与新浪微博第三方登录集成实战教程 htmltable {th, td {th {pre {简介:在Java开发中,集成新浪微博的第三方登录服务是提升用户体验和扩展用户基础的常用手段。本教程将通过实际的Demo项目,详细介绍使用Java实现新浪微博第三方登录的整个流程。教程包括理解OAuth2.0授权框架,注册新浪应用获取密钥,设置回调URL,获取并使用access_token,以及安全性和错误处理等方面的实践指导。此外,还将强调定期检查更新以及处理特定开发细节的重要性。 阅读详情
 

一、OAuth协议简介

OAuth授权在各社交网站中广泛使用,该协议使用户不需要直接向第三方应用提供用户名及密码,并且使一个账户在多个网站中使用成为可能,OAuth协议的细节描述可参考其官方网站:http://oauth.net

目前OAuth 1.0已经出了final version,即RFC ,OAuth 2.0也已在起草中。

这篇文章中,我想用比较通俗的语言来解释OAuth协议。

OAuth协议中包含了三个角色:
Service Provdier,即服务提供者,如新浪微博;
User,即普通用户,如新浪微博用户;
Consumer,即第三方应用,如本人开发的应用。

现有如下场景:User想利用Consumer来更新自己在Service Provider中的状态,但此时Service Provider并不信任Consumer,且User也不想把帐号和密码告诉Consumer,于是三者之间需要建立起信任关系。

Consumer首先要向Service Provider申请一对Consumer_Key和Consumer_Secret,以此取得Service Provider的信任。因为User是信任Service Provider的,所以User与Consumer间的信任关系需要借助Service Provider来建立。

Consumer用自己的Consumer_Key和Consumer_Secret向Service Provider请求到一对Request_Token和Request_Token_Secret,而后Consumer拿上这对RequestToken,领着User去见Service Provider。Service Provider见到自己发的RequestToken,便确认Consumer是值得信任的,于是把头转向User。如果Service Provider不记得User了,只要User向Service Provider提供用户名和密码,就能建立起信任关系。然后Service Provider对User说:“我很信任这个Consumer,你是不是也要信任他?”,若User确认,则Service Provider允许Consumer把User带回去,并发给Consumer一个Verifier.

回来以后,Consumer拿着RequestToken和Verifier又单独去找Service Provider,取回来一对Access_Token和Access_Token_Secret,并长期保存。

至此,三方信任关系就建立起来了,Consumer每次在Service Provider中更新User的状态时,只需要提供这对AccessToken,Service Provider便能确定此Consumer能代替User进行相应的操作。

在使用相关OAuth库进行开发时,所需要的关键字在以上场景中都有体现,包括:
Consumer_Key,   Consumer_Secret,   Request_Token,   Request_Token_Secret,   Verifier,   Access_Token,   Access_Token_Secret

OAuth授权流程图如下:

二、新浪微博开放平台OAuth授权接口

新浪微博开放平台文档中声明“注意由于OAuth 1.0版有安全漏洞,我们仅支持最新的1.0a协议”,其中OAuth 1.0a 就是目前的RFC 5849.

新浪微博OAuth授权机制说明可参考:
http://open.t.sina.com.cn/wiki/index.php/授权机制说明

为了方便使用,新浪微博提供了网页应用和桌面应用两种OAuth授权方式。

关于OAuth授权的三个接口:
oauth/request_token:Consumer使用该接口向Service Provider索取RequestToken
oauth/authorize:Consumer带上RequestToken,领着User,三者再此接口见面
oauth/access_token:Consumer拿着RequestToken和Verifier,在此接口向Service Provider索取AccessToken

三、Java平台上的新浪微博OAuth授权

新浪微博开放平台提供了一个功能强大的Java SDK,即weibo4j,下载页面:
http://open.t.sina.com.cn/wiki/index.php/SDK#Java_SDK

此SDK改编自著名的twitter4j,封装了OAuth等其他常用的API,并包含一些示例程序。

下载weibo4j并解压,readme.txt文件内有该SDK的简要说明,其中包括了OAuth授权的示例用法。为了更方便的体验OAuth授权,我将其中关于OAuth授权的示例提出,单独建了一个名为sinaoauth的web项目,点击下载

下载sinaoauth后需修改相关内容:
1、在\WEB-INF\src\weibo4j\Configuration.java文件的65和66行填上自己申请的Consumer_Key和Consumer_Secret
2、若Web服务器的地址不是http://localhost:8080,则对\call.jsp文件的第9行中的url进行修改

修改完成后,将sinaoauth项目复制到Web服务器的webapps下运行,在浏览器中输入:http://localhost:8080/sinaoauth/call.jsp  即可开始体验新浪微博OAuth授权。

进一步对代码进行分析,call.jsp和callback.jsp两个jsp页面负责与用户的交互,call.jsp将User带到Service Provider,而callback.jsp负责迎接从Service Provider返回的User,其中用到一个名为weboauth的JavaBean,这是OAuth授权的核心控制部分,对应的java源文件是\WEB-INF\src\weibo4j\examples\WebOAuth.java

WebOAuth类中的request方法如下,该方法对应oauth/request_token接口,接收一个callbackurl参数,即User从Service Provider授权回来后的入口,返回从Service Provider获取的RequestToken,并利用oauth/authorize接口构造授权地址。此后,在call.jsp里将该RequestToken临时存放于session中。

public static RequestToken request(String backUrl)    
{   
    try    
    {   
        Weibo weibo = new Weibo();   
        RequestToken requestToken =    
            weibo.getOAuthRequestToken(backUrl);   
        return requestToken;   
    }    
    catch (Exception e)    
    {   
        return null;   
    }   
}  


requstAccessToken方法如下,该方法对应oauth/access_token接口,接收存放在session中的RequestToken和从Service Provider带回来的Verifier,并返回从Service Provider索取的AccessToken,该AccessToken应该被持久化存储,而存放在session中的RequestToken则应失效。

public static AccessToken requstAccessToken   
    (RequestToken requestToken, String verifier)    
{   
    try  
    {   
        Weibo weibo = new Weibo();   
        AccessToken accessToken =    
            weibo.getOAuthAccessToken(   
                requestToken.getToken(),    
                requestToken.getTokenSecret(),    
                verifier);   
        return accessToken;   
    }    
    catch (Exception e)   
    {   
        return null;   
    }   
}  


update方法演示了如何利用AccessToken来更新User的状态,代码浅显易懂。

public static void update(AccessToken access, String content)    
{   
    try    
    {   
        Weibo weibo = new Weibo();   
        weibo.setToken(access.getToken(),    
            access.getTokenSecret());   
        Status status = weibo.updateStatus(content);   
    }    
    catch (WeiboException e)    
    {   
    }   
}  


在桌面应用中,类似Web应用的网页跳转无法实现,新浪微博提供了PIN码的机制,流程与以上描述类似,但需要用户自己打开浏览器,然后将得到的PIN码输入到应用中,在sinaoauth项目里,可以直接运行\WEB-INF\src\weibo4j\examples\OAuthUpdate.java进行体验,此源文件内为一个控制台应用程序。

这篇文章从OAuth协议介绍写到新浪微博OAuth授权的Java实现,希望能起到抛砖引玉的作用,让不熟悉OAuth协议的朋友了解它,也给有意在Java平台上开发新浪微博OAuth授权应用的朋友提供一个参考。一直认为新浪微博的开放平台做得很有诚意,在广大开发者和网友的支持下,路一定会越走越宽。

 

新浪微博后台登录授权认证 java 新浪微博后台登录 立即下载

相关推荐

java实现新浪微博第三方登录

用java实现的新浪微博第三发登录的Demo,这只是代码,你要先去新浪开发者中心去开通授权,然后还有自己的域名,再然后就是这个Demo

新浪微博客户端开发之授权登录+获取微博列表

分享一份工作1到5年以上的Android程序员架构进阶学习路线体系,希望能对那些还在从事Android开发却还不知道如何去提升自己的,还处于迷茫的朋友!阿里P7级Android架构师技术脑图;查漏补缺,体系化深入学习提升**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记有任何问题,欢迎广大网友一起来交流《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!ull;try {// 只使用public类型字段if (fields!

2401_84149339的博客 894

新浪微博sdk

抓取新浪微博用到的sdk,也可以去新浪网站下载,使用方法在http://blog.youkuaiyun.com/itjavaer/article/details/40299271

java 的新浪oauth_新浪微博OAuth授权的Java实现

一、OAuth协议简介OAuth授权在各社交网站中广泛使用,该协议使用户不需要直接向第三方应用提供用户名及密码,并且使一个账户在多个网站中使用成为可能,OAuth协议的细节描述可参考其官方网站:http://oauth.net目前OAuth 1.0已经出了final version,即RFC 5849,OAuth 2.0也已在起草中。这篇文章中,我想用比较通俗的语言来解释OAuth协议。OAuth...

weixin_34828705的博客 444

使用Oauth2.0实现微博授权登录

使用Oauth2.0实现微博授权登录

新浪微博OAuth授权的Java实现.pdf

新浪微博OAuth授权的Java实现.pdf

java 的新浪oauth_工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)

1 importjava.io.BufferedReader;2 importjava.io.InputStreamReader;3 importjava.io.OutputStreamWriter;4 importjava.net.URL;5 importjava.net.URLConnection;6 importjava.security.cert.CertificateException;...

weixin_39772651的博客 311

Java使用新浪微博API开发微博应用的基本方法

主要介绍了Java使用新浪微博API开发微博应用的基本方法,文中还给出了一个不使用任何SDK实现Oauth授权并实现简单的发布微博功能的实现方法,需要的朋友可以参考下

java 的新浪oauth_新浪微博API获得OAuth2.0授权(Java sdk),并测试实例

前提申请有新浪微博账号,并且登陆。1、点击http://open.weibo.com/进入新浪微博开放平台,首先点击应用开发,然后创建应用,一依次填写信息即可。2、创建完成后会获得app key以及App Secret,这两个数据需要保存,获得OAuth2.0授权需要用到。3、然后点击应用信息中的高级信息,按如图进行设置授权回调页以及取消授权回调页,如果有自己的域名或网址,设置为自己的。本人设置为...

weixin_42361929的博客 329

CESM2 实验笔记

文章目录1. 重新启动1.1 关于重启文件2. RUN_TYPE 初始化运行方式startupbranchhybrid3. branch 或者 hybrid运行的示例4. 其他声明5. 关于RESUBMIT 1. 重新启动 参考: https://bb.cgd.ucar.edu/cesm/threads/how-to-restart-cesm2-1-3-fhist-from-a-backup.5245/#post-36275 适用情况:模型运行因时间不足或其它原因中断,需要继续运行 方法1:将CONTIN

qq_38607066的博客 1万+

MFC下使用C++操作Word文档

由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。 (1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的...

GIS_yuhua的博客 7577

使用OAuth向新浪微博发消息

最近看了一下新浪围脖的Oauth消息发送的方式,整理一下。 新浪微博开放平台上对Oauth的授权与发送流程介绍的很清楚 http://open.t.sina.com.cn/wiki/index.php/Oauth 。有兴趣的可以自己去研究。 本文通过java代码直观的将上面的流程描述一下。 欲善其事,先利其器。先下载一下围脖java的SDK ,这个S...

iteye_3398的博客 255

USB2.0信号完整性测试之眼图

名称线缆颜色引脚描述红色绿色白色GND黑色。

qq_53766840的博客 3283

新浪微博OAUTH2.0授权验证(基于SSO客户端验证)

1.新浪微博开放平台注册应用 微博开放平台的网址为:http://open.weibo.com/apps 应用注册成功之后要填写应用的相关信息 主要有:应用的包名和签名 包名就是eclipse下的包: 至于签名:下载微博MD5签名工具http://vdisk.weibo.com/s/z8QF4HirmcYfJ 手机安装打开,如图 输入包名后获取32位的MD5签名 应用信

u010883062的专栏 21万+

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 870

PointPillars代码详解及实现

SourceURL:file://文字文稿1和2D图像的深度学习目标检测很不相同,点云数据具有两个显著特征,为了将图像领域卷积神经网络做模式识别的经验引入三维点云中,一些深度学习方法采用了三维卷积方法或者是将点云投射为2维深度图,还有一类方法是使用鸟瞰视角Bird’s Eye View,来组织点云数据的输入,相比于2维深度图,鸟瞰图不存在遮挡问题但是数据分布更加稀疏造成网络特征学习效率低下。

m0_47313541的博客 659

java 的新浪oauth_java实现新浪oauth2.0获取用户信息并发表一条微博

刚刚工作.......... 工作中用到了新浪微博的oauth , 因为用到的功能不多,并没有用新浪的SDK,都是自己写的,没有考虑大多数的异常处理。 oauth验证过程不再叙述。 用到了struts2。引导用户到授权界面当用户在网站上点击用新浪微博登陆后的执行过程。public String authWeiboSignIn(){authorizationURL = "https://api.we...

weixin_42510243的博客 217

【JAVA】海康威视门禁机ISAPI接口开发,人脸上传更新接口

本文实现了一个HTTP工具类HTTPClientUtil,提供GET/POST/PUT/DELETE请求方法,支持摘要认证。工具类封装了Apache HttpClient,设置连接超时、最大连接数等参数,通过DeviceInfoDTO传递设备IP、端口和认证信息。文中还展示了两个应用示例:userInfoAdd()用于添加人员信息,FaceDataRecordAdd()用于添加人脸数据,均通过POST请求与设备ISAPI接口交互。该工具类简化了HTTP请求处理,支持设备管理系统的集成开发。

qq_27246521的博客 586

最通俗简单的新浪微博OAuth认证实现

System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);         System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);            Weibo weibo = new Weibo();            // set callback url, desktop app please set to null    

Cocos2d-x,Android,IOS,游戏,HTML5开发/交流/学习/资源 沈大海 5386

python实现下载和离线安装包环境

导出当前电脑python安装的所有包列表requirement.txt。

m0_60352504的博客 1676
上一篇: 单例模式几种实现方法
下一篇: 新浪微博OAuth接口实现登录 java版
欧德曼
博客等级 码龄19年 63粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值