无法验证域\用户组中的用户

时间:2019-05-30 16:23:33

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

我正在尝试为我的MVC应用程序对域中的所有用户进行身份验证。目前,我正在使用VSD-PROMETHEUS / Administrator用户进行测试。

我已尝试按照本answer中的建议,在控制器类中授权VSD-PROMETHEUS的用户组。

[Authorize(Roles = "VSD-PROMETHEUS\\Domain Users")]

这不起作用,浏览器仅提示我登录。

我也曾在web.config中尝试过

<authorization>
      <allow roles="VSD-PROMETHEUS\Domain Users"/>
      <deny users="*"/>
</authorization>

这也不成功


出于记录目的,我尝试仅对用户角色进行身份验证而不指定域,并且能够访问我的网站

[Authorize(Roles = "Users")]

当我仅指定用户名时也可以使用

[Authorize(User = "VSD-PROMETHEUS\\Administrator")]

如何从单个域(在本例中为VSD-PROMETHEUS)对所有用户进行身份验证?

1 个答案:

答案 0 :(得分:0)

我通过创建自定义授权属性来完成这项工作。

using System;
using System.Web;
using System.Web.Mvc;

/// <summary>
/// Authorises User based on what domain they are on.
/// </summary>
public class AuthorizeDomainAttribute : AuthorizeAttribute
{
    /// <summary>
    /// List of domains to authorise
    /// </summary>
    public string[] Domains { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null)
        {
            throw new ArgumentNullException("httpContext");
        }

        // Get the domain part of the username
        string userDomain = httpContext.User.Identity.Name.Substring(0, httpContext.User.Identity.Name.LastIndexOf('\\'));

        // Check if the user is on any of the domains specified
        foreach(string domain in this.Domains)
        {
            if (userDomain == domain)
            {
                return true;
            }
        }

        // Otherwise don't authenticate them
        return false;
    }
}

然后在我的控制器上使用此属性。

[AuthorizeDomain(Domains = new[] { "VSD-PROMETHEUS")]