C# 第二个因素是RADIUS身份验证的ADFS 3.0 MFA(RADIUS的身份验证提供程序)?

C# 第二个因素是RADIUS身份验证的ADFS 3.0 MFA(RADIUS的身份验证提供程序)?,c#,.net,authentication,adfs,radius,C#,.net,Authentication,Adfs,Radius,请容忍我,因为我解释的情况下,这是有意义的。我们有一个现有的远程访问基础设施,它使用RADIUS作为2FA-LDAP(AD)和第三方TOTP提供商。TOTP提供程序可以是RSA、Yubikey、Google、Azure等-RADIUS服务器已配置为允许多个可能的TOTP提供程序作为身份验证的第二个因素 现在,我们希望对我们的一些服务提供商实施ADFS,因为它具有强大的授权声明规则;但我们希望有第二个认证因素的安全性,以及我们目前在RADIUS设置中的灵活性。与为ADFS MFA设置相同的TOTP

请容忍我,因为我解释的情况下,这是有意义的。我们有一个现有的远程访问基础设施,它使用RADIUS作为2FA-LDAP(AD)和第三方TOTP提供商。TOTP提供程序可以是RSA、Yubikey、Google、Azure等-RADIUS服务器已配置为允许多个可能的TOTP提供程序作为身份验证的第二个因素

现在,我们希望对我们的一些服务提供商实施ADFS,因为它具有强大的授权声明规则;但我们希望有第二个认证因素的安全性,以及我们目前在RADIUS设置中的灵活性。与为ADFS MFA设置相同的TOTP提供程序(这是冗余的,因为它已经在RADIUS中配置)不同,我们认为可以使用RADIUS身份验证的结果作为ADFS中身份验证的第二个因素。除此之外,出于明显的安全原因,我们希望在我们的网络中有一个单一的入口点,因此我们不能在周边同时拥有ADF和RADIUS。当然,我们希望维护基于SAML的SSO,因此不能单独依赖RADIUS。我想明确指出,我们不想取代RADIUS,因为已经有太多的系统依赖它;我们想要的是使用ADFS MFA的现有功能

我们目前在F5 APM SAML IdP上设置了这个场景,所以这不是什么新鲜事。我只想知道这对于ADF是可能的,并且即使考虑替换当前的F5安装也会有多困难。如果F5 APM可以做到这一点;那么,ADF也可以吗?至少这是我的理由

我查看了可能的选项,发现有必要创建自定义身份验证提供程序,如以下链接所述:

https://blogs.technet.microsoft.com/cloudpfe/2014/02/01/how-to-create-a-custom-authentication-provider-for-active-directory-federation-services-on-windows-server-2012-r2-part-2/
该说明足够详细,可用于测试;但我发现这在很大程度上取决于第二个认证因素的实际来源。我找到了使用Google Authenticator和Yubikey(除了随时支持的MFA提供者)实现此功能的明确说明;但我找不到有关为RADIUS创建身份验证提供程序的说明


这可能吗?谁能给我指一下正确的方向吗

您应该可以这样做。根据你提到的一些注释

  • 因为您提到您有多个TOTP提供程序,所以您需要ADFS中的适配器来请求TOTP提供程序
  • 一旦有了TOTP提供程序,您就可以控制该提供程序的输入表单。这可以在编辑字段中进行一般处理,您可以通过Java脚本控制谁是用户体验
  • 一旦您有了提供者ID和OTP,我假设您可以通过一些RADIUS API调用它来执行验证并返回结果
希望有帮助

谢谢
//Sam(@MrADFS)

为任何想知道的人;我可以通过创建自定义身份验证提供程序来实现这一点,如我在问题中发布的technet博客中所述:

https://blogs.technet.microsoft.com/cloudpfe/2014/02/01/how-to-create-a-custom-authentication-provider-for-active-directory-federation-services-on-windows-server-2012-r2-part-2/
我在此链接中使用了.NET类来为提供程序实现RADIUS客户端,因为我找不到任何其他.NET API:

http://nradius.nw-network.com/web/

不管怎样,它工作得很好!很遗憾,我没能找到是谁开发了这个类,但我确实发了一封匿名感谢信

嗨,塞缪尔,谢谢你的回复。你实际上概述了我想在我的描述中解释的内容-谢谢你总结。不过,在你的第三个要点(这是我的实际问题)中,这个问题仍然存在。因为RADIUS是一个开放的标准实现;我还假设有一个API,您可以直接插入身份验证提供程序,将身份验证的两个因素传递给RADIUS服务器-但我不知道这是什么或在哪里。每个RADIUS平台供应商的API可能有不同的实现。你应该看看你的供应商是否支持这一点;至少在核心组件中,它是如何运行的。所有实施RADIUS的供应商应符合RFC 2865(66);或者他们的产品不会被称为RADIUS。无论如何,我会看看是否可以在.NET中实现一个RADIUS客户机-尽管我真的不想阅读RFC:/如果运气好,我会回来报告。