我正在使用Identity作为授权引擎编写ASP.NET应用程序。我编写了自定义用户和角色存储,它们似乎正常工作。但是,由于某些未知原因,尝试在控制器操作上使用Authorize
角色失败并重定向到Home/Index
。该操作如下所示:
[Authorize(Roles = "Admin")]
public ActionResult Manage()
{
return View();
}
重定向是以静默方式完成的,因此我无法将调试器挂钩到任何地方(尤其是在运行操作之前正在执行动作过滤)。
我想这可能不足以诊断问题,所以请在评论中告诉我,您需要哪些其他信息,我会编辑问题。
为什么不起作用?
编辑:Startup.cs中的配置
public void Configuration(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();
app.CreatePerOwinContext<ApplicationUserManager>(() => DependencyResolver.Current.GetService<ApplicationUserManager>());
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login")
});
}
编辑:另一项行动:
[AllowAnonymous]
public async Task<ActionResult> Index()
{
// This returns FALSE
if (User.IsInRole("Admin"))
System.Diagnostics.Debug.WriteLine("Ok");
var userManager = UnityConfig.Container.Resolve<ApplicationUserManager>();
// This returns TRUE
if (await userManager.IsInRoleAsync(User.Identity.GetUserId<int>(), "Admin"))
System.Diagnostics.Debug.WriteLine("Ok");
return View();
}
答案 0 :(得分:2)
要检查的几件事情: