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

1、背景git

因爲項目忽然進行的護網行動,要求在登陸CRM時再加一層服務器端的驗證。github

2、解決方案shell

利用ADFS多重身份驗證機制,自定義驗證策略,實現帳號密碼登陸後,自動發送短信驗證至用戶手機,並進行驗證。(若是沒有短信發送接口,能夠進行郵箱驗證!)json

3、實現過程windows

一、建立一個面向 .NET 4.5 .NET Framework的類庫緩存

67b74c7cba7b11eaaff10a58ac133b38

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

a99d9aecba7b11eab0d90a58ac132952

2cecf82aba7c11eab47b0a58ac135d36

三、編寫代碼(詳情見附件)框架

a.建立三個類別繼承接口:IAuthenticationAdapter、IAuthenticationAdapterMetadata、IAdapterPresentationFormide

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

e6c39520ba8011eaba120a58ac130f37

22ee33baba8211ea9f720a58ac13265b

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

四、註冊程序集至ADSF服務器的GAC中

a.增長簽名

def7275ebb6a11ea930d0a58ac132084

b.因爲ADFS服務器中沒有安裝.net的框架,因此須要從本地拷一份gacutil工具至ADFS服務器

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

7e10d144ba9611eab5460a58ac133928

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

c3708a9cbb6b11ea828b0a58ac133129

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

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

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

f26ab0f0ba9611ea893d0a58ac133c3a

五、註冊身份驗證提供者至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

3ce5aef4bb7411eabca60a58ac134425

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

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

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

6f7b7ed2bb7b11eab50e0a58ac1311c5d9edb9a8bab111ea9c030a58ac133527

八、測試

a.輸入正確的帳號密碼,點擊登陸

24db3124bb7111eaa72f0a58ac13232cb.輸入手機驗證碼,點擊驗證,登錄成功

339b9b22bb7111eabcda0a58ac132b80

501e646ebb7111eaa14d0a58ac13674a

4、更新dll操做

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

a219fa1ebb7411ea89a00a58ac135fa9二、撤消註冊提供程序
// 刪除AdfsAuthenticationProvider
Unregister-AdfsAuthenticationProvider –Name "RtMFAProvider"
三、從 GAC 中刪除程序集
// 先根據程序集名稱查詢詳情,後刪除
gacutil /l RekTec.Crm.AdfsCaptcha
gacutil /u 「RekTec.Crm.AdfsCaptcha, Version=1.0.0.0, Culture=neutral, PublicKeyToken=090b4b325acf4ab5, processorArchitecture=MSIL」

四、從新註冊更新後程序集至GAC
gacutil /if .\RekTec.Crm.AdfsCaptcha.dll
五、從新註冊提供程序(用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"

六、從新啓動ADFS服務
net stop adfssrv
net start adfssrv

七、增長多重身份驗證方法

84c1598abb7411ea88c50a58ac131f7a

 

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

相關文章
相關標籤/搜索