【发布时间】: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