В потоке пароля владельца ресурса может ли пользователь обрабатывать область действия?

Я использую Identity Server 4 для аутентификации пользователя с одной страницы приложения. Для нужд проекта я должен использовать поток паролей владельца ресурса.
Identity Server и мое приложение прекрасно работают вместе. Identity Server предоставляет токен доступа, и я могу использовать этот токен для доступа к некоторым принадлежащим нам API. Тем не менее, я спрашивал себя о токене доступа, пользователях и socpes. На данный момент моя установка такая.

  • У меня есть API, для которого требуется область действия API-1.
  • У меня есть клиент (мой SPA), в котором я определил область действия API-1.
  • И у меня есть пользователь.

В этой конфигурации именно клиент имеет право доступа к API, а не пользователь. И мне интересно, как дать эту область пользователю, а не клиенту.

Глупо, мне интересно, может ли пользователь владеть областью, а не клиентом. Может быть, я что-то пропустил или неправильно понял, так что, пожалуйста, научите меня.


person Waldo    schedule 24.02.2017    source источник


Ответы (1)


В потоке пароля владельца ресурса ваш клиент всегда должен иметь разрешение на область, которой защищен ваш ресурс. Однако это не означает, что вы не можете защитить свой API на основе претензий, связанных с пользователем.

Если в вашем API, например, вам нужны разные разрешения в зависимости от пользователя, обращающегося к API, попробуйте использовать информацию об утверждениях как часть вашей авторизации. В примере потока пароля владельца ресурса на http://docs.identityserver.io/en/release/quickstarts/2_resource_owner_passwords.html вы увидите, что это упоминается внизу страницы, см. два абзаца следующим образом:

Когда вы отправляете токен в конечную точку Identity API, вы заметите одно небольшое, но важное отличие от предоставления учетных данных клиента. Маркер доступа теперь будет содержать вложенное утверждение, которое однозначно идентифицирует пользователя. Это «под» утверждение можно увидеть, изучив переменную содержимого после вызова API, а также оно будет отображаться на экране консольным приложением.

Наличие (или отсутствие) вложенного утверждения позволяет API различать вызовы от имени клиентов и вызовы от имени пользователей.

person Chris Lawrence    schedule 24.02.2017
comment
Итак, я могу добавить своему пользователю некоторую область действия, которая представляет собой API. Спасибо за ответ ! - person Waldo; 24.02.2017
comment
Вы не добавляете области для пользователей, вы добавляете утверждения для пользователей, область остается у вашего клиента. Затем в своем API вы можете получить доступ к этим утверждениям пользователей и даже использовать их как часть авторизации, если хотите, это можно сделать, добавив политику в атрибут Authorize на вашем контроллере или в действии. Дополнительную информацию, включая примеры, об авторизации на основе утверждений в ядре asp.net можно увидеть по адресу docs.microsoft.com/en-us/aspnet/core/security/authorization/ - person Chris Lawrence; 24.02.2017