.NET MVC 身份验证 - 窗体 + Windows 身份验证

本文关键字:身份验证 Windows 窗体 MVC NET | 更新日期: 2023-09-27 18:36:07

我目前正在处理一个项目,该项目的要求导致我遇到一些问题,我想知道处理它的最佳方法。

从本质上讲,我们希望内部用户能够访问MVC应用程序并通过AD进行身份验证,我们希望这很像SSO,他们登录到他们的计算机导航到该站点并进入。

第二类用户是外部合作伙伴,这些合作伙伴在我们的AD中不存在,我们希望通过SQL Server进行管理。对于这些用户,我们希望显示登录页面并进行表单身份验证。

起初我的想法很简单,让IIS尝试使用Windows身份验证进行身份验证,如果失败(401)重定向到登录页面。我目前没有一个环境来测试它,但根据我对 IIS7 的理解,它并不那么简单,需要一点"黑客"才能完成。我需要避免类似的事情,我需要一种解决方案,该解决方案可以按照系统的设计工作而不是欺骗它。

我已经研究了ADFS

和WIF,但ADFS只支持AD而不是SQL,从我所看到的情况来看,没有支持SQL Server的STS。我考虑托管使用Windows身份验证的内部应用程序和使用表单身份验证的外部应用程序,但如果可能的话,我想避免这种情况。

理想情况下,我们想要的流程是用户导航到 MVC 应用程序 IIS 尝试执行 Windows 身份验证,如果失败 (401),则将它们重定向到登录页面。从那里,登录页将根据 SQL 数据库对用户凭据进行身份验证。在 1 个 MVC 应用程序中完成这一切的最佳方法是什么?

谢谢!

.NET MVC 身份验证 - 窗体 + Windows 身份验证

如果您使用的是MVC 5 ASP.NET 我会在FormsAuthentication或OWIN之上实现自己的身份验证。这非常简单,您将完全控制对用户进行身份验证的位置。相信我,它并不像听起来那么可怕。我写了几篇关于它的文章,你可能会觉得很有趣。

MVC 5

http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux

MVC 4

http://tech.pro/tutorial/1216/implementing-custom-authentication-for-aspnet

我目前使用 MVC 4 方法对 Active Directory 域进行身份验证,并取得了巨大成功。我唯一建议的是缓存对Active Directory的调用,因为它有时可能不可靠。

有支持sql服务器的STS,它是IdentityServer。

https://github.com/thinktecture/Thinktecture.IdentityServer.v2

它甚至支持自定义会员资格提供商,这为您提供了很多不同的可能性。但是,我不确定它是否支持在集成身份验证失败时自动回退到表单。如果没有,则有两个选项:一个自定义 sts 或两个显式 sts,以及用户的显式选择。我们已经使用 ADFS 实现了后一种方案 - 有两个 ADFS,一个使用窗体,另一个使用集成身份验证,第一个与另一个联合。这会在主领域发现页面上给出明确的选择 - ".是要使用用户名/密码登录还是尝试集成身份验证"

可以创建一个使用"本地身份验证"的项目,该项目使用 ADFS 对用户进行身份验证。本地颁发机构 URI 将为:

https://yourADFSservername/federationmetadata/2007-06/federationmetadata.xml

加载项目后,可以转到 ADFS 设置并创建新的"信赖方信任",并传递 MVC 应用将使用的 HTTPS URL。设置为使用 LDAP 属性作为声明,这将轻松整理 AD 身份验证,因为它会将用户导航到组织登录页面,就像 Office 365 一样。然后,如果某些用户的身份验证失败,请让用户将用户发送到独立于 AD 存在并连接到 SQL Server 的正常登录/注册页。可以使用本地身份验证完全跳过 Windows 身份验证。