Springboot集成第三方登录(facebook,linkedin,github)
OAuth2.0的第三方登录集成
本文处理方式适用于java服务端REST API
一,了解OAuth2.0
OAuth2.0是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
而且本文涉及到的授权模式都是采用授权码模式(authorization code):
它的步骤如下:
(A)用户访问客户端,后者将前者导向认证服务器。
(B)用户选择是否给予客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。
下面是上面这些步骤所需要的参数。
A步骤中,客户端申请认证的URI,包含以下参数:
- response_type:表示授权类型,必选项,此处的值固定为"code"
- client_id:表示客户端的ID,必选项
- redirect_uri:表示重定向URI,可选项
- scope:表示申请的权限范围,可选项
- state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
C步骤成功后,会返回一个授权码给你,即code,比如:
http://localhost:8091/b2bbuyer/thirdUser?code=AQSHW3H0TNFil9BaO3YgQut7yKW24nit9gz0VWuU7qPDg99tI7S9Vfh9QArtWPLAvsMMzOAkLosUt0USsDZ24iwSWVwpWaHIccVqpirVeNMS84-0vr0&state=987654321
此处你拿到code,就可以进行D步骤了。
E步骤会返回一个access_token,表示访问令牌。通过这个令牌,就可以进行获取信息操作了,比如:
二,获取应用参数
那么现在,我们就来以linkedin为例,开始配置一个应用吧。
1,使用linkedin账户登陆linkedin开发者中心,在My Apps下面创建一个自己的应用,并配置好授权重定向网址:
验证密钥
客户端编号: 81y22zvqidpz3
客户端密码: kDdSjSaCQeNt2nU
三,手动获取登录信息
###1,在浏览器请求url:https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=81y22zvqid2pz3&redirect_uri=http://localhost:8091/loginn/linkedin&state=987654321,client_id就是刚刚申请的应用的客户端编号。
###2,在跳转的页面输入linkedin账号和密码,确认授权之后,会跳转到刚才传的redirect_uri,并且带上code,example:
http://localhost:8091/b2bbuyer/thirdUser?code=AQSHW3H0TNFil9BaO3YgQut7yKW24nit9gz0VWuU7qPDg99tI7S9Vfh9QArtWPLAvsMMzOAkLosUt0USsDZ24iwSWVwpWaHIccVqpirVeNMS84-0vr0&state=987654321
###3,拿到code,20秒内在postman中发送请求,example:
###4,用获取的access_token,在postman中请求,example:
结果如下:
{
“firstName”: “阿兰”,
“formattedName”: “冯阿兰 (Alan Feng)”,
“id”: “OBXrP4h10N”,
“lastName”: “冯”,
“numConnections”: 1
}
四,使用Spring Cloud OAuth2
1,阅读Spring官方的Spring boot 集成OAuth2文档,download code from github.
2,引入注解@EnableOAuth2Client
,添加application.yml配置文件。example:
application.yml
3,读取配置文件参数:
class ClientResources {@NestedConfigurationPropertyprivate AuthorizationCodeResourceDetails client = new AuthorizationCodeResourceDetails();@NestedConfigurationPropertyprivate ResourceServerProperties resource = new ResourceServerProperties();public AuthorizationCodeResourceDetails getClient() {return client;}public ResourceServerProperties getResource() {return resource;}
}
4,添加filter
private Filter ssoFilter(ClientResources client, String path) {ExtOAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationFilter = new ExtOAuth2ClientAuthenticationProcessingFilter(path);oAuth2ClientAuthenticationFilter.setAuthenticationSuccessHandler(successHandler());oAuth2ClientAuthenticationFilter.setAuthenticationFailureHandler(failureHandler());OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);oAuth2ClientAuthenticationFilter.setRestTemplate(oAuth2RestTemplate);ExtUserInfoTokenServices tokenServices = new ExtUserInfoTokenServices(client.getResource().getUserInfoUri(),client.getClient().getClientId());tokenServices.setRestTemplate(oAuth2RestTemplate);oAuth2ClientAuthenticationFilter.setTokenServices(tokenServices);return oAuth2ClientAuthenticationFilter;}
@Bean@ConfigurationProperties("linkedin")public ClientResources linkedin() {return new ClientResources();}@Bean@ConfigurationProperties("facebook")public ClientResources facebook() {return new ClientResources();}private Filter ssoFilter() {CompositeFilter filter = new CompositeFilter();List<Filter> filters = new ArrayList<>();filters.add(ssoFilter(linkedin(), "/login/linkedin*"));filters.add(ssoFilter(facebook(), "/login/facebook"));filter.setFilters(filters);return filter;}
最后,在configure方法里,把filter添加进去:
http.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
五,集成Spring security问题处理
1,如何跳转到前端指定的url,而不是OAuth默认的链接
2,HeaderHttpSessionStrategy的方式会使无法保存授权通过的session
3,如何区分第三方登录的类型(Facebook or linkedin)
4,如何将拿到的登录信息写入Authentication的Principal
5,OAuth2如何将token信息写入redis
以上问题,以后作解
Springboot集成第三方登录(facebook,linkedin,github)相关推荐
- SpringBoot 集成第三方登录(微信、支付宝)
SpringBoot 集成第三方登录 微信 1. 登录微信开发平台 1.在微信开发平台里面获取我们需要的AppID.AppSecret . 2.创建配置类 3. 开始自己的业务模块 1. 方便测试 支 ...
- SpringBoot项目中集成第三方登录功能
SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...
- 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)
第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...
- Spring Boot 快速集成第三方登录功能
Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...
- SpringBoot 集成第三方聚合支付 微信、支付宝
SpringBoot 集成第三方聚合支付 1. 创建Spring Boot项目 2. 添加依赖 3. 配置支付宝.微信 4. 实现支付接口 5. 实现支付服务 6. 实现支付回调接口 7. 测试支付 ...
- Springboot集成社交登录功能(微博登录)以及Session共享
Springboot集成社交登录功能 pom <dependency><groupId>org.apache.httpcomponents</groupId>< ...
- 网站集成第三方登录-微信登录
网站集成第三方登录-微信登录 课程介绍 1. 第三方登录引入介绍; 2. 网站微信登录原理(重点);oauth2 3. 网站微信登录具体步骤(重点); 4. 常见疑问解答; 5. 功能实现 ...
- android 第三方登录界面,Android App集成第三方登录与换肤指南
Android App集成第三方登录与换肤指南 文档编辑 概述 本文主要是介绍了如何通过开源框架快速支持QQ和微信登录,并介绍了如何实现app快速换肤 QQ登录接入 APP要支持QQ登录,需要先到腾讯 ...
- Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍
开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...
最新文章
- 【408预推免复习】计算机网络(谢希仁第七版)第二章——物理层
- axios请求拦截 做Loading加载
- stm32 内部sram大小_在SRAM、FLASH中调试代码的配置方法(附详细步骤)
- java map class_Java:声明一个包含两个相关泛型类型的Map(Map,Class ?extends ClassB )...
- javascript 面试题之一
- 搭建远程jupyter服务器并从本地连接,有浏览器的地方就有Python!
- python小软件实例教程_【趣味案例】用Python做一个时光回忆录小软件,女朋友当场流泪说非我不嫁!...
- html画图代码_python之matplotlib画图教程(1)
- 3Eclipse的下载、安装、配置
- Xianfeng轻量级Java中间件平台:权限管理
- OpenInventor笔记:线性坐标轴PoLinearAxis的使用
- 教学流程图怎么画?画流程图好用的软件
- 5G通信网络专题报告:新一轮移动通信网络建设迎来高潮
- 如何下载百度地图离线包并导入OruxMaps
- 学习Flutter:Hello Word篇
- oracle字符集问题
- c语言解除宏定义_3.3.5 取消宏定义和重新定义宏
- 密码学技术如何选型?终探量子计算通信的安全模型
- hello yocto
- js中国标准时间转换为yyyy-MM-dd
热门文章
- 如何在Linux虚拟器里新建跟目录,虚拟机linux 6 增加根目录
- ios mj_refresh 上拉、下拉、自定义header、footer、afn子类化
- 全国职业计算机学校排名,2020全国最好的计算机专业学校排名
- 【比特鹏哥C语言_1.初识C语言】
- 基于matlab的多元线性回归分析
- 0成本无VPS搭建私人导航、图床、音乐服务器 | vercel freewha
- 细谈keep_alive
- Linux之《荒岛余生》(三)内存篇
- 安卓设置keychain_共享keychain数据
- UCF Local Programming Contest 2016 计蒜客解(补)题报告