我最新最全的文章都在 南瓜慢说 www.pkslow.com,欢送大家来喝茶!
1 前言
Spring Cloud Data Flow
整合 UAA
的文章曾经写了两篇,之前的计划是把用户信息保留在数据库中;但在许多企业,是应用 AD
来治理账户信息,本文将解说如何整合 Data Flow
和LDAP
。
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
。
这个映射关系的后半局部之前解说了,前半部分通过 uaac
或Rest 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 Flow
与LDAP
的整合,至此,在 Spring Cloud Data Flow
的鉴权方面,曾经讲述比拟残缺了。
代码请查看:https://github.com/LarryDpk/p…
参考文档:
security-ldap-uaa-example
OpenLDAP 概念与工作原理介绍
欢送关注微信公众号 <南瓜慢说>,将继续为你更新 …
多读书,多分享;多写作,多整顿。