当前位置: 首页 > news >正文

为 Eureka 添加 Http Basic 认证

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

简介

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

项目源码

Gitee码云

配置 Eureka Server

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

---
spring:
  profiles: peer1
  security:
    user:
      name: test
      password: 123456
      roles: USER
server:
  port: 8761
eureka: 
  instance:
    hostname: peer1
  client: 
    register-with-eureka: false
    fetch-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);

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().httpBasic();
    }


    @Bean
    public 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'

欢迎访问我的博客:http://zxuqian.cn/

转载于:https://my.oschina.net/u/3819492/blog/1815339

相关文章:

  • 看 Laravel 源代码了解 Container
  • 家族企业如何才能够更加长远的发展?
  • cursor:hand and cursor:pointer
  • JavaScript高级程序设计学习(四)之引用类型
  • Java中常用的容器类笔记
  • 加密算法与安全认证
  • Oracle体系结构及备份(十七)——bg-others
  • 记第四次和第五次面试——两次奇葩的面试
  • ASP.NET MVC Area 的使用
  • linux为什么要安装字体
  • 剥光投入,还要防止阻塞
  • js基本数据类型不妨回头再看看
  • php安全编程: register_globals的安全性
  • 关于http和一次完整的前后端响应
  • 献给在这个世界上摇摆不定的朋友们
  • 【Leetcode】101. 对称二叉树
  • [deviceone开发]-do_Webview的基本示例
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Computed property XXX was assigned to but it has no setter
  • Fastjson的基本使用方法大全
  • flask接收请求并推入栈
  • HTTP--网络协议分层,http历史(二)
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascript基础之Array数组API
  • Node 版本管理
  • vue总结
  • Webpack 4 学习01(基础配置)
  • windows-nginx-https-本地配置
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 二维平面内的碰撞检测【一】
  • 给第三方使用接口的 URL 签名实现
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 诡异!React stopPropagation失灵
  • 区块链分支循环
  • 日剧·日综资源集合(建议收藏)
  • 用Canvas画一棵二叉树
  • Semaphore
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #define、const、typedef的差别
  • #大学#套接字
  • (007)XHTML文档之标题——h1~h6
  • (libusb) usb口自动刷新
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (一)u-boot-nand.bin的下载
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Google的Objective-C编码规范
  • ****Linux下Mysql的安装和配置
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 中的轻量级线程安全
  • .NET大文件上传知识整理
  • .net对接阿里云CSB服务
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .Net中wcf服务生成及调用
  • ??javascript里的变量问题