【问题标题】:How to apply role base authorization to Web API 2 application that use token base authentication?如何将基于角色的授权应用于使用基于令牌的身份验证的 Web API 2 应用程序?
【发布时间】:2018-08-24 04:45:06
【问题描述】:

我创建了一个使用基于令牌的身份验证系统的 Web API 2 应用程序。我使用这个tutorial 来实现对应用程序的身份验证。

然后我使用种子方法将角色添加到系统中。

        protected override void Seed(TBA.Models.AuthContext context)
        {
            if (!context.Roles.Any(r => r.Name == "SuperAdmin"))
            {
                var store = new RoleStore<IdentityRole>(context);
                var manager = new RoleManager<IdentityRole>(store);
                var role = new IdentityRole { Name = "SuperAdmin" };

                manager.Create(role);
            }
        }

然后我将用户添加到用户角色。

        public async Task<IdentityResult> RegisterUser(UserModel userModel)
        {
            IdentityUser user = new IdentityUser
            {
                UserName = userModel.UserName
            };

            var result =  await _userManager.CreateAsync(user, userModel.Password);
            await _userManager.AddToRoleAsync(user.Id, userModel.UserRole);
            return result;
        }

然后我尝试访问以下端点。

        [Authorize(Roles = "SuperAdmin")]
        [Route("GetBySuperAdmin")]
        public IHttpActionResult GetBySuperAdmin()
        {
            return Ok("Get By Super Admin");
        }

它给了我下面的错误信息。

"message": "Authorization has been denied for this request."

我应该改变什么来使它正确? 如何在访问 Web API 2 应用程序中的端点之前检查角色?

【问题讨论】:

  • 你确定 userModel.UserRole 是“SuperAdminę 你能在数据库中检查 UserRoles 表中的这个方法正在添加正确的角色吗?

标签: c# authentication asp.net-web-api authorization asp.net-identity


【解决方案1】:

将用户添加到角色后,您必须注销然后再次登录(生成新令牌)。

令牌有关于用户角色的信息,所以在改变角色之后你必须刷新令牌,以获得关于新角色的信息。

【讨论】:

  • 您能否检查是否在以下位置添加了正确的 ID:await _userManager.AddToRoleAsync(user.Id, userModel.UserRole); ?
  • @NoughT 并检查(使用 [AllowAnonymous] 属性)方法:User.IsInRole("SuperAdmin");和 User.Identity.Name 以确保您以正确的用户身份登录,并且身份可以看到用户角色。
  • 如你所说,我检查了 User.IsInRole("SuperAdmin")。你是对的。用户没有角色。我现在能做什么?
  • 我能够解决这个问题。 stackoverflow.com/questions/26589466/…
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2014-06-04
  • 2021-08-09
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多