Web Api 2 & OWIN: авторизация пользователя по отношению к клиенту
Мы разрабатываем одностраничное приложение AngularJS с API REST ASP.NET Web Api 2. Мы используем промежуточное программное обеспечение OWIN и OAuth.
Наша система состоит из клиентов и пользователей:
- Клиентами являются организации / компании.
- Пользователи являются сотрудниками этих компаний. Пользователи принадлежат клиенту.
На данный момент мы используем следующую проверку в каждом контроллере:
[Route("api/clients/{clientId}/orders/{orderId}")]
public IHttpActionResult GetOrder(int clientId, int orderId)
{
if(UserComponent.GetUser(User.Identity.Name).ClientId != clientId)
{
return NotFound();
}
// Get order
return Ok(orderModel);
}
Смотрите последовательность ниже для более подробной информации (см. Диаграмму):
Получение токена для пользователя (также возвращает clientId).
Доступ к клиентскому ресурсу. Авторизация пользователя / клиента:
а. Пользователь авторизован для доступа к ресурсам клиента, или
б. Пользователь НЕ авторизован для доступа к клиентским ресурсам.
По сути, пользователь с клиента A не должен иметь доступ к ресурсу с клиента B.
Каков наилучший способ авторизации пользователей по ресурсам клиента?
Можем ли мы как-то отложить это на OWIN (возможно, с помощью утверждений)?
1 ответ
Утверждения - хороший вариант, так как вы можете отправить clientId с токеном, который отправляется обратно с каждым запросом, а затем вы можете проверить пользователя с помощью clientId по вашему хранилищу данных и проверить доступ пользователя к ресурсу, что можно сделать с помощью фильтра для пример.
Для авторизации пользовательского запроса может выполнить работу пользовательский атрибут авторизации, унаследованный от AuthorizeAttribute, вы украсите свое действие этим атрибутом, и оно будет выполнено перед вашим действием, и авторизуете вашего пользователя по ресурсу clientid + или вернет 401 (неавторизовать), если пользователь не имеет доступа.
Проверьте этот вопрос, чтобы получить представление о настраиваемом атрибуте авторизации ASP.NET MVC 4 Настраиваемый атрибут авторизации с кодами разрешений (без ролей)