# Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
# 1 前言
Spring Cloud Data Flow
整合UAA
的文章已经写了两篇,之前的方案是把用户信息保存在数据库中;但在许多企业,是使用AD
来管理账户信息,本文将讲解如何整合Data Flow
和LDAP
。
Spring Cloud Data Flow
相关文章:
Spring Cloud Data Flow初体验,以Local模式运行 (opens new window)
把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试 (opens new window)
Spring Cloud Data Flow用Shell来操作,方便建立CICD (opens new window)
被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题 (opens new window)
Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制 (opens new window)
Spring Cloud Data Flow整合UAA使用外置数据库和API接口 (opens new window)
# 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/pkslow-samples/blob/master/spring-cloud/ldap-server/src/main/resources/testUsers.ldif 。
# 2.2 连接服务器
启动了Ldap
服务器后,我们可以通过Apache Directory Studio (opens new window)客户端工具来进行查看和管理。如下图所示:
# 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/pkslow-samples
参考文档: