0

我对网站上的 Windows 身份验证以及如何管理内置管理员的声明感到困惑。具有管理员权限但未通过IsInRole(BuiltInAdmin)测试的用户。

  • 为什么分配拒绝声明?
  • 我应该直接检查用户而不是依赖提供的声明吗?
  • 这是在网站上使用 Windows 身份验证的非提升身份声明的结果吗?

在我为某些情况添加 IS 管理员检查之前,该过程一切正常。我使用了按预期触发的自定义 AUTH 属性按预期 工作并记录了 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 与 CLAIMS/denyonlysid 一起交付:

所以这意味着请求说除了内置的管理员声明。尽管用户确实具有管理员权限。

额外信息: APP POOL 使用集成模式。Windows 身份验证,并具有特殊的用户身份。自定义用户没有管理员权限。

在此处输入图像描述

4

0 回答 0