我正在使用身份作为授权引擎编写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();
    }

最佳答案

需要检查的几件事:


登录页面设置为什么?我猜您未经身份验证或未经授权,MVC会将您发送到登录页面(可能已设置或默认为“ /”
如果您确定已登录(已验证),请再次检查您的用户确实具有管理员角色(已授权)。
我相信用户存储区中有一个可以重写的方法,以查看为用户角色返回的内容。可能值得在那里设置一个断点,看看发生了什么。

关于c# - Authorize(Roles =“Admin”)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34831046/

10-11 02:04