【聚看点】源码解析 | Spring 全新认证服务器发放令牌就是这么简单
POST /auth/oauth2/token?grant_type=password&scope=server HTTP/1.1Host: pig-gateway:9999Authorization: Basic dGVzdDp0ZXN0Content-Type: application/x-www-form-urlencodedContent-Length: 32username=admin&password=YehdBPev⓪ 网关前置处理
验证码校验 ValidateCodeGatewayFilter.java
参考资料: 验证码配置开关[1]
前端已加密的密码进行解密 ** PasswordDecoderFilter.java , 主要就是把如下图的 password 密文转成明文交由 SpringSecurity 处理**
① 客户端认证处理如上图在登录请求中会携带 Basic base64(clientId:clientSecret), 那么首先OAuth2ClientAuthenticationFilter 会通过调用 RegisteredClientRepository (数据库存储) 来判断传入的客户端是否正确③ 正式接收登录请求参考资料: 前端登录请求加密流程参考[2]
④ 组装认证对象OAuth2TokenEndpointFilter 会接收通过上文 OAuth2ClientAuthenticationFilter 客户端认证的请求
⑤ 登录认证对象AuthenticationConverter 会根据请求中的参数和授权类型组装成对应的授权认证对象
public class XXXAuthenticationToken extends OAuth2ResourceOwnerBaseAuthenticationToken {}⑥ 授权认证调用⑦ 核心认证逻辑多用户体系匹配 UserDetailsService密码匹配校验用户状态校验⑧ 用户查询逻辑
⑨ 密码校验逻辑用户查询逻辑的多种实现形式
解耦:通过 feign 查询其他系统获取并组装成 UserDetails简单: 认证中心直接查询 DB 并组装成 UserDetails
默认支持加密方式如下:{noop}密码明文{加密特征码}密码密文PasswordEncoder 会自动根据特征码匹配对应的加密算法,所以上一步 ⑧ 查询用户对象组装成 UserDetails 需要特殊处理
returnnewUserDetails(user.getUsername(),"{bcrypt}"+"数据库存储的密文");⑩ 生成 OAuth2AccessToken⑪ Token 存储持久化
⑫ 登录成功事件处理当前 SAS 仅支持 JDBC 和内存 ,PIG 扩展支持 Redis 实现
⑬ 请求结果输出 Token基于 SpringEvent 事件处理,可以在这里做更多的处理 日志、个性化等处理逻辑
(资料图片)
privatevoidsendAccessTokenResponse(HttpServletRequestrequest,HttpServletResponseresponse,Authenticationauthentication)throwsIOException{OAuth2AccessTokenAuthenticationTokenaccessTokenAuthentication=(OAuth2AccessTokenAuthenticationToken)authentication;OAuth2AccessTokenaccessToken=accessTokenAuthentication.getAccessToken();OAuth2RefreshTokenrefreshToken=accessTokenAuthentication.getRefreshToken();MapadditionalParameters=accessTokenAuthentication.getAdditionalParameters();//无状态注意删除context上下文的信息SecurityContextHolder.clearContext();this.accessTokenHttpResponseConverter.write(accessTokenResponse,null,httpResponse);}
定义具体的输出返回格式等逻辑
参考资料[1]本文配套源码: https://github.com/pig-mesh/pig
验证码配置开关: https://www.yuque.com/pig4cloud/pig/bhfu69
[2]前端登录请求加密流程参考: https://www.yuque.com/pig4cloud/pig/kulge8
配套视频DataV 数据可视化解决方案相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...