学习笔记:微服务13 spring boot2.x oauth2-client

springboot整合Oauth2 Spring Boot可以与Oauth2集成以提供安全的身份验证和授权。 阅读详情

前面oauth2 server设置好了,登录oauth2 server正常,但另外建一个oauth2 client 总是不能登录认证,网上说是spring boot 2 中去除了@EnableOAuth2Sso注解,今天终于找到适合我的spring boot 2.11的oauth2 client,实现了客户端认证。

1.新建spring start project 项目,我命名为microservice-oauth2-client-8805

2.pom.xml,上全文吧

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.linbsoft</groupId>
	<artifactId>microservice-oauth2-client-8805</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>microservice-oauth2-client-8805</name>
	<description>Demo project for Spring Boot microservice-oauth2-client-8805</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.M3</spring-cloud.version><!-- Finchley.M8 -->
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
      <dependency> 
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
       </dependency>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>     
         <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-client</artifactId>
        </dependency>      
       <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-jose</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>       
       
 
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
		<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

3. application.peoperties

server.port: 8805
spring.application.name=MicroserviceOauth2Client8805
spring.cloud.discovery.enabled=true
eureka.client.serviceUrl.defaultZone=http://admin:123@centos7.linbsoft.com:8101/eureka/,http://admin:123@microservice1.linbsoft.com:8102/eureka/
# logging.level.root= debug

spring.security.oauth2.client.registration.my-client-1.client-id=admin
spring.security.oauth2.client.registration.my-client-1.client-secret=123456
spring.security.oauth2.client.registration.my-client-1.client-name=admin
spring.security.oauth2.client.registration.my-client-1.scope=read
spring.security.oauth2.client.registration.my-client-1.redirect-uri=http://microservice1.linbsoft.com:8805/login/oauth2/code/callback
spring.security.oauth2.client.registration.my-client-1.client-authentication-method=basic
spring.security.oauth2.client.registration.my-client-1.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.my-client-1.provider=my-oauth-provider
spring.security.oauth2.client.provider.my-oauth-provider.authorization-uri=http://centos7.linbsoft.com:8301/oauth/authorize
spring.security.oauth2.client.provider.my-oauth-provider.token-uri=http://centos7.linbsoft.com:8301/oauth/token
spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=http://centos7.linbsoft.com:8301/user
spring.security.oauth2.client.provider.my-oauth-provider.user-name-attribute=name

这里要注意的是redirect-uri 和 oauth2 server不要相同域名,这个后面会说到为什么

4. 创建测试资源 ExampleController类

@RestController
public class ExampleController {

    @RequestMapping("/")
    public String email(Principal principal) {
        return "Hello " + principal.getName();
    }
    @RequestMapping("/hello")
    public String emailaa(Principal principal) {
        return "Hello1 " + principal.getName();
    }
}

5.修改 oauth2 server 增加对这个网站的回地址注册

在这个public void configure(ClientDetailsServiceConfigurer clients) 里

       clients.inMemory()
                .withClient("admin")
                .scopes("read")
                .secret(new BCryptPasswordEncoder().encode("123456"))
                .redirectUris("http://centos7.linbsoft.com:8301","http://microservice1.linbsoft.com:8805/login/oauth2/code/callback")
                .authorizedGrantTypes("password", "authorization_code", "refresh_token")

加入了http://microservice1.linbsoft.com:8805/login/oauth2/code/callback

6. 测试

结果出错了,提示[authorization_request_not_found]

后来看到网友文章说是定位到session=null,有个说法是因为oauth2客户端和服务端以都在同一个服务器地址,都在同一个浏览器,网友的原话是【这些错误意味着没有找到授权请求。 authorization request存储在会话中,所以一些会话没有被存储。 默认情况下会话由cookie管理。所以我认为这可能是因为你正在本地主机上运行所有东西,所以第一个cookie由localhost:8080设置以存储授权请求会话数据,并且当你登录到localhost:8081时,它将为其会话设置另一个cookie。】

怎么解决呢,想到的是把oauth2客户端和服务端的域名区分开来,因此,虽然在同一个ip,但设置两个域名:

192.168.49.141    centos7.linbsoft.com
192.168.49.141    microservice1.linbsoft.com
然后,oauth2 server 按部署在centos7.linbsoft.com:8301使用,而oauth2 client 按部署在microservice1.linbsoft.com:8805上使用,果然正常了。

oauth2客户端顺利登录oauth2服务器认证后访问客户端保护资源

 

 

<artifactId>spring-boot-starter-oauth2-client</artifactId> 是 Spring Boot 提供的一个起步依赖 spring-boot-starter-oauth2-client 是 Spring Boot 提供的一个起步依赖,用于简化 OAuth2 客户端的集成。通过引入这个 starter,开发者可以快速配置和实现 OAuth2 客户端功能,从而支持各种 OAuth2 提供商(如 Google、Facebook、GitHub 等)的认证和授权流程。在 Spring Security 配置类中,配置使用 OAuth2 登录的端点,并指定自定义的。接口,并在这个类中返回你定义的所有客户端信息。 阅读详情

相关推荐

Spring Cloud与Spring Boot版本匹配关系解析

微服务架构中,Spring Cloud作为Spring Boot的增强套件,其版本兼容性直接影响系统稳定性。版本匹配遵循严格的地基与上层结构关系,如2023年推荐的Spring Cloud 2022.0.x与Spring Boot 3.0.x组合。理解版本号语义化规则(主版本、次版本、修订号)及官方版本对照表是避免依赖冲突的关键。企业级项目中,通过Maven或Gradle的BOM(Bill of Materials)管理依赖版本,结合CI/CD管道中的版本校验脚本,可有效预防版本错配问题。本文以Spring

weixin_33721344的博客 595

【Spring Security OAuth2 Client】基本介绍以及定制开发

开头的配置项可以参考这个类OAuth2协议响应的标准参数字段可以参考这个类重定向到,并且会携带client_idscopestatenonce参数和会对回调地址(携带了code和state)进行处理,调用进行认证背后会进行连续token-uri请求,最后返回完全填充的缓存跳转登录前的请求由于类是final,不能继承,所以我们创建一个,然后把源码copy过来,主要修改accessTokenType为空的情况@Override。

Java技术栈,分享不断学习、不断超越、不断积累的历程! 9024

Spring Boot 3.4.2 @Controller 与 @RestController 实战对比:3种场景下的选择指南

本文深入对比Spring Boot 3.4.2中@Controller与@RestController的核心差异,通过三种典型场景(传统MVC页面、RESTful API和混合架构)的实战示例,帮助开发者根据项目需求做出合理选择。重点解析注解工作原理、性能差异及最佳实践,提升Web应用开发效率。

weixin_33698043的博客 352

SpringSecurity

::: tip SpringSecurity是什么Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。Spring Security致力于为Java应用程序提供身份验证和授权的能力。像所有Spring项目一样,Spring Security的真正强大之处在于它可以轻松扩展以满足定制需求的能力。::: 2.创建接口 3.访问接口 ​ 2.通过创建配置类实现设置 3.编写自定义实现类(常用) 第一步:编写UserDetailsService实现类,可以从数据库中获取用户

iiiis的博客 2208

SpringBoot 基于 OAuth2 统一身份认证流程详解

了解OAUTH2统一认证基本概念, 各种角色与协议流程, 了解OAUTH2支持的四种模式, 以及各种模式的不同应用场景。了解整体服务设计, 完成认证服务的搭建配置, 通过postman对功能进行验证, 实现TOKEN的申请与刷新功能。完成用户服务的配置的改进以及 Spring Security的集成, 核心类的处理实现;在整个项目中, 存在公用的地方, 要做统一处理, 比如统一异常和统一接口数据返回, 复用方便, 直观清晰, 便于维护与扩展。

专注基础架构领域 1万+

【SpringBoot 4.x 第86节】OAuth2 Client 登录实战:Spring Boot 4.x 接入第三方登录完全指南!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 659

【springboot】万字操作指南 Spring Boot 2.x 升级到 3.x:微服务项目实战

摘要: 本文提供Spring Boot 2.x升级到3.x的实战指南,重点针对微服务项目。升级涉及JDK 17、Spring Framework 6、Jakarta EE等连锁变化,需系统规划版本矩阵(如Spring Boot 3.5.x + Spring Cloud 2025.0.x)。建议升级路线:先统一JDK 17环境,再处理依赖迁移(javax→jakarta)、Spring Security 6适配、OAuth2授权服务器改造等关键步骤。

Cjh20pan的博客 975

置顶必读(1) |《滚雪球学 Spring Boot 4.x》专栏目录导航篇(持续更新中)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 8万+

Spring Security OAuth2.0(13):oAuth2.0微服务解析

OAuth2.0与Spring Cloud Security OAuth2实现摘要 OAuth2.0是一种授权框架,允许第三方应用通过令牌机制安全访问用户资源,无需共享凭证。核心角色包括资源所有者、客户端、授权服务器和资源服务器,支持授权码、隐式、密码和客户端凭证等多种授权模式。Spring Cloud Security OAuth2提供了对OAuth2的实现,分为授权服务(处理认证和令牌颁发)和资源服务(保护资源并鉴权)。典型实现包含UAA认证服务和资源服务,通过令牌实现安全通信。开发时需注意HTTPS加

不积跬步,无以至千里 673

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 244

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

KeyCloak、OAuth2、Spring Boot、client_credentials整合

doc https://www.keycloak.org/docs/latest/getting_started/index.html 创建一个域和一个用户 Keycloak广利控制台的第一个用途是创建领域并在该领域中创建用户。 您使用该用户登录到新领域,并访问所有用户都可以访问的内置账户控制台。 域和用户 当你登录管理员控制台,你将在一个域内工作,这是一个你可以管理对象的空间。 有两种域: Master realm:主域。这个域会在你第一次启动Keycloak就会为你创建好, 它包含了你第一次登录时创建的

klaokai的冥想空间 4511

七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析)

让您从源码下载到本地运行一步到位!此外,文中还将附带详细代码解析与操作步骤,即便没有开发经验,也能轻松完成二开与定制。数据库是棋牌游戏中极为关键的组成部分,用于存储用户信息、乐豆余额、游戏记录、提现申请等数据。以下是部分核心数据表结构示例,便于存储用户信息与游戏记录。AI模块能够控制游戏中的胜率,常用于调节玩家体验。防沉迷功能旨在限制未成年人游戏时间。的完整搭建流程,特别适合。首先,获取七星棋牌源码。本教程将为您详细讲解。

aa2031171的博客 7777

从单体到微服务:Spring Boot 3.x 重构实战与5个核心挑战解析

本文详细解析了从单体架构向微服务架构转型过程中使用Spring Boot 3.x的实战经验,重点探讨了5个核心挑战及其解决方案。内容包括重构前的系统评估、微服务基础架构搭建、数据一致性处理、服务间通信优化等关键环节,为开发者提供了一套完整的软件架构升级方法论。

weixin_30572613的博客 380

网络工程系统CAD图:从设计到落地的关键技能与实战指南

网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建

weixin_33860553的博客 391

halcon 深度学习标注_Halcon deep learning之目标检测笔记(一)

设置输入输出的路径输入路径有两个,一个是图像路径HalconImageDir,一个是Json文件路径PillBagJsonFile。这两个参数用于后续在图像路径中读取coco文件。输出路径首先定义一个新的文件夹路径,用于存放样本和模型文件等数据。设置基于深度学习的目标检测模型的路径,该模型文件以.hdl结尾。设置样本数据文件夹ExampleDataDir:'detect_pills_data'数据...

weixin_27885313的博客 2699

springsecurity+OAuth2.0-第12章:分布式认证授权案例-工程搭建1

一 父工程搭建 1.1 工程创建工程 创建父工程,然后配置pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:/.

健康平安的活着的专栏 1260

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 987

Spring Boot项目实战:5步搞定Dynamics 365 CRM的OAuth2.0集成与联系人增删改查

本文详细介绍了如何在Spring Boot项目中实现Dynamics 365 CRM的OAuth2.0集成与联系人增删改查操作。通过5个步骤,包括环境准备、OAuth2.0认证配置、服务层设计、联系人CRUD操作实现及异常处理,帮助开发者快速掌握Java与Dynamics 365 CRM的高效集成方法。

weixin_30455023的博客 228

RK3566添加ffpeg【Buildroot系统】

有很多人都发现了RK3566系列的芯片是不可以直接使用ffmpeg官网源码的!会报错: Not a video capture device. /dev/video0: No such device 接下来我们就来解决这个问题!!

honmy18的博客 4069

YOLOv5改进之---EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

本文主要针对yolov5的iou损失函数进行改进,主要涵盖EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU这几种损失

qq_41920323的博客 1465

Spring Cloud微服务架构核心组件与实战指南

微服务架构通过将单体应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和开发效率。Spring Cloud作为Java生态的主流微服务框架,基于Spring Boot的自动配置特性,集成了服务发现、配置中心、API网关等核心组件,有效解决了分布式系统开发中的常见挑战。其中,Eureka实现服务注册与发现,Feign简化服务间调用,Gateway处理API路由与限流,Config提供集中化配置管理,Sleuth实现分布式链路追踪。这些组件协同工作,使开发者能够快速构建高可用的云原生应用。在实际项目中,合理

480

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OAuth2.0授权码模式零基础实战

*** 用户信息查询服务* 真实项目替换Mybatis/MybatisPlus数据库查询*/@Service/**根据用户名查询用户*/@Override// 模拟数据库用户:账号admin,原始密码123456if (!throw new UsernameNotFoundException("登录用户不存在");username,// 用户权限集合。

只要肯攀登,终有登顶时 368

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

Spring Social Facebook 1.0.2 是 Spring 社交(Spring Social)项目中用于集成 Facebook API 的一个维护性补丁版本

Spring Social Facebook 1.0.2 是 Spring 社交(Spring Social)项目中用于集成 Facebook API 的一个维护性补丁版本,发布于 2014 年左右(具体为 2014 年 3 月),属于 Spring Social 1.x 系列。该版本主要包含以下内容:

[Blog][Domain] programb.blog.youkuaiyun.com 483

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring Boot项目从JDK 8升级到JDK 17的完整避坑指南

Java作为企业级应用开发的核心语言,其版本演进直接关系到应用性能、安全性和可维护性。从JDK 8到JDK 17的跨越涉及语言特性、JVM内部机制和模块化系统的重大变革,理解这些底层原理是成功升级的关键。升级的技术价值在于获得ZGC/Shenandoah等现代垃圾回收器带来的低延迟、更好的容器原生支持以及增强的安全特性,从而提升系统稳定性和资源利用率。在微服务架构和云原生场景下,这些改进能显著优化应用启动速度、内存管理和弹性伸缩能力。本文聚焦于Spring Boot 2.3-2.7系列项目升级JDK 17的

weixin_30512043的博客 596
上一篇: 学习笔记:微服务12 spring cloud Feign(Rest请求)+ hystrix(熔断)
下一篇: 学习笔记:微服务14 spring boot jdbc connect
领尚
博客等级 码龄14年 1143粉丝 271原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值