c# - 授权(角色 ="Admin")不起作用

标签 c# asp.net asp.net-mvc asp.net-identity

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

最佳答案

需要检查的几件事:

  1. 登录页面设置成什么?我猜你要么未经身份验证要么未经授权,MVC 将你发送到登录页面(可能设置或默认为“/”
  2. 如果您确定自己已登录(已通过身份验证),请仔细检查您的用户是否确实具有管理员角色(已授权)。
  3. 我相信用户存储有一个方法,您可以重写该方法以查看为用户角色返回的内容。可能值得在那里设置一个断点,看看发生了什么。

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

相关文章:

c# - 尝试使用时查询字符串会发生变化。

asp.net-mvc - Twitter Bootstrap 在输入之间使用 MVC 填充

c# - DataContractSerializer 未正确反序列化,缺少对象中方法的值

c# - 用于检索基础类型的空类

c# - MS平台下成为高级开发者需要学习的关键内容

asp.net - 在代理服务器后面设置 ASP.NET 应用程序的基本 url

javascript - 从ajax返回的数据对象中读取多个变量

asp.net - Azure Active Directory 分配的用户被忽略

c# - 数据库连接 Crystal 报表

c# - 如何为 ServiceBusReceivedMessage 的模拟设置正文