对 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 身份验证器的主要内容,如果未能解决你的问题,请参考以下文章