如果没有登录提示,ASP.NET网站如何使用Active Directory组进行授权?

时间:2015-02-04 14:28:06

标签: active-directory asp.net-mvc-5 iis-6

我想构建一个内部网站点,该站点不会登录 - 提示已登录到AD的用户(在与IIS服务器相同的域中的公司计算机上)。到目前为止,我的所有尝试都导致基本的登录提示或无法读取HttpContext.User.Identity.Name。然后,将使用User对象检查该用户是否是域中某个Active Directory组的成员。

我看过不同的解决方案,要求用户在浏览器或注册表编辑中添加可信站点。这不是产品所有者想要的。 是否可以创建完全自动的体验(用户无论如何都必须登录到他们的计算机)?

MyAuthorizeAttribute

下面的代码位于我的自定义AuthorizeAttribute中,该AuthorizeAttribute放在我家控制器的索引方法上。但这并不重要,因为一旦有User对象并且调用了控制器,它就会起作用。作为该组成员的用户将继续访问起始页,其他用户不会。

            PrincipalContext context = new PrincipalContext(ContextType.Domain, "<domain name>");

            UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, httpContext.User.Identity.Name);

            if (userPrincipal != null)
            {
                if (userPrincipal.IsMemberOf(context, IdentityType.SamAccountName, "<group name>"))
                {
                    // The user belongs to the group
                    return true;
                }
            }
            // The user is not a member of the group, handle the unauthorized request
            return false;

的Web.config

<authentication mode="Windows" />    
<authorization>
  <allow users="*" />
</authorization>

IIS

网站:

  • 身份验证:仅启用Windows(我已尝试使用匿名但我无法检索任何用户信息)
    • 编辑:提供商:NTLM

应用程序池:

  • .NET 4.0.30319
  • 集成
  • 身份:网络服务(我也试过了应用程序池,但有一个解决方案建议使用网络服务)

1 个答案:

答案 0 :(得分:1)

对于它的价值,在Windows Auth的上下文中,用户的角色等同于其AD组成员身份。因此,您只需使用标准AuthorizeAttribute并完全删除自定义。

[Authorize(Roles = "<domain>\<group>")]

这里还没有足够的工作来告诉你你遇到的实际问题是什么,但删除你添加的自定义内容(总是容易失败)是减少的第一步变量。