关于java:Spring-Cloud-Data-Flow整合UAA之使用LDAP进行账号管理

38次阅读

共计 3002 个字符,预计需要花费 8 分钟才能阅读完成。

我最新最全的文章都在 南瓜慢说 www.pkslow.com,欢送大家来喝茶!

1 前言

Spring Cloud Data Flow整合 UAA 的文章曾经写了两篇,之前的计划是把用户信息保留在数据库中;但在许多企业,是应用 AD 来治理账户信息,本文将解说如何整合 Data FlowLDAP

Spring Cloud Data Flow相干文章:

Spring Cloud Data Flow 初体验,以 Local 模式运行

把 Spring Cloud Data Flow 部署在 Kubernetes 上,再跑个工作试试

Spring Cloud Data Flow 用 Shell 来操作,不便建设 CICD

被 Spring 坑了一把,查看源码终于解决了 DataFlow 部署 K8s 利用的问题

Spring Cloud Data Flow 整合 Cloudfoundry UAA 服务做权限管制

Spring Cloud Data Flow 整合 UAA 应用外置数据库和 API 接口

2 启动 LDAP 服务器

2.1 启动服务器

咱们应用 Apache 的开源框架来作为 Ldap 服务器,引入依赖如下:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.1.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-protocol-ldap</artifactId>
    <version>1.5.5</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-ldap</artifactId>
  </dependency>
</dependencies>

Springboot的启动类如下:

@SpringBootApplication
public class LdapServer {public static void main(String[] args) throws Throwable {SpringApplication.run(LdapServer.class, args);
    }

    @Bean
    public ApacheDSContainer apacheDSContainer() throws Exception {final File temporaryFolder = Files.createTempDirectory("ldap_server").toFile();
        final String ldapFileName = "testUsers.ldif";

        ApacheDSContainer apacheDSContainer = new ApacheDSContainer("dc=springframework,dc=org",
                "classpath:" + ldapFileName);

        apacheDSContainer.setPort(40000);
        final File workingDir = new File(temporaryFolder, UUID.randomUUID().toString());
        apacheDSContainer.setWorkingDirectory(workingDir);
        return apacheDSContainer;
    }
}

启动端口为 40000,用户配置信息 ldif 文件为testUsers.ldif,咱们把测试应用到的 AD 账户和群组信息都配置在这个文件里。dc=springframework,dc=org 是 AD 的根目录,所有配置信息树的终点。

testUsers.ldif比拟大,请参考:https://github.com/LarryDpk/p…。

2.2 连贯服务器

启动了 Ldap 服务器后,咱们能够通过 Apache Directory Studio 客户端工具来进行查看和治理。如下图所示:

3 UAA 配置

UAA服务器须要配置相干信息以连贯 Ldap 服务,配置在 uaa.yml 文件中,具体增加的配置如下:

spring_profiles: default,postgresql,ldap

ldap:
  profile:
    file: ldap/ldap-search-and-bind.xml
  base:
    url: 'ldap://localhost:40000/'
    userDn: 'uid=leah,ou=people,dc=springframework,dc=org'
    password: 'leahberlin'
    searchBase: 'ou=otherpeople,dc=springframework,dc=org'
    searchFilter: 'uid={0}'
    referral: follow
  groups:
    file: 'ldap/ldap-groups-map-to-scopes.xml'
    searchBase: 'ou=groups,dc=springframework,dc=org'
    searchSubtree: true
    groupSearchFilter: member={0}
    maxSearchDepth: 10
    autoAdd: true

profiles须要增加 ldap 来关上这个性能。

增加配置后,重启 UAA 服务器即可失效。但咱们当初能够通过用户的登陆信息获取他的 AD 群组,但这个群组与 UAA 的群组是不一样的,须要为它们建设一个映射关系。即:

AD group --> UAA group --> Data Flow Role

这个映射关系的后半局部之前解说了,前半部分通过 uaacRest API能够配置,如下:

uaac group map "cn=view,ou=groups,dc=springframework,dc=org" --name="dataflow.view" --origin=ldap
uaac group map "cn=create,ou=groups,dc=springframework,dc=org" --name="dataflow.create" --origin=ldap
uaac group map "cn=manage,ou=groups,dc=springframework,dc=org" --name="dataflow.manage" --origin=ldap

4 登陆测试

咱们间接用 ldif 文件配置的用户 marlene/supersecret 登陆如下:

实际上,咱们仍旧能够应用保留在数据库中账号(如larry/larry)登陆,它们是能够并存的,提供了很大的便利性。

5 总结

本文解说了 Data FlowLDAP的整合,至此,在 Spring Cloud Data Flow 的鉴权方面,曾经讲述比拟残缺了。

代码请查看:https://github.com/LarryDpk/p…


参考文档:

security-ldap-uaa-example

OpenLDAP 概念与工作原理介绍


欢送关注微信公众号 <南瓜慢说>,将继续为你更新 …

多读书,多分享;多写作,多整顿。

正文完
 0