5

我已经使用下面的代码设置了一个自定义角色提供程序,但它似乎从未被使用过,而是使用了默认提供程序。[Authorize(Roles = "Administrator")]当使用属性装饰 HomeController 时,CustomRoleProvider正在调用构造函数(我只包含构造函数以查看是否会命中断点),但没有调用任何方法。然后我只剩HTTP Error 401.0 - Unauthorized下一页。

除了向 web.config 添加必要的位之外,我没有做任何其他事情来让 Windows 身份验证正常工作。我认为它正在工作,因为如果我不包含<allow users="*"></allow>(显然没有包含Authorize属性)我会收到一个401.2.: Unauthorized: Logon failed due to server configuration错误,所以我假设我正在通过身份验证。

我已经按照这个 SO 帖子清除了我的浏览器 cookie,但这没有任何效果。

客户角色提供者

public class CustomRoleProvider : RoleProvider
{
    public CustomRoleProvider()
    {            
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        bool isUserInRole = false;

        // omitted for brevity

        return isUserInRole;
    }

    public override string[] GetRolesForUser(string username)
    {
        string[] roles = null;

        // omitted for brevity

        return roles;
    }

    // omitted for brevity

}

网络配置

    <authentication mode="Windows">
    </authentication>
    <authorization>
      <allow users="*"></allow>
      <deny users="?"/>
    </authorization>
    <roleManager defaultProvider="CustomRoleProvider" enabled="true">
      <providers>
        <clear />
        <add name="CustomRoleProvider" type="ProjectName.UI.Mvc.Code.Providers.CustomRoleProvider" />
      </providers>
    </roleManager>

家庭控制器

[Authorize(Roles = "Administrator")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
4

1 回答 1

5

这是因为没有将 IIS Express 设置为使用 Windows 身份验证。为了修复我在解决方案资源管理器中选择了项目,打开了属性窗口集Windows Authentication = EnabledAnonymous Authentication = Disabled. 自定义角色提供程序现在可以工作。

于 2014-08-25T17:42:44.433 回答