【问题标题】:Windows Authentication with ASP.NET MVC使用 ASP.NET MVC 进行 Windows 身份验证
【发布时间】:2010-11-27 05:18:35
【问题描述】:

我为我的 asp.net mvc 1.0 Web 应用程序构建了一个自定义登录系统,因为我为每个用户存储了大量用户数据(因此,我决定不尝试为 Windows 身份验证添加自定义表)。登录系统基本上使用 SQL Server(2005 或 2008)和我自己的数据库和表结构,非常标准。具有唯一 ID、用户名和哈希密码的用户表,该表链接到我的其他用户相关数据表。

我的问题是,如何绑定我的系统以使用 Windows 身份验证登录。我想允许管理员为用户(在我的系统中定义)选择一个 Windows 身份验证登录名,并可能在我的自定义表中添加一个值,以便我可以用来对他们进行身份验证?

这个问题的措辞可能有误,我可能误解了 Windows 身份验证的工作原理,但我想在我的 Web 应用程序中提供该选项。

【问题讨论】:

  • 我不知道确切的答案,但是:我认为要使用 Windows 身份验证,您需要设置活动目录并为网络上的每个人都有一个用户。然后我认为你需要使用 web.config 来模拟 asp.net 用户,你应该很高兴。

标签: asp.net asp.net-mvc windows-authentication


【解决方案1】:

如果我正确理解了您的问题,您想添加一些其他数据链接到 Windows Authenticated 用户名吗?

如果是这样,您需要将用户名和此自定义信息存储在新表中。 Windows 身份验证数据存在于 Active Directory 中,因此您可以查看那里以获取用户列表。当 Windows 对用户进行身份验证时,您不会自动将任何自定义信息添加到 AD。如果您需要任何自定义信息,您需要在 AD 中添加自定义查找,或者根据您决定存储信息的位置在数据库中查找自定义数据。

您通过 Windows 身份验证获得的几乎所有内容都是用户的用户名以及检查与该用户关联的角色(AD 组)的能力。除此之外,您需要手动编写代码。

我最近询问了如何在 MVC 中的内置安全性之外实现自定义,并自己提出了一个解决方案。也许有一些花絮可以帮助你回答你的问题:

How to implement authorization checks in ASP.NET MVC based on Session data?

【讨论】:

  • 有用的评论,一些不错的背景阅读和其他想法。
【解决方案2】:

如果您在您的站点上启用了 Windows 身份验证,那么您应该能够使用 User.Identity.Name 来获取当前登录用户的 NT/Active Directory 用户名,并将其与您的用户表中的列相匹配.

【讨论】:

  • 所以在我的 actionfilter HttpContext.Current.User.Identity.Name 中使用我可以访问我的用户名 (MACHINE\PHIL) 并设置了 IsAuthenticated。所以我需要做的就是在我的用户表中添加另一列,以将我的用户名与 User.IDentity.Name 相关联并检查它们是否经过身份验证?
  • 如果 User.Identity.Name 返回一个值,则它们已通过身份验证。更重要的是,除非经过身份验证,否则他们不应该能够访问页面(IIS 将强制他们在呈现页面之前进行身份验证)。
【解决方案3】:

这是我们为混合表单/Windows 身份验证应用程序所做的:-

public class MyBaseController
{
  protected override void OnAuthorization( AuthorizationContext authContext )
  {
    if
    (
      !User.Identity.IsAuthenticated &&
      Request.LogonUserIdentity != null &&
      Request.LogonUserIdentity.IsAuthenticated
    )
    {
      String logonUserIdentity = Request.LogonUserIdentity.Name;
      if ( !String.IsNullOrEmpty(logonUserIdentity) )
      {
        User loginUser =
          Context.Users.FirstOrDefault(
            x => x.UserIdentity == logonUserIdentity);
        if ( loginUser != null )
          FormsAuthentication.SetAuthCookie(
            loginUser.LoginName,createPersistentCookie);
    }
  }

为了紧凑,我去掉了一些封装。

【讨论】:

  • Iain,您介意发布更多代码吗?我有兴趣正确封装此功能以及您如何配置 IIS(我自己使用的是 IIS 7)。谢谢。
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2018-03-19
  • 2017-12-10
  • 1970-01-01
  • 2011-07-17
  • 2014-08-27
相关资源
最近更新 更多