【问题标题】:Get current windows authenticated user from Active Directory in Asp.Net MVC从 Asp.Net MVC 中的 Active Directory 获取当前 Windows 身份验证用户
【发布时间】:2018-03-23 11:00:22
【问题描述】:

我有一个网络应用程序,用户需要创建/编辑/删除帖子操作的权限。权限根据 Windows 用户名和自定义角色名称在数据库中的自定义表中处理。

这是我的代码:

var username = Environment.UserName;

using (HostingEnvironment.Impersonate())
{
    var ctx = new PrincipalContext(ContextType.Domain);
    var user = UserPrincipal.FindByIdentity(ctx, username);

    if (user != null)
    {
        var roleName = accessRepository.GetRole(username);

        if (string.IsNullOrEmpty(roleName) || roleName != Roles.admin.ToString())
        {
            hasAccess = false;
        }
    }
    else
    {
        hasAccess = false;
    }

    if (!hasAccess)
    {
        // redirect
    }
}

在 web.config 我有

<authentication mode="Windows" />

我也试过设置

<identity impersonate="true" />

但它不起作用。在服务器上,我尝试将 IIS 设置为启用 Asp.Net 模拟和匿名访问以及这三者的所有变体中的 Windows 身份验证。

当我在我的机器上本地运行它时没有问题,username 是我登录到我的机器时的 Windows 身份验证的用户名。

但是当我将它上传到服务器并访问本地计算机上的网站时,username 是来自服务器的用户名,而不是来自本地计算机的用户名。

为了清楚起见,我不希望用户登录到 Web 应用程序。我希望 Web 应用程序从活动目录中找出 Windows 身份验证。

这不可能吗?还是我想的不对?

【问题讨论】:

  • 您似乎在 IIS 中启用了匿名身份验证.. 看看

标签: c# asp.net-mvc-5 active-directory windows-authentication


【解决方案1】:

明确一点,我不希望用户登录网络 应用。我希望 Web 应用程序找出窗口 来自活动目录的身份验证。

这是不太有意义的部分。找出用户的 AD 帐户的唯一方法是他们是否通过您的应用程序进行身份验证。他们不必输入他们的凭据 - 但他们的凭据仍会发送到您的服务器,并且您的服务器会验证它们是正确的。所以从这个意义上说,他们正在“登录”。

这是通过 Windows 身份验证实现的。你走在正确的轨道上:

<authentication mode="Windows" />

但请确保您也禁用匿名身份验证。然后你可以像这样访问用户的用户名:

HttpContext.Current.User.Identity.Name

格式为 DOMAIN\Username。

附带说明,Environment.UserName 获取当前线程在其下运行的用户名 - 基本上,IIS 是在其下运行的凭据。在您的开发机器上,这是您的用户名(可能是因为您使用的是 IIS Express)。但是在服务器上就不同了。

【讨论】:

  • 可能还不清楚。我不希望网站向用户询问用户名和密码。我认为网站/服务器有一种方法可以从用户运行的机器上检索 Windows 身份验证。这是不正确的吗?现在我启用了匿名和 Windows 身份验证并启用了 Asp.Net Impersonate。在 web.config 我有 和 。现在 User.Identity.Name 给了我IUSR。我希望 User.Identity.Name 将用户的用户名提供给 windows
  • 然后关闭匿名身份验证。你也不需要冒充。
  • 我已禁用 iis 上的匿名身份验证以及 asp.net 模拟。我还从 web.config 中删除了 。它仍然提示我输入凭据。
  • 如果您在它询问时提供您的域凭据,它是否有效?如果是这样,那么 Windows 身份验证正在工作。
  • 要让浏览器在不询问您的情况下发送您的凭据,您需要将您的站点添加到 Windows Internet 选项中的受信任站点或 Intranet 站点列表中。
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多