SpringBoot集成 Windows2012 AD 认证服务

版权声明:来至蜀山雪松 https://blog.csdn.net/jianxia801/article/details/88883874

目录

1、应用背景

2、Windows2012 AD 服务安装及验证是否成功

2.1、Microsoft Windows Server 2012 Ad域搭建

2.2、安装完毕后如何验证是否成功

3、SpringBoot如何集成Windows AD服务认证

4、实践成果内容

5、参考文章

6、最后实现可执行源码


1、应用背景

     因最近项目需要做欧洲的国际版本;欧洲那边要求使用Windows AD认证服务;同时欧盟在2018年05月24日出台了《通用数据保护条例》(General Data Protection Regulation,简称GDPR)。所有如果针对业务场景为企业内部系统需要能够实现Windows AD的认证。所以需要进行相关的Window AD进行验证和集成技术预研。

     Window AD是一种 LDAP协议的Microsoft一种实现。关于LDAP相关文章介绍:

           LDAP服务器的概念和原理简单介绍

           我花了一个五一终于搞懂了OpenLDAP

2、Windows2012 AD 服务安装及验证是否成功

2.1、Microsoft Windows Server 2012 Ad域搭建

        一、Active Directory概念

AD(活动目录):是一种组织资源信息的方法,目录的意义在于我们可以通过标题或者说搜索条件来简单而有效率的在大量数据中查找匹配的信息。支撑这种信息检索的技术就是LDAP协议。

AD域:为了避免账户数据量过大造成的管理不便,我们会将所有的账户数据按照域的概念来划分,再分别对每一个域进行管理。一般AD域或与DNS域挂钩。

AD DS(Active Directory Domain Server):活动目录域服务,是一种Win2012R2服务器所提供的服务,由AD域控制器来实现。应用了AD的信息检索思维,能够高效快速的处理庞大的账户数据。实现了统一集中管理企业员工账号信息,做到单点登录,多处访问。值得注意的是,因为AD DS要管理大量的账户信息,所以就决定了AD DS需要一个数据库来支撑整个服务,而这个扮演数据库的角色就是存在于AD域控制器中的AD数据库。

AD域控制器:AD域控制器包含了AD数据库,用于存储AD域内的账号数据,提供了对数据的增删查改功能。而且AD域控制器也提供了AD DS服务,所以安装一个AD域控制器,等效于创建了AD DS域服务。

二、AD服务器的优点

1. 集中管理账号,应用程序等计算机资源。 
2. 域账号能够实现单点的远程登陆。

AD与DNS的关系:

域控制器需要将自己注册到DNS服务器中,以便其他的计算机可以通过DNS解析服务来找到这台域控制器从而实现登录信息验证,而且此DNS服务器最好支持动态更新功能。所以AD服务需要有DNS服务的支撑,否则也可以通过修改Hosts来实现上述的功能。

具体安装请参考下列文章 :

     基本AD安装可参考:Windows Server 2012搭建AD域(活动目录)

     如果需要安装证书类可以参考:Microsoft Windows Server 2012 Ad域搭建

2.2、安装完毕后如何验证是否成功

       安装完毕后需要使用一个工具LDAPAdmin进行验证;安装是否正确。

此工具的下载地址:http://www.ldapadmin.org/download/ldapadmin.html

安装完毕后需要进行Window AD的连接

最后验证链接成功

3、SpringBoot如何集成Windows AD服务认证

       我们自己的项目使用的是SpringBoot开发框架,所以需要使用SpringBoot框架来集成;本人在网络上也搜索很多示例进行验证,以及同事也验证部分内容;但是很多都是失败的结果。最后通寻找到以下参考文章,并且与我目前场景一致;最后决定参考此文章进行修改调整。Vue + Jwt + SpringBoot + Ldap 完成登录认证

首先创建一个SpringBoot工程,然后在Maven的pom.xml文件之后引入相关的Ldap协议Jar。具体引入打pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.ad.ldap</groupId>
	<artifactId>adldap</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>adldap-demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-ldap</artifactId>
		</dependency>		
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>		
		 <!-- 热启动 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.24</version>
        </dependency>        
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- Hot swapping -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.0.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
		</plugins>
	</build>

</project>

application.properties 主要配置文件如下

#ldap_config
#ldap配置信息,注意这里的userDn一定要写这种形式。referral设置为follow,说不清用途,似乎只有连接AD时才需要配置
ldap.url=ldap://192.168.9.236:389
ldap.base=dc=wdcloud,dc=cc
ldap.userDn=cn=Administrator,cn=Users,dc=wdcloud,dc=cc
ldap.userPwd=password(AD服务器密码)
ldap.referral=follow
[email protected]

4、实践成果内容

       最后通过相关验证实践,实现了连接Windows  AD 最后成果如下

如果密码错误返回401状态码:

5、参考文章

Vue + Jwt + SpringBoot + Ldap 完成登录认证  

基本AD安装可参考:Windows Server 2012搭建AD域(活动目录)

如果需要安装证书类可以参考:Microsoft Windows Server 2012 Ad域搭建

 LDAP服务器的概念和原理简单介绍

 我花了一个五一终于搞懂了OpenLDAP

6、最后实现可执行源码

https://github.com/jianxia612/springboot-adldap-demo.git

猜你喜欢

转载自blog.csdn.net/jianxia801/article/details/88883874