Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >spring-authorization-server令牌放发源码解析

spring-authorization-server令牌放发源码解析

原创
作者头像
用户1219866
发布于 2022-06-12 13:38:56
发布于 2022-06-12 13:38:56
9940
举报
文章被收录于专栏:lenglenglengleng
Token 生成全流程
Token 生成全流程
代码语言:text
AI代码解释
复制
POST /auth/oauth2/token?grant_type=password&scope=server HTTP/1.1
Host: pig-gateway:9999
Authorization: Basic dGVzdDp0ZXN0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
username=admin&password=YehdBPev

⓪ 网关前置处理

验证码校验 ValidateCodeGatewayFilter.java 参考资料: 验证码配置开关 前端已加密的密码进行解密 PasswordDecoderFilter.java , 主要就是把如下图的 password 密文转成明文交由 SpringSecurity 处理

参考资料: 前端登录请求加密流程参考

① 客户端认证处理

  • 如上图在登录请求中会携带 Basic base64(clientId:clientSecret), 那么首先OAuth2ClientAuthenticationFilter 会通过调用 RegisteredClientRepository (数据库存储) 来判断传入的客户端是否正确

③ 正式接收登录请求

OAuth2TokenEndpointFilter 会接收通过上文 OAuth2ClientAuthenticationFilter 客户端认证的请求

④ 组装认证对象

AuthenticationConverter 会根据请求中的参数和授权类型组装成对应的授权认证对象

⑤ 登录认证对象

代码语言:text
AI代码解释
复制
public class XXXAuthenticationToken extends OAuth2ResourceOwnerBaseAuthenticationToken {

}

⑥ 授权认证调用

⑦ 核心认证逻辑

多用户体系匹配 UserDetailsService

密码匹配校验

用户状态校验

⑧ 用户查询逻辑

用户查询逻辑的多种实现形式 解耦: 通过 feign 查询其他系统获取并组装成 UserDetails 简单: 认证中心直接查询 DB 并组装成 UserDetails

⑨ 密码校验逻辑

默认支持加密方式如下:undefined{noop}密码明文undefined{加密特征码}密码密文undefinedPasswordEncoder 会自动根据特征码匹配对应的加密算法,所以上一步 ⑧ 查询用户对象组装成 UserDetails 需要特殊处理

代码语言:java
AI代码解释
复制
return new UserDetails(user.getUsername(),"{bcrypt}"+"数据库存储的密文");

⑩ 生成 OAuth2AccessToken

⑪ Token 存储持久化

当前 SAS 仅支持 JDBC 和内存 ,PIG 扩展支持 Redis 实现

⑫ 登录成功事件处理

基于 SpringEvent 事件处理,可以在这里做更多的处理 日志、个性化等处理逻辑

⑬ 请求结果输出 Token

代码语言:java
AI代码解释
复制
private void sendAccessTokenResponse(HttpServletRequest request, HttpServletResponse response,
			Authentication authentication) throws IOException {

		OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = (OAuth2AccessTokenAuthenticationToken) authentication;

		OAuth2AccessToken accessToken = accessTokenAuthentication.getAccessToken();
		OAuth2RefreshToken refreshToken = accessTokenAuthentication.getRefreshToken();
		Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();
		// 无状态 注意删除 context 上下文的信息
		SecurityContextHolder.clearContext();
		this.accessTokenHttpResponseConverter.write(accessTokenResponse, null, httpResponse);
	}

定义具体的输出返回格式等逻辑

本文配套源码: https://github.com/pig-mesh/pig

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pig4Cloud之登陆验证(二)发放token
上一篇介绍了客户端认证处理,那是令牌颁发的前提。这篇开始,我们就来研究下令牌颁发。
一觉睡到小时候
2022/12/07
1.1K0
【长文】Spring Cloud OAuth Token 生成源码解析
内容较长,spring security oauth 整个放发过程的类都有详细说明,建议大家保存后 慢慢阅读,或者当工具书查询
冷冷
2019/05/26
2.1K0
实战!Spring Boot Security+JWT前后端分离架构登录认证!
Spring security这里就不再过多介绍了,相信大家都用过,也都恐惧过,相比Shiro而言,Spring Security更加重量级,之前的SSM项目更多企业都是用的Shiro,但是Spring Boot出来之后,整合Spring Security更加方便了,用的企业也就多了。
码猿技术专栏
2024/01/29
1.1K0
实战!Spring Boot Security+JWT前后端分离架构登录认证!
认证鉴权与API权限控制在微服务架构中的设计与实现(二)
引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第二篇,本文重点讲解用户身份的认证与token发放的具体实现。本文篇幅较长,对涉及到的大部分代码进行了分析,可收藏于闲暇时间阅读,欢迎订阅本系列文章。 1. 系统概览 在上一篇 《认证鉴权与API权限控制在微服务架构中的设计与实现(一)》介绍了该项目的背景以及技术调研与最后选型,并且对于最终实现的endpoint执行结果进行展示。对系统架构虽然有提到,但是并未列出详细流程图。在笔者的应用场景中,Auth系统与网关进行结合。在网关出配置
aoho求索
2018/04/03
1.7K0
认证鉴权与API权限控制在微服务架构中的设计与实现(二)
Spring Cloud OAuth2 实现用户认证及单点登录
OAuth 2 有四种授权模式,分别是授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)、客户端模式(client credentials),具体 OAuth2 是什么,可以参考这篇文章。(http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)
古时的风筝
2019/10/24
2K0
Spring Cloud OAuth2 实现用户认证及单点登录
聊聊 OAuth 2.0 的 Token 续期处理
若上,当 前端拿着正确的(未过期且未使用过)refresh_token 去调用 认证中心的刷新 端点刷新时,会 触发RefreshTokenGranter, 返回新的 Token
冷冷
2020/03/23
3.4K0
从零开始的Spring Security Oauth2(二)
本文开始从源码的层面,讲解一些spring Security Oauth2的认证流程。本文较长,适合在空余时间段观看。且涉及了较多的源码,非关键性代码以…代替。 获取token 上一篇博客中我们尝试使用了password模式和client模式,有一个比较关键的endpoint:/oauth/token。从这个入口开始分析,spring security oauth2内部是如何生成token的。 首先开启debug信息: logging: level: org.springframework: DEB
程序猿DD
2018/02/01
1.1K0
从零开始的Spring Security Oauth2(二)
决定放弃 JWT 了!
JWT相信大家都有所了解,一种无状态的认证方式,因为JWT本身就能存储一些非敏感的身份信息,这种方式目前也被广泛使用,在陈某之前的Spring Cloud Gateway整合Spring Security OAuth2中使用的就是JWT。
码猿技术专栏
2023/08/10
7370
决定放弃 JWT 了!
spring Cloud微服务 security+oauth2认证授权中心自定义令牌增强,并实现登录和退出
在之前的博客我写了 SpringCloud整合spring security+ oauth2+Redis实现认证授权,本文对返回的token实现自定义增强令牌返回结果,以及对于oauth2存在Redis的数据进行解释。
共饮一杯无
2022/11/28
1.2K0
spring Cloud微服务 security+oauth2认证授权中心自定义令牌增强,并实现登录和退出
SpringCloud+SpringBoot+OAuth2+Spring Security+Redis实现的微服务统一认证授权
因为目前做了一个基于 Spring Cloud 的微服务项目,所以了解到了 OAuth2,打算整合一下 OAuth2 来实现统一授权。关于 OAuth 是一个关于授权的开放网络标准,目前的版本是 2.0,这里我就不多做介绍了。
程序员小猿
2021/11/23
1.4K0
Spring Security OAuth 个性化token
如上代码,在拼装好token对象后会调用认证服务器配置TokenEnhancer( 增强器) 来对默认的token进行增强。
冷冷
2019/02/19
9220
Spring Security---Oauth2详解
在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:
大忽悠爱学习
2021/12/07
4.7K0
Spring Security---Oauth2详解
SpringCloud Alibaba微服务实战十八 - Oauth2.0 自定义授权模式
那么如何新增一个自定义的授权模式,比如像下面这样根据手机号和短信验证码进行登录呢?
JAVA日知录
2020/07/31
2.6K0
SpringCloud Alibaba微服务实战十八 - Oauth2.0 自定义授权模式
实战!Spring Boot Security+JWT前后端分离架构认证登录,居然还有人不会?
前后端分离不同于传统的web服务,无法使用session,因此我们采用JWT这种无状态机制来生成token,大致的思路如下:
爱撒谎的男孩
2023/08/28
4K0
实战!Spring Boot Security+JWT前后端分离架构认证登录,居然还有人不会?
Spring security oauth2的认证流程
AuthorizationServerConfigurerAdapterm默认方法配置
用户1499526
2019/08/20
3.1K0
Spring Security Oauth2 单点登录案例实现和执行流程剖析
OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本。OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(authorization layer)。“客户端”不能直接登录“服务提供商”,只能登录授权层,以此将用户与客户端分离。“客户端”登录需要获取OAuth提供的令牌,否则将提示认证失败而导致客户端无法访问服务。关于OAuth2这里就不多作介绍了,网上资料详尽。下面我们实现一个 整合 SpringBoot 、Spring Security OAuth2 来实现单点登录功能的案例并对执行流程进行详细的剖析。
朝雨忆轻尘
2019/06/19
2.8K0
Spring Security Oauth2 单点登录案例实现和执行流程剖析
【小技巧】spring security oauth2 令牌实现多终端登录状态同步
解决不同客户端使用token,各个客户端的登录状态必须保持一致,退出状态实现一致。同上述问题类似如何解决不同租户相同用户名的人员的登录状态问题。
冷冷
2019/09/23
1.9K0
【小技巧】spring security oauth2 令牌实现多终端登录状态同步
【小技巧】spring security oauth2 令牌实现多终端登录状态同步
解决不同客户端使用token,各个客户端的登录状态必须保持一致,退出状态实现一致。同上述问题类似如何解决不同租户相同用户名的人员的登录状态问题。
冷冷
2019/09/20
2.7K0
Spring Security OAuth 2.0 发放令牌接口地址自定义
OAuth 2.0 如何获取令牌 以密码模式为例,获取 Token curl --location --request POST 'http://oauth-server/oauth/token' \ --header 'Authorization: Basic dGVzdDp0ZXN0' \ --data-urlencode 'username=admin' \ --data-urlencode 'password=123456' \ --data-urlencode 'scope=server' \ -
冷冷
2020/05/18
2K0
Spring Security OAuth 2.0  发放令牌接口地址自定义
Spring Security 系列(2) —— Spring Security OAuth2
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
求和小熊猫
2022/06/30
6.2K0
推荐阅读
相关推荐
Pig4Cloud之登陆验证(二)发放token
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档