我已经使用下面的代码设置了一个自定义角色提供程序,除了它似乎从未被使用过,并且正在使用默认提供程序。当使用[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
错误,所以我假设我正在通过身份验证。
我已根据this SO post清除了浏览器Cookie,但这没有效果。
CustomerRoleProvider
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
}
的web.config
<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();
}
}
答案 0 :(得分:5)
这是因为未将IIS Express设置为使用Windows身份验证。要解决此问题,我在解决方案资源管理器中选择了项目,打开了属性窗口集Windows Authentication = Enabled
和Anonymous Authentication = Disabled
。自定义角色提供程序现在可以使用。