在《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)的更多相关文章

  1. 新浪微博 使用OAuth2.0调用API

    # -*- coding: cp936 -*- #python 2.7.10 #xiaodeng #新浪微博 使用OAuth2.0调用API #微博开放接口的调用,都需要获取用户的身份认证.目前微博开 ...

  2. 第三方登录:QQ登录实现(OAuth2.0)

    一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...

  3. 第三方登录 QQ登录 人人网登录 新浪微博登录

    http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...

  4. QQ联合登录(基于Oauth2.0协议)

    1. 获取授权码Authorization Code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= ...

  5. 新浪微博API Oauth2.0 认证

    原文链接: http://rsj217.diandian.com/post/2013-04-17/40050093587 本意是在注销账号前保留之前的一些数据.决定用python 爬取收藏.可是未登录 ...

  6. 微信一键登录(微信OAuth2.0)

    1.注册微信开放平台https://open.weixin.qq.com,一定要清楚微信开放平台和微信公众平台是分别独立的,不能共用. 2.登录进入——管理中心,网站应用,创建网站应用.填写申请,企业 ...

  7. 第三方登录:微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  8. php微信开放平台--第三方网页微信扫码登录(OAuth2.0)

    第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...

  9. 那些年,我们开发的接口之:QQ登录(OAuth2.0)

    那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wu-jian 前言 开发这些年,做过很多 ...

  10. QQ登录(OAuth2.0)

    QQ登录(OAuth2.0) 那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wujian ...

随机推荐

  1. js常见input校验

    //校验输入价格等,保留2位小数 function clearNoNum(obj){ obj.onkeyup = function(event){ var e = event || window.ev ...

  2. Objective-C的泛型

    WWDC2015的明星是Swift.在Swift语言到2.0以后会被开源,这其中包括了protocol扩展和一个新的错误处理API. 苹果的小baby已经长成,并且意料之中的获得了开发者的关注.但是在 ...

  3. sys/time.h 和 time.h

    今天在燕麦工作第二天.看荣哥给我的程序,发现程序里面用的延时跟我以前使用的不同.导入两个头文件,然后用函数来获得时间.关于这个函数特别查来一下. time.h  是ISO C99 标准日期头文件. s ...

  4. Android 响应menu,back键,点击外部消失

    点击外部消失,只需要设置popupWindow.setBackgroundDrawable(new PaintDrawable()); 设置 popupWindow.setFocusable(true ...

  5. sublime text配置node.js调试

    1. 首先到 nodejs.org 下载 Node.js 安装包并安装.2. 打开 Sublime Text 2 编辑器.选择菜单 Tools --> Build System --> n ...

  6. NoSQL数据库的分布式算法

    本文译自 Distributed Algorithms in NoSQL Databases 系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性 ...

  7. jQuery插件初级练习5

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  8. 编写高质量iOS与OS X代码的52个有效方法

    第一章重点: 第一条:OC的起源 OC由smalltalk语言演化而来的语言为消息结构(messaging structure)语言,其运行时所因执行的的代码由运行环境来决定:函数调用(functio ...

  9. hdu 1.2.4

    采用异或... #include<stdio.h> int main() { //freopen("input.txt","r",stdin); i ...

  10. this与$(this)对象

    this与$(this)对象.前者是Javascript对象,而后者是jQuery是对象.两者分清楚,它们只能使用自己的方法.Javascript对象使用Javascript的方法,jQuery对象使 ...