一、背景概述
AD FS是微软提供的一套统一身份认证解决方案,我个人认为是比较小众的产品,而且使用体验一般;AD FS里自带的是Azure MFA,由于国内短信发送可能存在不及时问题,企业决定使用阿里云短信作为MFA(Multi-Factor Authentication)多因子认证方法。
首先 官方开发指导手册在 Windows Server 中为 AD FS 生成自定义身份验证方法 | Microsoft Learn
先看效果:
登录完会跳转到自定义的页面,然后后台同步会发送一条短信到用户手机
二、代码解读&实施过程
2.1 代码解读
代码里主要是三块:
1. IAuthenticationAdapter接口 这个主要是负责里面的核心业务逻辑 其中BeginAuthentication方法是进入的时候执行,TryEndAuthentication方法是 提交的时候执行
2.IAuthenticationAdapterMetadata 元数据展示,听名字应该就可以看出这个是一个命名用的,用来标记我这个叫什么名字,展示的简介
3.IAdapterPresentationForm 展示页面,就是对应的html片段,AD FS里不是独立的html页面,相当于是把页面读取到内存中,随用随取
我截图相关代码示例
BeginAuthentication方法
TryEndAuthentication方法
2.2 服务器部署
把编译好的DLL上传到服务器某个目录用于后续注册
这一块建议跟着官方的手册做,我的示例如截图
首先要先把 NETFX 4.8 Tools工具上传到服务器,用来注册dll到系统用的
#注册1
gacutil.exe /if MFAadapter.dll
gacutil.exe /l MFAadapter
然后再到powershell里引用dll
#注册
$typeName = “MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a591fa04bdf274e8, processorArchitecture=MSIL”
Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter”
#查看
Get-AdfsAuthenticationProvider
net stop adfssrv
net start adfssrv
注意:
由于除了自身dll可能还会引用其他第三方的dll文件,这些dll文件需要放到AD FS的运行目录,目录地址:%windir%\ADFS
然后到AD FS里启用
三、避坑指南
这个打包好的DLL是要求要强签名的,所以当引用较多的第三方类库的时候有的不是强签名而导致报错,需要给dll改为强签名,这个可以参考我的博客 C#未能加载文件或程序集。需要强名称程序集,异常来自 HRESULT:0x80131044-CSDN博客