SpringBoot集成 Windows2012 AD 認證服務

目錄

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章