MVC Windows身份验证 - 用户声明拒绝管理员访问:目标.net4.5

时间:2013-09-27 02:41:09

标签: asp.net-mvc windows-authentication

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

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

该过程按预期工作,直到我为某些案例添加了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身份验证,并具有特殊的用户身份。 自定义用户没有管理员权限。

enter image description here

0 个答案:

没有答案