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);
}

Смотрите последовательность ниже для более подробной информации (см. Диаграмму):

  1. Получение токена для пользователя (также возвращает clientId).

  2. Доступ к клиентскому ресурсу. Авторизация пользователя / клиента:

    а. Пользователь авторизован для доступа к ресурсам клиента, или

    б. Пользователь НЕ авторизован для доступа к клиентским ресурсам.

Поток последовательности OAuth

По сути, пользователь с клиента A не должен иметь доступ к ресурсу с клиента B.

Каков наилучший способ авторизации пользователей по ресурсам клиента?

Можем ли мы как-то отложить это на OWIN (возможно, с помощью утверждений)?

1 ответ

Решение

Утверждения - хороший вариант, так как вы можете отправить clientId с токеном, который отправляется обратно с каждым запросом, а затем вы можете проверить пользователя с помощью clientId по вашему хранилищу данных и проверить доступ пользователя к ресурсу, что можно сделать с помощью фильтра для пример.

Для авторизации пользовательского запроса может выполнить работу пользовательский атрибут авторизации, унаследованный от AuthorizeAttribute, вы украсите свое действие этим атрибутом, и оно будет выполнено перед вашим действием, и авторизуете вашего пользователя по ресурсу clientid + или вернет 401 (неавторизовать), если пользователь не имеет доступа.

Проверьте этот вопрос, чтобы получить представление о настраиваемом атрибуте авторизации ASP.NET MVC 4 Настраиваемый атрибут авторизации с кодами разрешений (без ролей)

Другие вопросы по тегам