Контроль доступа
Защита API с использованием токенов доступа
Доступ к эндпойнтам REST API может быть защищен с помощью токенов доступа. Для получения токенов доступа можно использовать дополнение Authorization Server. См. его документацию для получения подробной информации.
Анонимный доступ
Можно открыть доступ к определенным частям REST API без аутентификации, используя функцию анонимного доступа в Jmix. В этом случае запрос к API выполняется от имени пользователя anonymous, который настроен по умолчанию в приложении Jmix.
Для каждого защищенного эндпойнта, к которому выполняется запрос без заголовка Authorization, аутентификация пользователя будет выполнена с использованием сессии пользователя anonymous.
См. раздел Аутентификация на основе токенов для получения информации о том, как настроить доступ к анонимным ресурсам. Самый простой способ — задать свойство приложения со списком URL-шаблонов для анонимного доступа, разделенных запятыми.
jmix.resource-server.anonymous-url-patterns = \
  /rest/services/productService/getProductInformation,\
  /rest/entities/Product/**После того как это свойство установлено, можно взаимодействовать с ProductService без отправки заголовка Authorization:
GET {{baseRestUrl}}
         /services
         /productService
         /getProductInformation
         ?productId=123
# Authorization: не заданЭтот запрос вернет успешный ответ от сервиса:
{
  "name": "Apple iPhone",
  "productId": "123",
  "price": 499.99
}Если вы хотите предоставить анонимный доступ к некоторым эндпойнтам сущностей, убедитесь, что у пользователя anonymous есть права на эти сущности. Это можно сделать, создав ресурсную роль и назначив ее пользователю anonymous в методе DatabaseUserRepository.initAnonymousUser(). Например:
@ResourceRole(name = "AnonymousRestRole", code = AnonymousRestRole.CODE, scope = "API")
public interface AnonymousRestRole {
    String CODE = "anonymous-rest-role";
    @EntityAttributePolicy(entityClass = Product.class,
        attributes = "*",
        action = EntityAttributePolicyAction.MODIFY)
    @EntityPolicy(entityClass = Product.class,
        actions = {EntityPolicyAction.READ, EntityPolicyAction.UPDATE})
    void product();
}@Primary
@Component("UserRepository")
public class DatabaseUserRepository extends AbstractDatabaseUserRepository<User> {
    // ...
    @Override
    protected void initAnonymousUser(User anonymousUser) {
        Collection<GrantedAuthority> authorities = getGrantedAuthoritiesBuilder()
                .addResourceRole(AnonymousRestRole.CODE)
                .build();
        anonymousUser.setAuthorities(authorities);
    }
}| Функция анонимного доступа не требует, чтобы у пользователя anonymousбыла рольrest-minimal. |