Как я могу использовать OAuth2 / OpenIdConnect для реализации «действия от имени» - PullRequest
0 голосов
/ 29 ноября 2018

Только я чувствую, что стандарты OAuth2 и OpenIdConnect довольно размыты в отношении функциональности "действовать от имени".

У меня есть следующий сценарий, я бы выделил заинтересованные стороны OAuth2 следующим образом:

  • Владелец ресурса: Пользователь с именем пользователя / паролем
  • Приложение: Сайт MVC .NET Core v2.1
  • Сервер ресурсов: WebAPI .NET Core v2.1
  • Сервер авторизации: Auth0
  • Пользовательский агент: Веб-браузер

Похоже на типичный поток кода авторизации, есть много примеров того, как это сделать для .NET Core v2.0.Самый хитрый момент - использование события OpenIdConnectEvents.OnAuthorizationCodeReceived для запроса токена доступа из кода.

Если я получу токен доступа, он выдаст мне все претензии, необходимые для определения авторизации веб-сайта, например, меню «Визуализация».опций, но только если им разрешено делать запросы и использовать атрибут Authorize для защиты конечных точек.

У меня вопрос: у меня есть API, который предоставляет некоторую услугу многим пользователям Сервисов, одним из которых является мой веб-сайт MVC.Я хочу сделать запрос с моего сайта MVC на этот API.Я могу запросить токен доступа, используя поток учетных данных клиента, передав учетные данные клиента, согласованные для моего веб-сайта MVC.

Если, однако, я бы хотел, чтобы этот токен доступа отражал разрешения моего пользователя (который вошел в мое приложение MVC).с именем пользователя / паролем) Я не вижу, как это сделать.У меня есть для них Идентификационный токен (так что я знаю, что они те, о ком говорят).У меня есть sub заявление, которое однозначно определяет, кто они есть в моем токене доступа, который я получил через поток кода авторизации.

Почему я не могу сделать учетные данные клиента "/ oauth / token" запрос к моему серверу авторизации, передающий этот sub и получение токена доступа к моему API с заявками для моего пользователя, а не для моего приложения.

Такое ощущение, что это своего рода предоставление учетных данных пароля владельца ресурса, ноЯ не хочу возвращаться к Пользователю и говорить: «Можете ли вы дать мне разрешение на разговор с моим собственным внутренним API, о котором вы ничего не знаете, от вашего имени».Я имею в виду, если это было бы для разговора с Google / Facebook и др., Конечно, но это не так.

Существует azp Уполномоченная сторона, может быть, это может быть использовано для хранения идентификатора моего сайта MVC?В то время как sub был пользователем в токене доступа?

На данный момент единственное решение, которое у меня есть, - это вернуть утверждения авторизации для API обратно в токен доступа в приложение MVC.Похоже, службе аутентификации нужно знать, какие API будут вызывать мое приложение MVC.

Кто-нибудь может высказать какие-либо предложения?Я был бы очень благодарен.

...