【问题标题】:401 Error: Active directory & Asp.Net MVC401 错误:活动目录和 Asp.Net MVC
【发布时间】:2012-01-19 10:59:27
【问题描述】:

我在 MVC 解决方案中实现了以下操作属性。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeADAttribute : AuthorizeAttribute
{
    public string[] Groups { get; set; }      

      protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (base.AuthorizeCore(httpContext))
        {
            /* Return true immediately if the authorization is not 
            locked down to any particular AD group */
            if (Groups == null)
                return true;

            foreach (var group in Groups)
                if (httpContext.User.IsInRole(group))
                    return true;

        }
        return false;
    }
}

并像这样调用它:

 public const string Admin = "MY_DOMAIN\\Admins";
 public const string Users = "MY_DOMAIN\\Users";
 public const string AddUser = "MY_DOMAIN\\AddUser";


 [AuthorizeAD(Groups = new string[] { Admin, Users })]
 public ActionResult GridData(...)
 { ... }

 [AuthorizeAD(Groups = new string[] { Admin, Users, AddUser })]
 public ActionResult Add(...)
 { ... }

到目前为止,它似乎工作正常(本地没有问题),直到有人注意到(关于我发布的另一个问题),我在部署的实例上收到 401 错误。

我认为我的 AuthorizeADAttribute 需要重新设计,除非有人知道主机环境中的问题可能是什么。这个想法是用户必须在活动目录上的管理员或用户组中才能访问该站点,如果他/她被分配到用户角色,他们也需要属于另一个组,例如:添加,删除、更新等...

到目前为止,我很难过:/

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 iis active-directory


    【解决方案1】:

    到目前为止,它似乎工作正常(本地没有问题), 直到有人注意到(关于我发布的另一个问题),我一直 在部署的实例上收到 401 错误

    这很正常,NTLM authentication 就是这样工作的。这是一个质询-响应身份验证协议,这意味着服务器通过发送客户端响应的 401 页面来质询客户端,......所以您看到的 401 是服务器发送给客户端以验证自己的质询的一部分。您会看到最终客户端成功响应了质询并通过了 200 成功的身份验证。

    我认为您不应该使用自定义授权属性来修改任何内容。只是您可能不需要它,因为您可以使用默认的 Authorize 属性实现类似的功能:

    [Authorize(Roles = "MY_DOMAIN\\Admins,MY_DOMAIN\\Users" })]
    public ActionResult GridData(...)
    

    【讨论】:

    • 真的吗?!我每天都上学一点。我的问题是发送给客户端的实际 401 页面,有没有办法将其删除/替换为较小的页面......至于默认授权......让我快速尝试。跨度>
    • 达林是正确的。您应该查看我的文章 How to Create an Intranet Site Using ASP.NET MVC msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx
    猜你喜欢
    • 2015-05-05
    • 2017-10-02
    • 1970-01-01
    • 2014-05-20
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2010-12-13
    相关资源
    最近更新 更多