我已经在2.1之前多次实现了基于角色的身份验证。按照步骤搭建新的2.1身份。

我扩展了IdentityUser模型以添加其他字段,登录工作正常,并且存在新字段。

startup.cs配置服务包含

         services.AddDefaultIdentity<AppUser>()
            .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();


我播下了角色

         IdentityRole role = new IdentityRole();
         role.Name = "Administrator";
         IdentityResult roleResult = roleManager.
         CreateAsync(role).Result;


然后创建一个用户并添加到角色中

        AppUser user = new AppUser();
        user.UserName = "Admin";
        user.Email = "admin@admin.com";
        user.Name = "Administrator";
        user.LockoutEnabled = false;
        user.EmailConfirmed = true;

        IdentityResult result = userManager.CreateAsync(user, "password").Result;

        if (result.Succeeded)
        {
            userManager.AddToRoleAsync(user, "Administrator").Wait();
        }


一切都成功了,数据库看起来还不错(AspNetUserRoles有链接)

但是,用角色装饰控制器将始终返回未经授权的状态

       [Authorize(Roles = "Administrator")]


但是,使用[Authorize](无角色)的简单登录检查将起作用。

如何解决此问题/什么是合并源代码的最简单方法,以便我可以逐步调试[Authorize]标记?

最佳答案

怎么修

但是,用角色装饰控制器将始终返回未经授权的状态

  [Authorize(Roles = "Administrator")]


这是2.1版本中的一个已知错误。参见issue此处。
我遵循了of using the old api suggested by HaoK and C-BERBER的建议,它现在可以正常工作了。
这是我的DbContext
public class ApplicationDbContext : IdentityDbContext<AppUser,IdentityRole,string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

使用旧式api配置身份:
services.AddIdentity<AppUser, IdentityRole>()
        .AddRoleManager<RoleManager<IdentityRole>>()
        .AddDefaultUI()
        .AddDefaultTokenProviders()
        .AddEntityFrameworkStores<ApplicationDbContext>();

最后,注销并重新登录,它现在将按预期工作。
如何调试源代码
我猜您不会调试AuthorizeAttribe本身,因为它是在编译时处理的。如果要调试AuthorizeFilter,可以按照以下步骤操作:
点击Tools-> Options-> Debugging

General中,在Visual Studio中取消选择Enable Just My Code
选择Enable Source Link Support
Symbols中,确保已选择Microsoft Symbol Servers。

现在,您可以调试源代码了。但是,由于筛选器的工作方式,您需要在MVC之前设置一个断点。我只是设置了一个虚拟的中间件,该中间件将在MVC路由器处理程序之前进行:
asp.net-core - .net核心身份2.1角色授权不起作用-LMLPHP
调试AuthorizeFiler的屏幕截图:
asp.net-core - .net核心身份2.1角色授权不起作用-LMLPHP

关于asp.net-core - .net核心身份2.1角色授权不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52526186/

10-12 12:37
查看更多