我目前正在做一个项目,它有一个要求,这是导致我一些问题,我想知道最好的方式来处理它。
从本质上讲,我们希望内部用户能够访问MVC应用程序并通过AD进行身份验证,这就像SSO一样,他们登录到他们的计算机,导航到站点,然后他们就进入了。
第二类用户是我们的AD中不存在的外部合作伙伴,我们希望通过我们的SQL Server进行管理。对于这些用户,我们希望显示一个登录页面并进行表单身份验证。
起初我的想法很简单,让IIS尝试使用windows身份验证进行身份验证,如果失败(401),则重定向到登录页面。我目前还没有一个环境来测试这一点,但根据我对IIS7的理解,这并不是那么简单,需要一些"hack“才能完成。我需要避免这样的事情,我需要一个解决方案,因为系统的设计是为了工作,而不是通过欺骗它。
我研究过ADFS和WIF,但ADFS只支持AD,不支持SQL,而且从我所看到的情况来看,没有支持SQL Server的STS。我曾考虑承载一个使用windows身份验证的内部应用程序和一个使用窗体身份验证的外部应用程序,但如果可能的话,我希望避免这种情况。
理想情况下,我们想要的流程是用户导航到MVC应用程序,IIS尝试进行windows身份验证,如果失败(401),则将他们重定向到登录页面。从那里登录页面将根据SQL数据库对用户凭证进行身份验证。在一个MVC应用程序中完成这一切的最佳方式是什么?
谢谢!
发布于 2013-12-07 03:49:51
如果你使用的是ASP.NET MVC5,我只需要在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
我目前使用MVC4方法对Active Directory域进行身份验证,取得了很大的成功。我唯一建议的是将调用缓存到Active Directory,因为它有时可能不可靠。
发布于 2013-12-07 03:56:57
有一个支持sql server的服务器,那就是IdentityServer。
https://github.com/thinktecture/Thinktecture.IdentityServer.v2
它甚至支持自定义成员提供程序,这为您提供了相当多不同的可能性。但是,我不确定它是否支持在集成身份验证失败时自动回退到表单。如果没有,则有两个选项:一个自定义sts或两个显式sts和一个供用户选择的显式选项。我们已经使用ADFS实现了后一种情况--有两个ADFS,一个使用表单,另一个使用集成身份验证,第一个与另一个联合。这在主领域发现页面上提供了一个明确的选择-- ".would you like to log with username/password or try the integrated authentication“。
发布于 2016-01-09 05:43:24
您可以创建一个使用"On-Premises Authentication“的项目,它使用ADFS对用户进行身份验证。内部授权机构URI将为:
https://yourADFSservername/federationmetadata/2007-06/federationmetadata.xml加载项目后,您可以转到ADFS设置,创建一个新的“信任方信任”,并传递您的MVC应用程序将使用的HTTPS URL。设置为使用LDAP属性作为声明,这将轻松解决AD身份验证问题,因为它将像Office 365一样将用户导航到组织登录页面。然后,如果某些用户的身份验证失败,则将该用户发送到独立于AD并连接到SQL server的正常登录/注册页面。通过使用本地身份验证,可以完全跳过windows身份验证。
https://stackoverflow.com/questions/19454074
复制相似问题