【问题标题】:.NET MVC Authentication - Forms + Windows Authentication.NET MVC 身份验证 - 表单 + Windows 身份验证
【发布时间】:2023-03-22 06:42:01
【问题描述】:

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

本质上,我们希望内部用户能够访问 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 数据库验证用户凭据。在 1 个 MVC 应用程序中完成这一切的最佳方式是什么?

谢谢!

【问题讨论】:

  • 我将首先通过检查 Active Directory 中的信息来验证用户身份,如果找到,则直接登录。否则显示登录页面。从数据库验证用户凭据。可能还有其他方法可以做,但我觉得这很容易。
  • 您检查 AD 的方法是什么,是从 MVC 端还是 IIS?我们希望利用 IIS 进行 Windows 身份验证。
  • 无论哪种方式都可以。如果在您的 MVC 应用程序中启用了 windows 身份验证,那么您可以使用 User.Identity.Name 来获取 AD 用户名并查看用户是否经过身份验证。
  • 是否可以简单地将它们添加到您的广告中?您将不得不以一种或另一种方式管理登录。为什么不是AD?他们不需要任何内部网络权限。

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


【解决方案1】:

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

【讨论】:

  • 你可以重写你的帖子......嗯,MVC 5 一个,还没有读过另一个......它没有解释这对 Windows auth 有什么帮助......你能解释一下这是怎么回事添加任何价值。
  • Windows auth 有一个 API,可用于身份验证。一旦你这样做了,你就可以从那里关注我的帖子。
  • 问题是我想知道如何做到这两点。您的回答(我认为这很好)只是部分解决了这个问题。如果您可以记录 windows 部分并更新您的答案,我认为您将获得大量选票。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以创建一个使用“本地身份验证”的项目,该项目使用 ADFS 对用户进行身份验证。本地授权 URI 将为:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多