对 ASP.NET MVC 使用 TOTP Microsoft 身份验证器

Posted

技术标签:

【中文标题】对 ASP.NET MVC 使用 TOTP Microsoft 身份验证器【英文标题】:using TOTP Microsoft authenticator for ASP.NET MVC 【发布时间】:2021-05-13 08:37:59 【问题描述】:

我们已经为我们的自制网站使用了 Active Directory 的单一身份验证过程(简单的登录名和密码)。我们的 AD 也在 Azure 上(一切都是同步的)。

现在我们希望使用以下方式进行 2 个因素身份验证:(Microsoft Authenticator) https://www.microsoft.com/en-us/account/authenticator

我一直在寻找一个例子,但是我找到的大多数教程都是关于 MVC CORE 的; 我没有使用核心,只是常规的 MVC .Net 框架。此外,我发现使用 .Net 框架的唯一教程是针对 Google 身份验证器的,而不是 Microsoft 的。

预期的行为将与我连接到 Office 365 时相同,首先我在网站中输入我的密码,然后我在手机上收到通知(例如),通过批准连接,我可以访问网页内容。

我仍在试图弄清楚这是否允许,Microsoft Authenticator 是否仅适用于 Microsoft 开发人员,还是我们随机开发人员可以将此应用程序用于我们的 2FA 需求?或者有没有办法触发 Office 365 身份验证窗口?

如果是,他们似乎并不急于分享 MVC .net 框架的任何代码或教程。 (我还在寻找)

为 cmets 编辑:

Microsoft auth .Net Core 文档:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/mfa?view=aspnetcore-5.0

带有 .Net 框架文档的 Google 身份验证:

https://medium.com/@henryhdelgado/2fa-with-google-authenticator-in-asp-mvc-4788c79c47

【问题讨论】:

第一个问题,.Net Core vs .Net Framework 的使用是否有产品要求?您能否提供指向您参考文档/教程的链接?您的用户存储在哪里?如果它们在 Active Directory 中,您可以直接调用您的 AD 主机并触发 MFA 提示。 AD 主持人将确定此问题的答案。 @Seeds 查看我的编辑,是的,我所有的用户都在 AD 中。调用我的广告主机来触发 MFA 提示会很棒!不过我不知道怎么做,我可以向您展示我用来记录用户的代码(不确定是否有帮助) 确认一下,我们说的是 Windows 机器上的 Microsoft AD 吗?还是 Azure 云 AD?或其他类型的 AD(这会影响哪个库/方法)。 @Seeds Microsoft Active Directory 我们在我们的建筑物中托管,具有域名和文件夹以及成千上万的用户 刚刚看到我们也在azure上 【参考方案1】:

简而言之:您不需要做任何事情(前提是您的应用程序使用 OIDC 对用户进行身份验证,如果您使用的是 Azure Active Directory或 Office 365 与您的应用程序)。只需在您的组织的 O365 或 AAD 设置中切换开关以要求 TOTP/2FA。

但是,如果您的应用程序实际上是针对本地 AD 进行身份验证(无论是通过浏览器外壳使用 Kerberos,还是使用“表单身份验证”),并且您不能让您的 Web 应用程序针对 AAD/O365 进行身份验证(not on-prem AD)并且您没有 AD Federation 工作,那么您将进入一个痛苦的世界,因为让 on-prem 2FA 工作是一项艰巨的任务,需要您付出同样多的工作系统管理员,就像它对你所做的那样(然后你的问题会因为“太宽泛”而被关闭,抱歉!)


可以使用任何 OIDC 客户端库对 AAD/O365 进行身份验证,尽管 Microsoft 确实在 NuGet 上提供了一个专门构建的库,该库可在 .NET Core 之外的 .NET Framework 应用程序中使用:https://www.nuget.org/packages/Microsoft.Identity.Client/(以前为 @987654322 @)


“Azure Active Directory”(AAD) 用词不当,因为它与本地 Active Directory 几乎没有关系。也就是说,如果您在企业中使用 Office 365,那么您将已经启动并运行 AAD - 请注意,它仍然与 Active Directory 完全无关(就技术而言)。

将 AAD/O365 用于 SSO 基本上意味着使用 OIDC(而本地 AD 是 Kerberos,而不是 OIDC)——因此任何 OIDC 库都可以与 AAD/O365 一起使用。 TOTP/2FA 部分完全由 AAD/O365 处理,因此您实际上不需要在自己的应用程序中执行任何操作来处理 TOTP/2FA。

【讨论】:

我的自制网络应用程序由我们的本地 IIS 服务器托管,我目前使用 DirectoryEntry 类来验证用户,它只是验证用户和密码是否匹配,就像你说的表单验证一样......但是你认为,如果我只是添加库,我可以处理这个吗? @AntoinePelletier 哦,不。如果您使用的是DirectoryEntry,那么您无论如何都做错了(相反,您应该使用 AD SPN 模拟或委派 - 因为不应有任何程序处理 AD 用户凭据!) - 因为您需要切换到 OIDC,所以您必须基本上重新实现您的网络应用程序的整个 authX 系统 - 玩得开心!您正在查看至少几个星期的学习 ASP.NET 的身份验证系统如何工作,然后使用 OIDC 进行操作,然后再编写任何代码。您应该考虑利用这个机会迁移到 ASP.NET Core,imo。 天啊...这将永远持续下去。嗯,到了进化的时候。最后一个问题,当我使用我不安全的DirectoryEntry 技术时,我可以访问其他已经很好地存储且重要的信息,例如用户在哪里工作、电话号码是什么。我想这也可以通过 OICD 实现? @AntoinePelletier 是的,但只有在用户同意的情况下 - 但这已经作为 OAuth2 的一部分(OIDC 的一部分)处理:您的应用程序将请求访问特定的“范围”(例如用户文件, 用户的个人信息等),并且用户可以选择是否授予您的应用程序同意(但如果这是一个内部应用程序,系统管理员将为每个人设置默认权限) . 你让我走上了正轨,我发现了这个:docs.microsoft.com/en-us/azure/active-directory/develop/… 不确定,但我认为这就是我的目标

以上是关于对 ASP.NET MVC 使用 TOTP Microsoft 身份验证器的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.Net MVC 对网格进行分页和排序

如何对 Asp.net MVC 文件进行单元测试

如何使用 MVC3 ASP.NET 4.5 和 EF6 基于实体属性注释对 TextBoxFor 进行舍入

处理对 ASP.NET MVC 操作的 CORS 预检请求

在asp.net mvc中对控制器进行简单的Ajax调用

在 asp.net mvc 中对控制器进行简单的 Ajax 调用