Межсервисная аутентификация и авторизация для доступа к методам API сервиса
Для доступа к своим методам API сервис бизнес-логики может требовать аутентификации и авторизации. Доступ к методам получают только те сервисы, которым предоставлено разрешение.
Если какому-либо методу сервиса A требуется авторизация, для обращения к этому методу сервис B должен аутентифицироваться в сервисе аутентификации Identity, получить токен доступа с областью разрешений доступа, в которую входит этот метод, и передать этот токен доступа в запросе к методу.
При разработке сервиса настройка аутентификации и авторизации между сервисами может потребоваться в следующих сценариях:
-
Авторизация доступа из разрабатываемого сервиса к другим сервисам.
Если разрабатываемый сервис обращается к метода м API других сервисов Платформы или сервисов приложений на базе Платформы, которые требуют межсервисной авторизации, необходимо настроить разрешение для такого доступа следующим образом:
- Клиенту разрабатываемого сервиса необходимо настроить доступ к области разрешения доступа API-ресурса того сервиса и метода, к которому этот сервис будет обращаться. Более подробная информация о настройке межсервисного взаимодействия содержится в разделе Межсервисное взаимодействие.
- В конфигурации сервиса необходимо указать идентификатор клиента и секретный ключ, с которыми сервис будет обращаться для получения токена доступа. Более подробная информация о параметрах конфигурации сервиса для межсервисной авторизации содержится в статье Запуск и отладка сервиса бизнес-логики .
При вызове метода сервиса, который требует межсерверной авторизации, необходимо получить и передать в запросе токен доступа. Для упрощения и автоматизации процесса получения токена доступа рекомендуется использовать библиотеку APIClient.
-
Авторизация доступа к методам API разрабатываемого сервиса.
По умолчанию межсервисная аутентификация и авторизация отключены. Для управления межсервисной аутентификацией используется свойство UseIdentityAuthentication класса StartParameters.
Следующий блок кода демонстрирует включение аутентификации с помощью свойства UseIdentityAuthentication.
StartParameters parameters = new StartParameters()
{
UseIdentityAuthentication = true
};Если межсервисная аутентификация и авторизация отключены, все методы API сервиса являются открытыми, и любой сервис может вызывать эти методы.
Если межсервисная аутентификация и авторизация включены, для каждого метода можно управлять авторизацией с помощью атрибута AuthorizeAttribute. Если авторизация требуется, с помощью атрибута ScopeRequirementAttribute можно указать область разрешений доступа, в которую включается этот метод и которая должна быть разрешена клиенту сервиса, обращающегося к этому методу.
Следующий блок кода демонстрирует использование атрибутов AuthorizeAttribute и ScopeRequirementAttribute для метода API с именем Greeting.
[Authorize]
[ScopeRequirement("servicename:entity:read")]
public HelloApiResult Greeting(string name)
{
...Атрибуты Authorize и/или ScopeRequirement можно применять к API-контроллеру. В таком случае эти атрибуты будут действовать на все методы API этого контроллера.
Следующий блок кода демонстрирует использование атрибутов Authorize и ScopeRequirement для API-контроллера.
[ApiController]
[Authorize]
public class MyFirstController : ControllerBase
{
...
[ScopeRequirement("servicename:entity:read")]
public HelloApiResult Greeting(string name)
{
...После включения межсервисной аутентификации и авторизации и указания методов API, требующих авторизации, необходимо в AdminTools выдать разрешение на доступ к этим методам тем сервисам, которые будут к ним обращаться в процессе работы приложения на базе Платформы.