我正在编写使用身份作为授权引擎的 ASP.NET 应用程序。我编写了自定义用户和角色存储,它们似乎工作正常。但是,由于某些未知原因,尝试对 Controller 的操作使用 Authorize
角色失败并重定向到 Home/Index
。该操作如下所示:
[Authorize(Roles = "Admin")]
public ActionResult Manage()
{
return View();
}
重定向是静默完成的,所以我无法在任何地方 Hook 调试器(尤其是在运行操作之前完成操作过滤)。
我想这可能不足以诊断问题,所以请在评论中告诉我,您需要什么额外信息,我会编辑问题。
为什么它不起作用?
编辑: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")
});
}
编辑: 另一个 Action :
[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();
}
最佳答案
需要检查的几件事:
- 登录页面设置成什么?我猜你要么未经身份验证要么未经授权,MVC 将你发送到登录页面(可能设置或默认为“/”
- 如果您确定自己已登录(已通过身份验证),请仔细检查您的用户是否确实具有管理员角色(已授权)。
- 我相信用户存储有一个方法,您可以重写该方法以查看为用户角色返回的内容。可能值得在那里设置一个断点,看看发生了什么。
关于c# - 授权(角色 ="Admin")不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831046/