У меня есть небольшое приложение веб-API, которое использует Identity для управления пользователями с использованием маркеров Owin. Основы этой реализации прекрасно работают: я могу зарегистрировать пользователя, войти в систему пользователя и получить доступ к конечным точкам веб-API, отмеченным [Authorize]
.Роли авторизации авторизованных идентификаторов с веб-интерфейсом API
Следующий шаг - ограничить конечные точки веб-API с помощью ролей. Например, контроллер, к которому могут обращаться только пользователи в роли администратора. Я создал пользователя Admin, как показано ниже, и добавлю их в роль администратора. Однако, когда я обновляю существующие контроллеры от [Authorize]
до [Authorize(Roles = "Admin")]
и пытаюсь получить к нему доступ с помощью учетной записи Adim, я получаю 401 Unauthorized
.
//Seed on Startup
public static void Seed()
{
var user = await userManager.FindAsync("Admin", "123456");
if (user == null)
{
IdentityUser user = new IdentityUser { UserName = "Admin" };
var createResult = await userManager.CreateAsync(user, "123456");
if (!roleManager.RoleExists("Admin"))
var createRoleResult = roleManager.Create(new IdentityRole("Admin"));
user = await userManager.FindAsync("Admin", "123456");
var addRoleResult = await userManager.AddToRoleAsync(user.Id, "Admin");
}
}
//Works
[Authorize]
public class TestController : ApiController
{
// GET api/<controller>
public bool Get()
{
return true;
}
}
//Doesn't work
[Authorize(Roles = "Admin")]
public class TestController : ApiController
{
// GET api/<controller>
public bool Get()
{
return true;
}
}
Q: Что такое правильный способ настроить и использовать роли?
Вы проверили таблицу ролей для вновь созданной роли «Admin» и таблицы UserRole для правильного пользователя с ролью администратора? Используете ли вы среду идентификации 2.0 или новее? – DSR