我对网站上的Windows身份验证感到困惑,以及如何管理内置管理员的声明。具有管理员权限但未通过IsInRole(BuiltInAdmin)
测试的用户。
该过程按预期工作,直到我为某些案例添加了IS管理员检查。 我使用了按预期触发的自定义AUTH属性 Works as expected and documented AuthorizeAttribute 我可以回归真假。这一切都很好。
但检查ADMIN角色失败。
代码:
[AttributeUsage(AttributeTargets.Class)] // all controllers inherit this attribuet
public class CUSTOMAuth:AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
if (! base.AuthorizeCore(httpContext)) {
return false;
}
// is the identity on teh request an admin ?
return (IsLocalAdmin(httpContext.Request.LogonUserIdentity));
}
}
public static bool IsLocalAdmin(WindowsIdentity identity) {
var localAdmins = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
if (identity != null) {
var prin = new WindowsPrincipal(identity);
return (prin.IsInRole(localAdmins)); //<<< returns false
}
return false;
}
在调试器中,我看到httpContext.Request.LogonUserIdentity随附了 索赔/ denyonlysid:
这意味着该请求表示除了内置的管理员声明。 虽然用户确实拥有管理员权限。
额外信息: APP POOL使用集成模式.Windows身份验证,并具有特殊的用户身份。 自定义用户没有管理员权限。