Перейти к основному содержимому

Межсервисная аутентификация и авторизация для доступа к методам 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 выдать разрешение на доступ к этим методам тем сервисам, которые будут к ним обращаться в процессе работы приложения на базе Платформы.