为 Eureka 添加 Http Basic 认证

本文介绍了如何在Eureka服务中添加基本的HttpBasic认证,包括配置EurekaServer以接受认证,以及在Product-service中使用带有用户名和密码的URL进行服务注册。同时,还展示了如何在WebSecurityConfig中停用CSRF保护和创建用户认证机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在网络世界中,任何网络中的服务都是不安全的,为了使我们的 Eureka 服务更加安全,我们可以添加各种各样的认证方式,以使客户端在提供相应的证明之后才能够注册到 Eureka 中。而这次我们就添加一个最基本的 Http Basic 认证到 Eureka 中。 HTTP Basic 是简单的用户名密码认证,客户端在发送注册请求时,会附带用户名和密码一起发送到 Eureka Server,这种传输方式也属于不太安全的一种。

项目源码

Gitee码云

配置 Eureka Server

打开远程 git 仓库中的 eureka-server.yml 文件,添加如下配置:

---
spring:profiles: peer1security:user:name: testpassword: 123456roles: USER
server:port: 8761
eureka: instance:hostname: peer1client: register-with-eureka: falsefetch-registry: false# serviceUrl:# defaultZone: http://peer2:8762/eureka

--- 

为了简化服务注册,我们这次测试只使用 peer1 这个 profile,并且把 register-with-eurekafetch-registry 设置为了 false 以关闭自身注册。然后我们在 spring 下配置了 security.user.namepassword, roles,分别用来指定可以登录的用户名,密码,和用户组。

在我们的 registry 项目中创建一个 Java 类 cn.zxuqian.configurations.WebSecurityConfig,并添加如下代码:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {private static Logger log = LoggerFactory.getLogger(WebSecurityConfig.class);@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().httpBasic();}@Beanpublic UserDetailsService userDetailsService() {User.UserBuilder builder = User.withDefaultPasswordEncoder();InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(builder.username("test").password("123456").roles("USER").build());return manager;}

} 

这里覆盖了 WebSecurityConfigurerAdapter 中的 configure() 方法,用来停用 CSRF 保护,因为我们的 Eureka Server 使用了 peer 做为 hostname,而稍后测试的 product-service 使用了 localhost,会被禁止访问 Eureka 资源。然后在 userDetailsService() 方法中添加了一个 test 用户用于认证。

Product-service

打开远程 git 仓库中的 product-service.yml 文件,添加如下配置:

eureka:client:serviceUrl:defaultZone: http://test:123456@peer1:8761/eureka/ 

这里在 defaultZone 指定的 Url 中添加了 [username]:[password]@host:port/eureka/ 形式的地址,此为 curl 发送用户名和密码的方式。

测试

首先运行 Config Server,然后使用 mvn spring-boot:run -Dspring-boot.run.profiles=peer1 运行 Eureka Server,最后运行 product-service,稍等片刻就会看到 product-service 注册成功,而 Eureka Server 的 log 中会有如下字样(需设置 log level 为 debug):

2018-05-19 18:16:45.278 DEBUG 19055 --- [nio-8761-exec-9] w.c.HttpSessionSecurityContextRepository : Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: 'org.springframework.security.core.context.SecurityContextImpl@442bd3dc: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@442bd3dc: Principal: org.springframework.security.core.userdetails.User@364492: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_USER' 

欢迎访问我的博客:zxuqian.cn/# 学习计划安排

我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方优快云官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

<think>好的,我现在需要解决用户的问题:如何部署Eureka集群并添加安全认证。用户提到想了解Eureka集群的部署教程,以及使用Spring Cloud Security进行身份验证和授权。我需要结合用户提供的引用内容来构建答案。 首先,我需要回忆一下Eureka集群的基本部署方法。根据引用[4],Eureka集群部署需要多个Eureka Server实例相互注册,确保高可用性。每个实例需要配置其他实例的地址作为服务端节点。例如,在配置文件中设置不同的端口和相互注册的URL。同时,服务提供者和消费者需要连接到所有Eureka节点,以便在其中一个节点不可用时仍能正常工作。 接下来是安全认证部分。引用[2]提到了在Config Server中添加Spring Security依赖,进行安全认证。同样的方法应该适用于Eureka Server。用户需要添加spring-boot-starter-security依赖,然后在配置文件中设置用户名和密码。引用[1]提到Spring Cloud Security的功能,如单点登录和令牌管理,但在这里可能只需要基本的HTTP基本认证。 现在需要将这两个部分结合起来。部署Eureka集群时,每个实例不仅要注册到其他实例,还需要启用安全认证。这意味着每个Eureka Server的配置文件中需要包含安全相关的配置,如安全用户名和密码,并且在服务的注册地址中包含这些凭证。 可能遇到的问题包括:配置格式是否正确,如URL中的用户名密码是否正确编码;依赖是否正确添加;以及集群节点之间是否能够互相认证。例如,在配置其他Eureka节点的URL时,需要使用http://user:password@hostname:port/eureka/的格式,确保认证信息被正确传递。 另外,服务提供者和消费者在注册到Eureka集群时,也需要在配置文件中提供认证信息,否则无法通过安全验证。这需要在这些客户端的配置中添加对应的用户名和密码。 最后,启动顺序可能需要确保所有Eureka节点同时运行,或者至少有一个节点先启动,然后其他节点依次启动并注册。测试时可以通过访问各个Eureka的仪表盘,查看节点是否相互识别,并且服务是否正确注册。 总结步骤应该是:配置每个Eureka实例的application.yml,设置端口、安全认证、集群节点地址;添加Spring Security依赖;修改客户端配置以包含认证信息;启动集群并验证。</think>### 部署Eureka集群并添加Spring Cloud Security安全认证 #### 一、Eureka集群部署步骤 1. **创建多个Eureka Server实例** 每个实例需配置不同的端口,并相互注册。例如: ```yaml # application-peer1.yml server: port: 8761 eureka: client: service-url: defaultZone: http://user:password@peer2:8762/eureka/,http://user:password@peer3:8763/eureka/ spring: application: name: eureka-server ``` ```yaml # application-peer2.yml server: port: 8762 eureka: client: service-url: defaultZone: http://user:password@peer1:8761/eureka/,http://user:password@peer3:8763/eureka/ ``` 2. **服务提供者/消费者配置** 客户端需连接所有Eureka节点: ```yaml eureka: client: service-url: defaultZone: http://user:password@peer1:8761/eureka/,http://user:password@peer2:8762/eureka/ ``` 3. **启动集群** 使用不同配置文件启动多个实例,例如: ```bash java -jar eureka-server.jar --spring.profiles.active=peer1 java -jar eureka-server.jar --spring.profiles.active=peer2 ``` #### 二、添加Spring Cloud Security安全认证 1. **添加依赖** 在Eureka Server项目的`pom.xml`中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. **配置安全规则** 在`application.yml`中设置用户名密码: ```yaml spring: security: user: name: user password: password ``` 3. **允许Eureka端点访问** 创建安全配置类: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/eureka/**").permitAll() .anyRequest().authenticated() .and().httpBasic(); } } ``` 4. **更新服务注册地址** 客户端和其他Eureka节点需在URL中包含认证信息: ```yaml defaultZone: http://user:password@peer1:8761/eureka/ ``` #### 三、验证部署 1. 访问`http://peer1:8761`,输入用户名密码后查看Eureka仪表盘,确认其他节点已注册[^4]。 2. 启动服务提供者,观察其是否成功注册到所有Eureka节点[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值