我想构建一个内部网站点,该站点不会登录 - 提示已登录到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
网站:
应用程序池:
答案 0 :(得分:1)
对于它的价值,在Windows Auth的上下文中,用户的角色等同于其AD组成员身份。因此,您只需使用标准AuthorizeAttribute
并完全删除自定义。
[Authorize(Roles = "<domain>\<group>")]
这里还没有足够的工作来告诉你你遇到的实际问题是什么,但删除你添加的自定义内容(总是容易失败)是减少的第一步变量。