SpringSecurity实战(七)-对接第三方登陆-流程分析
文章目录
- 目标
- 第三方登陆流程
- 登陆流程
- 必要概念了解
- 授权码模式(Authorization Code)
- 实现第三方登陆框架
目标
了解第三方登陆流程
参考:如何在Markdown中画流程图
关于第三方登录,你应该知道的Spring Security 实战 书籍
JustAuth与用户系统整合
本文分三篇来介绍第三方登陆的实现。
第三方登陆流程
许多人应该对第三方登陆不陌生,当你登陆某网站,会发现在登陆选项中,允许使用其他平台账户登陆。比如微信,QQ,微博等方式。
登陆流程
以Gitee 这个网站的第三方登陆示例:我们希望通过Github账户,登陆Gitee网站。
大致分为三步:
1,点击github登陆,跳转到Github授权页面(如果已经绑定了该Github账户,会直接登陆成功,跳转到gitee的主页)
2,点击授权按钮,允许Gitee获取当前用户的信息。
3,跳转到Gitee的登陆绑定页面,绑定账户,实现登陆。(当然也可以不绑定本地账户,直接登陆成功。看业务定制需求)
必要概念了解
参考 :开箱即用的整合第三方登录的开源组件 建议将必读部分阅读完成 或者阅读 Spring Secuirty 第三部分内容
建议先阅读上述内容。
第三方登陆的实现基于OAuth2 协议来实现:
OAuth 开发授权(Open Authorization)
OAuth 解决了在用户不提供密码给第三方应用的情况下,让第三方应用有权获取用户数据以及基本信息的难题。OAuth 分为OAuth 1.0 和 OAuth 2.0 ,OAuth1.0已经基本退出历史舞台,所以了解OAuth 2.0即可。
OAuth2 的授权流程大致分为四种角色:
资源所有者(Resource Owner):通常指用户自己,例如每一个Github用户
客户端(Client):指需要获取用户资源的网站,上述的 Gitee 网站就是客户端。
资源服务器(Resource Server):指存储了用户资源的服务器,上述的Github网站就存储了你的用户信息
认证服务器(Authorization Server): 验证资源所有者(用户信息),并在验证成功后发放相关访问令牌(Access Token)给客户端。
资源服务器和认证服务器可以是同一个。
OAuth2 提供了四种授权机制:
Authorization Code 授权码模式
授权码模式是功能最完整、流程最严密的授权模式,它将用户引导到授权服务器进行身份验证,
授权服务器将发放的访问令牌传递给客户端。隐式授权模式(Implicit)
结合移动应用或 Web App 使用
密码授权模式(Password Credentials)
适用于受信任客户端应用,例如同个组织的内部或外部应用
客户端授权模式(Client Credentials)
适用于客户端调用主服务API型应用(比如百度API Store)
授权码模式(Authorization Code)
着重介绍一下这个模式流程,接下来的代码实现,都基于这种模式:(下图不是原图,修改了部分)
+----------+| Resource || Owner || 用户 |+----------+^|(B)+----|-----+ Client Identifier +---------------+| -+----(A)-- & Redirection URI ---->| || User- | | Authorization || Agent -+----(B)-- User authenticates --->| Server || 用户代理 | | 认证服务器 || -+----(C)-- Authorization Code ---<| |+-|----|---+ +---------------+| | ^ v(A) (C) | || | | |^ v | |+---------+ | || |>---(D)-- Authorization Code ---------' || | & Redirection URI || | || |<---(E)----- Access Token -------------------'| Client | (w/ Optional Refresh Token)| 客户端 || | +---------------+| |----(F)------ Access Token -------->| Resource || | | Server || |<---(G)-- Protected Resource -------| 资源服务器 |+---------+ +---------------+
参见:授权码
用户代理(User-Agent),可以理解为web浏览器。这里依然以 Gitee网站使用Github账户登录举例。
Github 授权OAuth应用 文档
A:用户发起第三方登陆请求,客户端通过浏览器请求认证服务器地址,并携带了客户端id(Client Identifier)和回调地址(Redirection URI)参数,认证服务器在浏览器端显示,授权页面。(图示第二个图)
Github 的请求用户身份地址,携带了client_id和redirect_uri的参数:
GET https://github.com/login/oauth/authoriz?client_id=e1015c0a10dc5e11b718&redirect_uri=http://localhost:8081/api/v1/oauth/callback/github
B:用户选择是否授予访问权限
C:点页面上的同意,认证服务器会回调客户端Redirection URI这个地址,并携带code 参数返回
Github 回调客户端地址:
GET http://localhost:8081/api/v1/oauth/callback/github?code=28ba84fe6fbbb895f1e6&state=a885aad30100738a7d26018f9ec52c17
D: 客户端获得认证服务器返回的code 参数,然后再发送获取令牌请求到认证服务器,并携带code参数
Github 获取token的请求:需要三个参数
POST https://github.com/login/oauth/access_tokenclient_id string 需要。您从GitHub收到的GitHub App的客户端ID。
client_secret string 需要。您从GitHub收到的GitHub App的客户密码。
code string 需要。您收到的作为对步骤1的响应的代码。
E: 认证服务器根据code等参数,返回 access_token
F:客户端拿着 access_token 去请求资源服务器
Github 获取用户信息请求:
Authorization: token OAUTH-TOKEN
GET https://api.github.com/user
G:资源服务器返回受保护的资源,也就是目标用户信息
参数解释:
clientId 客户端身份标识符(应用id),一般在申请完Oauth应用后,由第三方平台颁发,唯一
clientSecret 客户端密钥,一般在申请完Oauth应用后,由第三方平台颁发
redirectUri 开发者项目中的有效api地址。用户在确认第三方平台授权(登录)后,第三方平台会重定向到该地址,并携带code等参数
实现第三方登陆框架
Spring Social
Spring Social是一个专门用于连接社交平台,实现OAuth服务共享的框架。
github地址:https://github.com/spring-projects/spring-social
被spring官方抛弃,不建议使用,已经很长时间没有更新了。
spring官方为什么放弃spring social项目及替代方案
JustAuth
JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy!
github地址:https://github.com/justauth/JustAuth
国人开发,不断更新中,不依赖于Spring 框架,支持国内大多数平台的登陆,使用还是很简单的,如果不对接Spring Security框架推荐使用。
Spring Security OAuth2
默认提供了对Goole,Github,Facebook,Okta 这些平台的第三方登陆支持,如果需要定制其他第三方登陆增加代码实现即可。
github地址:https://github.com/spring-projects/spring-security
提供了Oauth2的解决方案,如果用于对接Spring Security 建议使用。
文档:spring -security官方Oauth2文档示例
听说点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!!
点我领取每日福利
微信公众号:耿子blog
GitHub地址:gengzi
SpringSecurity实战(七)-对接第三方登陆-流程分析相关推荐
- Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文
目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...
- Android对接第三方登陆+支付(google+facebook)
由于近期项目,要用到google+登陆和google play商店应用内商品支付,以及facebook登陆 所以经过查看官网介绍和示例应用来实现下其中的功能, 下面是使用中遇到的问题,希望对你有用! ...
- PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析
PKMS启动详解(七)之BOOT_PROGRESS_PMS_SYSTEM_SCAN_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系 ...
- PackageManagerService启动详解(三)之开始初始化阶段流程分析
PKMS启动详解(三)之BOOT_PROGRESS_PMS_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)
目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...
- Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(下)
目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.初始化特定上下文子类中的其他特殊bean 2.1.初始化主体资源 2.2.创建web服务 三.检查监听器bean并注册它们 四.实 ...
- SpringSecurity - 启动流程分析(八)- CsrfFilter 过滤器
活动地址:CSDN21天学习挑战赛 前言 在 SpringSecurity - 启动流程分析(五)- (七) 这几篇文章中,我们主要是对 UsernamePasswordAuthenticat ...
- springSecurity的学习笔记--使用spring-Security完成表单登陆,手机验证码登陆,第三方登陆
环境搭建好后,之后的练习进入了一个十分痛苦的阶段!! 但是与此同时,收获也是比较可观的. 老师通过详细的视频讲解,完成了表单登陆,包括账号密码和验证码登陆,手机验证码登陆,第三方登陆. 每一个部分都进 ...
- 新浪微博第三方登陆开发流程及常见问题
搞一个新浪微博第三方登陆费了我半天时间,现在把它的流程简单写一下,希望读者可以少走弯路. 大部分第三方登陆都是采用OAuth2.0接入方式(详见),我们所开发的网站项目可以使用两种方式进行接入: (1 ...
- ArcGIS水文分析实战教程(13)流域提取流程
ArcGIS水文分析实战教程(13)流域提取流程 本章导读:这里的流域是一个自然概念,而不是行政概念,或者称之为集水区更加合理一些.在流域提取中,其过程都是先定义河流然后才能通过河流定义流域.其中流域 ...
最新文章
- st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
- Java开发2018年值得学习的10大技术
- 20135316王剑桥 linux第六周课实验笔记
- BZOJ 2631 tree(动态树)
- nginx服务器部署dist文件夹
- Atitit 2017年第68界机器视觉图像处理学术大会会议记要attilax总结自建学院自颁学位理论
- 学习总结-《父与子的编程之旅》chapter 18
- 关于keystore 文件生成PK8+PEM文件
- VS2003安装步骤及其错误
- pci-e服务器显卡性能,旗舰显卡不同PCI-E模式下性能对比测试
- php代码审计命令执行,PHP代码审计笔记--命令执行漏洞
- 蚂蚁微贷互动营销技术体系实践
- 电脑桌面计算机找不到,电脑桌面没有了怎么恢复?电脑桌面没有了的恢复方法...
- win7搜不到特定网络
- golang —— go语言科学记数法使用
- CentOS Linux 续存,在新的 AlmaLinux 9 中发光发热
- ngrok转发mysql连接_ngrok内网转发
- C语言初阶-C语言中static的用法
- 悔不当初:没人能随随便便成功
- python个人所得税怎么写分录_个人所得税的凭证分录怎么写