Active directory ASP.NET网站如何在没有登录提示的情况下授权使用Active Directory组?

Active directory ASP.NET网站如何在没有登录提示的情况下授权使用Active Directory组?,active-directory,asp.net-mvc-5,iis-6,Active Directory,Asp.net Mvc 5,Iis 6,我想建立一个内部网网站,它不会提示已经登录到广告的用户登录(在与IIS服务器位于同一域的公司计算机上)。到目前为止,我的所有尝试都导致出现基本登录提示,或者无法读取HttpContext.User.Identity.Name。然后,用户对象将用于检查该用户是否是域中某个Active Directory组的成员 我见过不同的解决方案,要求用户在浏览器或注册表编辑中添加受信任的站点。这不是产品所有者想要的是否可以创建完全自动的体验(用户无论如何都必须登录到他们的计算机)? MyAuthorizeAt

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

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

MyAuthorizeAttribute

下面的代码位于我的自定义属性中,该属性位于我的主控制器的索引方法中。不过这并不重要,因为一旦有了用户对象并调用了控制器,它就会工作。属于该组成员的用户将继续进入起始页,其他用户则不会

            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;
PrincipalContext context=newPrincipalContext(ContextType.Domain,”);
UserPrincipal UserPrincipal=UserPrincipal.FindByIdentity(上下文,httpContext.User.Identity.Name);
if(userPrincipal!=null)
{
if(userPrincipal.IsMemberOf(上下文,IdentityType.SamAccountName,“”)
{
//该用户属于该组
返回true;
}
}
//用户不是组成员,请处理未经授权的请求
返回false;
Web.config

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

IIS

地点:

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

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

值得一提的是,在Windows Auth的上下文中,用户的角色相当于他们的广告组成员身份。因此,您可以简单地使用标准的
authorized属性
,并完全删除自定义属性

[Authorize(Roles = "<domain>\<group>")]
[授权(角色=“\”)]

这里没有足够的内容来告诉您实际遇到的问题是什么,但是删除您添加的自定义内容(通常会失败)是减少变量的好的第一步。

尽管这对解决登录提示问题没有帮助,谢谢提示!我想我必须创建一个自定义属性,以自己的方式处理未经授权的请求等等。但这看起来更具可读性。我想知道,如果我想在应用程序/站点级别进行授权,我应该怎么做?尝试不在每个控制器上定义Authorize属性。谢谢。遗憾的是,我还没有让这个工作,但如果我弄明白了,我会创造一个答案。不过,我们可能会使用登录提示版本。