第三方登录:新浪微博登录(OAuth2.0)
在《Github第三方登录--通用化的第三方登陆实现》中我们实现了一个通用化的第三方登录框架,其中包括OAUth的基本流程以及最简单的用户注册。但是不同的第三方登录因为其细节不同还是有很多坑的,今天我们就从完善开发者信息开始一步一步添加微博第三方登录的功能。
注意,需要完成微博的第三方登录功能需要有一个域名以及修改该域名网站的权限,之后审核时需要对首页进行修改。这里我们假设我们的域名是tianmaying.com。
完善用户信息
首先我们进入新浪微博开发平台,登录我们的微博账号,点击右上角的【我的应用】,我们就会看见相关的功能以及相对应需要完善的信息。
我们可以看到,如果需要添加第三方应用只需要完善基本信息,但是需要注意的是,如果你添加了微博第三方登录功能后需要通过其审核,仍然需要通过【身份认证】。这里我们只需要完善【基本信息】即可。
点击右侧的【基本信息】,按要求添加相关的信息,最后完成邮箱验证,我们的基本信息就添加完成了。之后我们需要添加网站的相关信息:

选择左上角的【微连接】->【网站接入】,之后再选择【立即接入】:
我们需要验证的是我们是否对于网站拥有所有者权限,需要修改域名相对应的网页上添加一行代码,按要求进行修改即可。
验证通过后,我们就可以在本地进行第三方登录的测试了。
添加第三方通用登录框架
《Github第三方登录--通用化的第三方登陆实现》一文中已经完成了一个通用化第三方登录的框架,如果想对通用化第三方登录的实现有所了解,请先阅读《Github第三方登录--通用化的第三方登陆实现》。
我们直接复制上述代码,去除掉github相关的代码:
添加SinaWeiboOAuthService
按照《Github第三方登录--通用化的第三方登陆实现》,我们需要为Weibo添加两个类,SinaWeiboAPI以及SinaWeiboOAuthService,但是SinaWeiboAPI在scribe中已经提供了,我们直接使用即可。接下来我们来添加SinaWeiboOAuthService:
public class SinaWeiboOAuthService extends OAuthServiceDeractor {
private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/oauth2/get_token_info";
public SinaWeiboOAuthService(OAuthService oAuthService) {
super(oAuthService, OAuthTypes.SINA_WEIBO);
}
@Override
public OAuthUser getOAuthUser(Token accessToken) {
OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
this.signRequest(accessToken, request);
Response response = request.send();
OAuthUser oAuthUser = new OAuthUser();
oAuthUser.setoAuthType(getoAuthType());
oAuthUser.setoAuthId(JSONPath.eval(JSON.parse(response.getBody()), "$.uid").toString());
oAuthUser.setUser(new User());
return oAuthUser;
}
}
SinaWeiboOAuthService需要完成获取用户的相关信息,并将其转换成为OAuthUser对象,关于如何获取新浪微博的用户信息以及其相关参数,可以参看新浪微博的官方文档。
配置OAuthService
最后,按照我们从新浪微博中得到的appKey、appSecret以及我们定义的callback_uri对SinaWeiboOAuthService进行相关配置:
@Configuration
public class OAuthConfig {
private static final String CALLBACK_URL = "http://tianmaying.com/oauth/%s/callback";
@Value("${oAuth.sina.appKey}") String sinaAppKey;
@Value("${oAuth.sina.appSecret}") String sinaAppSecret;
@Bean
public OAuthServiceDeractor getSinaOAuthService(){
return new SinaWeiboOAuthService(new ServiceBuilder()
.provider(SinaWeiboApi20.class)
.apiKey(sinaAppKey)
.apiSecret(sinaAppSecret)
.callback(String.format(CALLBACK_URL, OAuthTypes.SINA_WEIBO))
.build());
}
}
修改hosts
由于微博的第三方登录是与域名相绑定的,因此我们需要我们的hosts文件,将本地127.0.0.1绑定到tianmaying.com即可。
windows系统hosts文件一般在C:\WINDOWS\system32\drivers\etc
mac系统hosts文件地址一般为:/etc/hosts
在hosts文件添加以下一行:
127.0.0.1 tianmaying.com
调试
进入根目录,运行sudo mvn spring-boot:run命令,访问http://tianmaying.com (之前填写应用信息以及修改hosts时所填写的域名,这三个域名必须一致),由于必须通过域名进行访问,所以我们需要监听80端口,运行时需要超级管理员权限。
注意:将代码上线后,还需要经过新浪微博的审核,进入新浪微博--我的应用,按要求进行填写即可。
参考代码,请访问:https://www.tianmaying.com/tutorial/OAuth-login-weibo/repo
本文转载自
原文作者:Cliff
原文链接:https://www.tianmaying.com/tutorial/OAuth-login-weibo
第三方登录:新浪微博登录(OAuth2.0)的更多相关文章
- 新浪微博 使用OAuth2.0调用API
# -*- coding: cp936 -*- #python 2.7.10 #xiaodeng #新浪微博 使用OAuth2.0调用API #微博开放接口的调用,都需要获取用户的身份认证.目前微博开 ...
- 第三方登录:QQ登录实现(OAuth2.0)
一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...
- 第三方登录 QQ登录 人人网登录 新浪微博登录
http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...
- QQ联合登录(基于Oauth2.0协议)
1. 获取授权码Authorization Code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= ...
- 新浪微博API Oauth2.0 认证
原文链接: http://rsj217.diandian.com/post/2013-04-17/40050093587 本意是在注销账号前保留之前的一些数据.决定用python 爬取收藏.可是未登录 ...
- 微信一键登录(微信OAuth2.0)
1.注册微信开放平台https://open.weixin.qq.com,一定要清楚微信开放平台和微信公众平台是分别独立的,不能共用. 2.登录进入——管理中心,网站应用,创建网站应用.填写申请,企业 ...
- 第三方登录:微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- php微信开放平台--第三方网页微信扫码登录(OAuth2.0)
第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...
- 那些年,我们开发的接口之:QQ登录(OAuth2.0)
那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wu-jian 前言 开发这些年,做过很多 ...
- QQ登录(OAuth2.0)
QQ登录(OAuth2.0) 那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wujian ...
随机推荐
- day22(过滤器Filter)
过滤器 生命周期:初始化 -----过滤-------销毁 作用:过滤url ,特定字符 创建方式:实现一个接口继承Filter package com.baidu.filter; import ja ...
- web-day16
第16章WEB16-Listener&Filter篇 今日任务 使用过滤器完成自动登录的案例 使用过滤器统一网站的字符集编码 教学导航 教学目标 了解常见的监听器 理解过滤器的生命周期 能够使 ...
- thrift使用总结
转自 http://blog.csdn.net/qq_27784479/article/details/73250958 Apache Thrift软件框架用于可扩展的跨语言服务开发,简单来说就是RP ...
- listview 嵌套checkbox响应item点击和button点击事件
参考文档 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182280 一.主要要点 1. CheckBox的优先级比item高. ...
- python常用算法题
一: #计算平均数,中位数和众数 #coding:utf-8 #计算平均数,中位数和众数 import random lst = [random.randint(0,10) for i in rang ...
- Effective C++ 第二版 31)局部对象引用和函数内new的指针 32)推迟变量定义
条款31 千万不要返回局部对象的引用, 不要返回函数内部用new初始化的指针的引用 第一种情况: 返回局部对象的引用; 局部对象--仅仅是局部的, 在定义时创建, 在离开生命空间时被销毁; 所谓生命空 ...
- Linux vi 文本代码时显示行号或不显示行号
Linux vi 文本代码时显示行号或不显示行号 前提 安装了vim $vi ~/.vimrc 显示的话加上 set nu 不想显示的话可以注释掉 "set nu 之后 $source ~ ...
- shell 命令 修改hosts文件
hosts文件管理http地址和物理ip地址的映射关系. 开发spring cloud 项目时,遇到不能连接服务器部署的zk问题. 排查后发现,是本地的hosts文件没有添加这台机器的ip映射关系. ...
- [device-orientation] 使用手机设备的方向感应实现图片选择
<div class="main"> <h2>Device Orientation</h2> <table> <tbody&g ...
- spring注解方式 idea报could not autowire
删除项目的iml文件,然后mvn重新导入 reimport