zoukankan      html  css  js  c++  java
  • SpringCloud之EurekaServer的安全

    Eureka本身不具备安全认证的能力,Spring Cloud使用Spring Security为Eureka Server进行了增强。

    Eureka Server端

    基于之前的Eureka Server项目进行改造:

    加依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    加配置

    spring:
      security:
        user:
          name: user                # 配置登录的账号是user
          password: password123     # 配置登录的密码是password123

    不设置这段内容,账号默认是user,密码是一个随机值,该值会在启动时打印出来

    改配置

    将Eureka Server中的 eureka.client.service-url.defaultZone 修改为为http://{user}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/ 的形式:

    eureka:
      client:
        service-url:
          defaultZone: http://user:password123@localhost:8761/eureka/

    写代码

    /**
     * Spring Cloud Finchley及更高版本,必须添加如下代码,部分关闭掉Spring Security 的CSRF保护功能,否则应用无法正常注册!*/
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
      }
    }

    测试

    启动Eureka Server并访问http://localhost:8761 ,可跳转至类似如下的登录页面:

    Eureka Client端

    如何将微服务注册到需认证的Eureka Server上呢——和Eureka Server端一样,只须将eureka.client.service-url.defaultZone 配置为http://{user}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/ 的形式即可:

    eureka:
      client:
        serviceUrl:
          defaultZone: http://user:password123@localhost:8761/eureka/

    数据权限·拓展

    实际项目中,出于安全考虑,往往还需实现数据权限。

    举个例子:

    • 团队1维护微服务A、B、C
    • 团队2维护微服务D、E、F

    从安全的角度,我们希望:

    • 团队1中的开发人员只能操作微服务A、B、C在Eureka Server上的信息;
    • 团队1中的开发人员只能访问其他团队授权给该团队的微服务的信息(例如团队2将微服务D授权给微服务A访问);

    此时该怎么办呢?

    有人可能会想:Eureka Server上哪有什么操作啊!整个Eureka Server的界面上,明明只有查看的能力!

    如果只是查看,那当然没有问题,但要知道Eureka Server是有RESTful API的

    举个例子,只需发送DELETE请求到http://{username}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/apps/{appId}/{instanceID} ,即可下线服务。如果线上微服务被恶意下线,那后果是不堪设想的。

    Spring Cloud抑或原生Eureka Server并未提供这一功能,只能由开发人员基于Spring Security或其他权限框架自行扩展。

    这个扩展的成本还是比较高的,于是目前业界大多企业都放弃了扩展,转而采用管理手段防止无数据权限带来的风险。例如,生产环境中:

    • 将Eureka Server的账号密码管控起来,只有核心成员才知晓。

    • 配置中心可将账号密码等敏感数据加密存储。
  • 相关阅读:
    day14(xml 编写及解析)
    day11(多线程,唤醒机制,生产消费者模式,多线程的生命周期)
    day13(反射,BeanUtils包)
    day10(IO流汇总)
    day08(File类 ,字节流)
    day08(异常处理,创建异常,finally,throws和throw的区别)
    [SPOJ-PT07J] Query on tree III (主席树)
    [ZJOI2008] 树的统计(树链剖分)
    长链剖分学习笔记
    [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)
  • 原文地址:https://www.cnblogs.com/yunyunde/p/13530838.html
Copyright © 2011-2022 走看看