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

时间:2013-10-18 16:04:01

标签: c# asp.net-mvc authentication iis

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

基本上我们希望内部用户能够访问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应用程序中实现这一切的最佳方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您使用的是ASP.NET MVC,我会在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,因为它有时可能不可靠。

答案 1 :(得分:1)

有支持sql server的STS,它是IdentityServer。

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

它甚至支持自定义成员资格提供程序,它们为您提供了很多不同的可能性。我不确定它是否支持在集成身份验证失败时自动回退到表单。如果没有,则有两个选项:自定义sts或两个显式stses以及用户的显式选择。我们用ADFS实现了后一个场景 - 有两个adfses,一个是Forms,另一个是集成auth,第一个是另一个。这在home realm发现页面上给出了明确的选择 - “。你想用用户名/密码登录还是尝试集成身份验证”

答案 2 :(得分:1)

您可以创建一个使用"内部部署身份验证"它使用ADFS对用户进行身份验证。内部部署权限URI将是:

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

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