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

你可能感兴趣的:(微软CRM 基于 ADFS自定义多重身份验证)