Spring Authorization Server 自定义 OAuth2 密码模式返回数据结构优化

Spring Authorization Server:OAuth 2.1与OpenID Connect实现 Spring Authorization Server为Java开发者提供了一个功能完备的OAuth 2.1和OpenID Connect实现,满足了现代企业对认证授权的严格要求。通过灵活的架构设计和丰富的扩展点,它支持从简单场景到复杂企业环境的各种需求。OAuth 2.1的安全增强特性,如PKCE、刷新令牌轮换和重定向URI验证,提高了授权流程的安全性。OpenID Connect的支持简化了身份验证与授权的集成,使系统能够安全地识别用户并授予适当的访问权限。 阅读详情

前言

对接了自定义密码模式,但是返回的数据结构不符合要求

我们需要改成下面格式

开始

我假设你已经对接好了自定义密码功能,不会的话看下面文章

Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)-阿里云开发者社区https://blog.51cto.com/u_15268610/6858078Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)-阿里云开发者社区

重写✅ AuthenticationSuccessHandler 和❌ AuthenticationFailureHandler 的逻辑,就能够自定义认证成功和认证失败时的响应数据格式

config/AuthorizationServerConfig

.accessTokenResponseHandler(new MyAuthenticationSuccessHandler()) // 自定义成功响应
.errorResponseHandler(new MyAuthenticationFailureHandler()) // 自定义失败响应

 handler/MyAuthenticationSuccessHandler

package org.oauth.server.handler;




import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.oauth.server.utils.ResponseResult;
import org.springframework.core.convert.converter.Converter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
import org.springframework.security.oauth2.core.endpoint.DefaultOAuth2AccessTokenResponseMapConverter;
import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;


import java.io.IOException;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;


/**
 * @author Rommel
 * @version 1.0
 * @date 2023/8/2-8:17
 * @description TODO
 */
@Component
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    /**
     * 自定义认证成功响应数据结构
     * @param request the request which caused the successful authentication
     * @param response the response
     * @param authentication the <tt>Authentication</tt> object which was created during
     * the authentication process.
     * @throws IOException
     * @throws ServletException
     */
    private final HttpMessageConverter<Object> accessTokenHttpResponseConverter = new MappingJackson2HttpMessageConverter();
    private Converter<OAuth2AccessTokenResponse, Map<String, Object>> accessTokenResponseParametersConverter = new DefaultOAuth2AccessTokenResponseMapConverter();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        System.out.println("succ!!!!!");
        OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = (OAuth2AccessTokenAuthenticationToken) authentication;

        OAuth2AccessToken accessToken = accessTokenAuthentication.getAccessToken();
        OAuth2RefreshToken refreshToken = accessTokenAuthentication.getRefreshToken();
        Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();

        OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue()).tokenType(accessToken.getTokenType());

        if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
            builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
        }
        if (refreshToken != null) {
            builder.refreshToken(refreshToken.getTokenValue());
        }
        if (!CollectionUtils.isEmpty(additionalParameters)) {
            builder.additionalParameters(additionalParameters);
        }

        OAuth2AccessTokenResponse accessTokenResponse = builder.build();

        Map<String, Object> tokenResponseParameters = this.accessTokenResponseParametersConverter.convert(accessTokenResponse);

        ServletServerHttpResponse httpResponse = new ServletServerHttpResponse(response);

        System.out.println(tokenResponseParameters);

        assert tokenResponseParameters != null;

        Map<String, String> map = new HashMap<String, String>();
        map.put("code", "200");
        map.put("data", String.valueOf(tokenResponseParameters));
        map.put("msg", "加密成功");
        this.accessTokenHttpResponseConverter.write(map, null, httpResponse);
//        ResponseResult.exceptionResponse(response, "aaa");
    }


}

Spring Authorization Server自定义密码模式:突破标准OAuth2限制,实现MFA与复杂业务集成 OAuth 2.0授权框架是构建现代应用安全体系的基石,其密码模式(Resource Owner Password Credentials Grant)提供了一种直接的资源所有者凭证交换令牌的机制。该模式的核心原理是客户端收集用户密码并直接向授权服务器请求访问令牌,适用于受信任的客户端场景。在技术价值上,它简化了某些传统应用的OAuth集成流程。然而,标准实现往往难以满足复杂的现实业务需求,例如需要集成多因素认证(MFA)、对接外部LDAP目录服务或执行自定义密码加密校验等场景。Spring Authori 阅读详情

相关推荐

微服务-微服务Spring Security OAuth 2实战

OAuth 2.0 (Open Authorization)是一种开放标准的授权协议,允许用户授权第三方应用访问其在某个服务提供者上的受保护资源,而无需将其实际的凭证(如用户名和密码)分享给第三方应用。这种方式可以增加安全性,同时允许用户更好地控制其数据的访问权限。

weixin_43874650的博客 2293

Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战

本文基于开源微服务商城项目 youlai-mall、Spring Boot 3 和 Spring Authorization Server 1.1 版本,演示了如何扩展密码模式,以及如何将其应用于 Spring Cloud 微服务实战。

有来技术 1万+

Spring Authorization Server自定义密码模式:扩展多因子认证与风控集成

OAuth 2.0是现代应用安全授权的核心标准,其密码模式允许客户端使用资源所有者的凭证直接交换访问令牌。然而,标准实现通常基于简单的用户名密码验证,难以适应复杂的业务场景。在实际工程实践中,企业往往需要支持短信验证码、扫码登录等多因子认证方式,并集成风控策略和审计日志。通过自定义AuthenticationConverter和AuthenticationProvider,开发者可以在Spring Authorization Server框架下灵活扩展认证流程,实现策略模式驱动的多登录方式支持。这种自定义方

weixin_30932215的博客 362

Spring Authorization Server扩展实现OAuth2.0的密码模式

Spring官方已经停止对Spring Security Oauth2的维护,项目和相关文档也被移除Spring Authorization Server是官方新推出的OAuth2.1和OpenID Connect1.0的实现两个主要的版本,0.4.x:jdk8。1.x: jdk17这里用的版本是0.4.1OAuth2.0已经不在推荐使用密码模式,OAuth2.1已经废除密码模式,这是为了安全考虑。

admin_15082037343的博客 3503

微服务安全——OAuth2.1详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

Spring Authorization Server 是一个框架,它提供了OAuth 2.1和规范以及其他相关规范的实现。它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供了一个安全、轻量级和可定制的基础。说白了,Spring Authorization Server 就是一个认证(授权)服务器。

web15117360223的博客 2424

Spring Authorization Server实现短信验证码登录的OAuth2扩展方案

OAuth2作为现代应用认证授权的事实标准,其扩展机制允许开发者自定义grant_type以满足特定业务场景。通过实现AuthenticationConverter、AuthenticationProvider等核心组件,可以构建符合OAuth2规范的认证流程。短信验证码登录作为常见的替代密码方案,既能提升安全性又符合用户体验需求。在Spring生态中,Spring Authorization Server提供了完善的扩展点,开发者只需实现标准接口即可集成自定义认证方式。这种方案特别适合需要兼容老系统但又要

weixin_30875157的博客 451

Spring Authorization Server 自定义授权模式

自定义 Spring Authorization Server 授权模式 - 密码模式(password)

moresi的博客 4926

Spring Security 6.x 系列【42】授权服务器篇之自定义密码模式

Spring Authorization Server基于Oauth 2.1,不再支持passeord密码授权模式,对于使用了Spring Security Oauth框架的项目来说,很多都使用了密码模式,接下来我们自定义开发密码模式,其他自定义模式参照该流程实现即可。

记录知识、锤炼自我 1836

深入 Spring Authorization Server:为何需要自定义密码模式?

客户端直接向授权服务器发送用户名和密码来获取访问令牌。优点:简单易用,特别适合第一方应用。缺点:直接暴露用户名和密码,容易被攻击。遵循 OAuth 2.1 标准。通过自定义增强的扩展性设计,提供更灵活的实现方式。xml代码解读复制代码。

2401_89221445的博客 1177

基于Arduino的智能垃圾桶

通过本次简单的Arduino智能垃圾桶小实验可以快速了解Arduino的基本用法 1、材料准备 Arduino UNO HC-SR04超声波模块 SG90舵机 杜邦线 电源 电脑 2、代码分析 电机的控制 #include<Servo.h> #define duoji D5 Servo myduoji; void setup() { myduoji.attach(duoji); //舵机连接 Serial.begin(115200); } void loop() { myduoji.w

weixin_41679960的博客 1万+

迪文串口屏开发环境搭建全流程:从DGUS Tool到串口联调

串口屏作为嵌入式人机交互的核心组件,通过串口通信实现主控MCU与显示终端的指令交互。其工作原理基于变量地址映射,主控读写VP地址即可驱动屏上控件,兼具低功耗与高稳定性。在工业控制、医疗设备及智能家居面板等场景中,串口屏能显著降低开发门槛与硬件成本。迪文屏凭借DGUS Tool上位机与自定义串口协议,成为主流选择。掌握DGUS Tool版本匹配、串口驱动安装及VP地址规划,是快速搭建开发环境的关键。

weixin_33937499的博客 603

微服务安全Spring Security Oauth2实战_spring-security-oauth2-authorization-server

Authorization)是一种开放标准的授权协议,允许用户授权第三方应用访问其在某个服务提供者上的受保护资源,而无需将其实际的凭证(如用户名和密码)分享给第三方应用。这种方式可以增加安全性,同时允许用户更好地控制其数据的访问权限。OAuth 2.1 去掉了 OAuth 2.0 中的密码模式、简化模式,增加了设备授权码模式,同时也对授权码模式增加了 PKCE 扩展。OAuth 2.1 协议:<https://datatracker.ietf.org/doc/html/draft-ietf-

baimao__Ch的博客 4487

基于Multisim设计电子密码锁

一、设计任务与要求:(可软件仿真实现)1)基本要求:设计一个数字密码锁,要求只有按正确的顺序,输入正确的密码,方能输出开锁信号,实现开锁。设置三个正确的密码键和若干个伪键,任何伪键按下后,密码锁都无法打开。每次只能接受四次按键信号,而且第四个键只能是“确定”或者“重输键”,其他无效。能显示已输入键的个数2)扩展要求:第一次密码输错后,可以输入第二次,但是连续三次输错,密码将被锁,必须按复位键才能解锁。

ablinger的博客 4417

Spring Authorization Server OAuth2.1

Spring Authorization Server 是一个框架,它提供了和规范以及其他相关规范的实现。因为随着网络和设备的发展,原先的 OAuth 2.0 已经不能满足现今的需求了,OAuth 社区对 OAuth 2.0 中的几种授权模式进行了取舍和优化,并增加一些新的特性, 于是推出了 OAuth 2.1,

小趴菜不能喝的博客 2042

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 183

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

Spring Security- 自定义 Oauth2 的授权服务器配置

Spring Security OAuth2 授权服务器配置指南 🚀 本文介绍了如何使用 Spring Security 构建自定义 OAuth2 授权服务器,涵盖了核心概念、技术栈准备、数据模型设计和实现流程。内容要点: OAuth2 基础:解释了 OAuth2 的四种授权模式和核心角色(资源拥有者、客户端、授权服务器、资源服务器) 自定义授权服务器的必要性:适用于需要完全控制认证流程、私有化部署或深度集成的场景 技术实现: 采用 Spring Authorization Server 模块 使用 H2

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

Spring Authorization Server实现短信验证码登录的OAuth2扩展

OAuth2是现代应用认证授权的标准协议,其核心是通过定义标准化的授权流程实现安全访问控制。Spring Authorization Server作为Spring生态的OAuth2实现,提供了灵活的扩展机制。在实际开发中,短信验证码登录是移动互联网时代的典型场景,通过自定义grant_type可以将其无缝集成到OAuth2体系中。这种方案既保持了协议规范性,又满足了业务需求,适用于电商、社交等需要手机号认证的场景。实现时需重点处理验证码校验、用户状态管理和Token生成等关键环节,同时要考虑生产环境下的安全

weixin_33841722的博客 323

SAP UI5 百科全书的目录

笔者 12 年 SAP UI5 开发岁月中写下的 595 篇 SAP UI5 学习笔记,全部收录到《SAP UI5 百科全书》专栏中去,目录如下。请大家按照自己的学习需要,根据关键字搜索到对应的文章,然后进行学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3827

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例

在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 657

微服务安全Spring Security Oauth2实战

Authorization)是一种开放标准的授权协议,允许用户授权第三方应用访问其在某个服务提供者上的受保护资源,而无需将其实际的凭证(如用户名和密码)分享给第三方应用。这种方式可以增加安全性,同时允许用户更好地控制其数据的访问权限。OAuth 2.1 去掉了 OAuth 2.0 中的密码模式、简化模式,增加了设备授权码模式,同时也对授权码模式增加了 PKCE 扩展。OAuth 2.1 协议:<https://datatracker.ietf.org/doc/html/draft-ietf-

zz12345600354的博客 3078

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

spring-security-oauth2-authorization-server(三)自定义登录页 + JDBC模式获取用户信息

获取数据库用户登录,自定义登录页面,解决用户对象反序列化白名单问题

weixin_42229668的博客 2557

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring Authorization Server:快速构建企业级OAuth2授权服务

Spring Authorization Server是Spring Security团队推出的开源OAuth2授权服务器实现,基于Spring Security 5.x构建,全面支持OAuth2.1和OpenID Connect 1.0规范。该项目让开发者能够轻松搭建安全、可扩展的授权服务,为现代应用提供完整的身份验证和授权解决方案。 ## 🔧 5分钟快速上手体验 想要立即体验Spring

gitblog_00067的博客 1029
上一篇: vue3 + antd + typeScript 封装一个高仿的ModalForm表单
下一篇: IDEA启动C:\Users\badboy\.jdks\corretto-17.0.7\bin\java.exe -Xmx700m报错
An_s
博客等级 码龄10年 665粉丝 363原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

An_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值