微软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

相关文章
相关标签/搜索