微軟CRM 基於 ADFS自定義多重身份驗證


一、背景

由於項目突然進行的護網行動,要求在登錄CRM時再加一層服務器端的驗證。

二、解決方案

利用ADFS多重身份驗證機制,自定義驗證策略,實現賬號密碼登錄后,自動發送短信驗證至用戶手機,並進行驗證。(如果沒有短信發送接口,可以進行郵箱驗證!)

三、實現過程

1、創建一個面向 .NET 4.5 .NET Framework的類庫

2、添加引用-->Microsoft.IdentityServer.Web.dll,文件位於ADFS服務器的下圖所示文件夾.

3、編寫代碼(詳情見附件)

a.創建三個類別繼承接口:IAuthenticationAdapter、IAuthenticationAdapterMetadata、IAdapterPresentationForm

b.注意編寫繼承IAdapterPresentationForm類的時候,需要新增資源文件,用戶編寫自定義驗證頁面:例如附件中的CustomPage.txt

c.注意附件中的WebApiUrlConfig.json文件,用戶配置接口地址,需要注冊至ADFS(注冊方法見 5、注冊身份驗證提供者至ADFS服務器)

4、注冊程序集至ADSF服務器的GAC中

a.增加簽名

b.由於ADFS服務器中沒有安裝.net的框架,所以需要從本地拷一份gacutil工具至ADFS服務器

下圖示例為windows10中的工具位置,將文件夾拷貝至ADFS服務器

c.將編譯好的dll拷貝至ADFS服務器的gacutil.exe同一目錄下

d.打開管理員:命令提示符,執行下圖命令

gacutil /if .\RekTec.Crm.AdfsCaptcha.dll -- 添加程序集至緩存

gacutil /l RekTec.Crm.AdfsCaptcha        --  查詢程序集詳情

5、注冊身份驗證提供者至ADFS服務器

Register-AdfsAuthenticationProvider –TypeName "RekTec.Crm.AdfsCaptcha.MFAadapter.CustomAuthenticationAdapter,RekTec.Crm.AdfsCaptcha, Version=1.0.0.0, Culture=neutral, PublicKeyToken=090b4b325acf4ab5, processorArchitecture=MSIL" –Name "RtMFAProvider" -ConfigurationFilePath "WebApiUrlConfig.json"

藍色字體:上圖查詢出的程序集詳細信息。

綠色字體:自定義名稱

黃色字體:接口配置文件(注意需要將附件中的配置文件放置 ADFS服務器,例如c:\soft)

注冊完成后,重啟ADFS服務器:net stop adfssrv   net start adfssrv

power shell -> Get-AdfsGlobalAuthenticationPolicy 查詢上面注冊的身份驗證策略

6、打開ADFS管理器,增加多重身份驗證方法(RekTec MFA 短息驗證碼)

7、更改信任放訪問控制策略(這個需要在添加 信賴發信任 進行訪問控制策略配置)

8、測試

a.輸入正確的賬號密碼,點擊登錄

b.輸入手機驗證碼,點擊驗證,登陸成功

 

 

 

 

四、更新dll操作

1、取消多重身份驗證方法

2、撤消注冊提供程序
// 刪除AdfsAuthenticationProvider
Unregister-AdfsAuthenticationProvider –Name "RtMFAProvider"
3、從 GAC 中刪除程序集
// 先根據程序集名稱查詢詳情,后刪除
gacutil /l RekTec.Crm.AdfsCaptcha
gacutil /u “RekTec.Crm.AdfsCaptcha, Version=1.0.0.0, Culture=neutral, PublicKeyToken=090b4b325acf4ab5, processorArchitecture=MSIL”

4、重新注冊更新后程序集至GAC
gacutil /if .\RekTec.Crm.AdfsCaptcha.dll
5、重新注冊提供程序(用PowerShell執行,注意:因為由於緩存的存在,每次更新完GAC程序集后,請重新打開PowerShell!)
Register-AdfsAuthenticationProvider –TypeName "RekTec.Crm.AdfsCaptcha.MFAadapter.CustomAuthenticationAdapter,RekTec.Crm.AdfsCaptcha, Version=1.0.0.0, Culture=neutral, PublicKeyToken=090b4b325acf4ab5, processorArchitecture=MSIL" –Name "RtMFAProvider"

6、重新啟動ADFS服務
net stop adfssrv
net start adfssrv

7、增加多重身份驗證方法

 

 代碼地址:https://github.com/SkyQAQ/ADFS_MFA


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM