C# .NET MVC身份验证-表单+;Windows身份验证

C# .NET MVC身份验证-表单+;Windows身份验证,c#,asp.net-mvc,authentication,iis,C#,Asp.net Mvc,Authentication,Iis,我目前正在从事一个项目,该项目的一个需求给我带来了一些问题,我想知道处理这个问题的最佳方法 本质上,我们希望内部用户能够访问MVC应用程序,并通过AD进行身份验证,这与SSO非常相似,他们登录到自己的计算机,导航到站点,然后进入 第二类用户是广告中不存在的外部合作伙伴,我们希望通过SQL Server进行管理。对于这些用户,我们希望显示登录页面并进行表单身份验证 起初我的想法很简单,让IIS尝试使用windows身份验证进行身份验证,如果失败(401),则重定向到登录页面。我目前没有一个环境来测

我目前正在从事一个项目,该项目的一个需求给我带来了一些问题,我想知道处理这个问题的最佳方法

本质上,我们希望内部用户能够访问MVC应用程序,并通过AD进行身份验证,这与SSO非常相似,他们登录到自己的计算机,导航到站点,然后进入

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

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

我已经研究过ADFS和WIF,但ADFS只支持AD而不支持SQL,而且从我所看到的来看,没有支持SQL Server的STS。我已经考虑过托管一个使用windows身份验证的内部应用程序和一个使用表单身份验证的外部应用程序,但如果可能的话,我希望避免这种情况

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


谢谢大家!

如果您使用的是ASP.NET MVC 5,我会在FormsAuthentication或OWIN的基础上实现自己的身份验证。它非常简单,您可以完全控制在何处对用户进行身份验证。相信我,这并不像听起来那么可怕。我已经写了一些关于它的帖子,你可能会觉得有趣

MVC5

MVC4


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

有支持sql server的STS,它是IdentityServer


它甚至支持定制的成员资格提供者,这给了你很多不同的可能性。但是,我不确定它是否支持在集成身份验证失败时自动回退到表单。如果没有,则有两个选项:一个自定义sts或两个显式sts,以及用户的显式选择。我们曾经用ADF实现过后一种场景——有两个ADF,一个带有表单,另一个带有集成身份验证,第一个与另一个联合。这在home realm discovery页面上提供了一个明确的选择-“。您想使用用户名/密码登录还是尝试集成身份验证”

您可以创建一个使用“内部部署身份验证”的项目,该项目使用ADF对用户进行身份验证。本地机构URI将为:

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

加载项目后,您可以转到ADFS设置,创建新的“依赖方信任”,并传递MVC应用程序将使用的HTTPS URL。设置使用LDAP属性作为声明,这将很容易地对AD身份验证进行分类,因为它将用户导航到组织登录页面,就像Office 365一样。然后,如果某些用户的身份验证失败,请将该用户发送到独立于AD并连接到SQL server的正常登录/注册页面。您可以使用本地身份验证完全跳过windows身份验证。

我会首先通过检查Active Directory中的信息来验证用户身份,如果找到,请直接登录。否则显示登录页面。从数据库验证用户凭据。可能还有其他方法,但我觉得这很容易。你检查广告的方法是什么,是从MVC端还是IIS端?我们希望利用IIS进行windows身份验证。您可以采用任何一种方式。如果MVC应用程序中启用了windows身份验证,则可以使用User.Identity.Name获取广告用户名,并查看该用户是否已通过身份验证。是否可以简单地将其添加到广告中?你将不得不以这样或那样的方式管理登录。为什么不是广告?他们不需要任何内部网络权限。你可以重写你的帖子。。。MVC5一个,还没读过另一个。。。这并不能解释这对Windows身份验证的帮助。。您能解释一下这是如何增加价值的吗?Windows auth有一个API,您可以利用它进行身份验证。一旦你这样做了,你就可以从那里关注我的帖子。问题是我想知道如何做到这两个。你的回答(顺便说一句,我认为很好)只是部分解决了这个问题。如果你能记录windows部分并更新你的答案,我想你会有很多选票。