Не могу получить токен REST

Не могу получить токен для REST приложения на JMIX.
Создал проек REST версии 1.5.2 и согласно инструкции Начало работы с REST :: Документация Jmix хочу получить токен.
При запросе curl -X POST http://localhost:8080/oauth2/token получаю
{"timestamp":"2023-10-13T05:54:04.197+00:00","status":404,"error":"Not Found","path":"/oauth2/token"}

Если сделать запрос в браузере, получаю страницу авторизации, после ввода учетных данных вижу на странице

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Oct 13 08:44:17 MSK 2023
There was an unexpected error (type=Not Found, status=404).

Подскажите, как получить токен для приложения?

Да, инструкция, прямо скажем, не для новичков там. Рекомендую курить доки по REST сначала. Тогда станет понятно, что имел ввиду автор.

Вот пример печати отчета на JS, надеюсь, поможет прояснить ситуацию. Я давно с этим баловался, проверить сейчас нет возможности, но у меня работало. Главное - без авторизации вам токен не дадут. Да, этот код только для теста :wink:

// JMIX request report
function sendRest() {
    var reqRepJSON, authReq;
    // Авторизация 
    authReq = `grant_type=password&username=User&password=UserPassword`;
    authURL = 'http://host:8080/oauth/token?' + authReq;

    var resphttp = new XMLHttpRequest();
    resphttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
             console.log('REST auth request: readyState == 4 && this.status == 200 ' ); 
         }
    };
    
    resphttp.open("POST", authURL, false);
    resphttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    resphttp.setRequestHeader("Authorization", "Basic " +  window.btoa('RestClient:RestClientPassword') );
    
    resphttp.send(authReq);
    
    var authResp = JSON.parse(resphttp.responseText);
    var authToken =  authResp['access_token'];
    var authRefrToken = authResp['refresh_token'];
    console.log('REST resonse: ' + authToken); 
    
    //Запрос отчета
    repURL = 'http://host:8080/rest/reports/run/report-id';
    /* Пример запроса шаблона отчета с параметрами 
    reqRepJSON = `{template: 'Template_1',
                   parameters: [{name: 'author',value: '4b3a21b0-d6b7-4161-b0b6-55f118fbaac5'}]`;
    */
    reqRepJSON = `{template:CHART,
                   parameters: [{}]}`;
    
    fetch(repURL, {
      method: 'POST',
      body: reqRepJSON,
      headers: {
        'Content-Type': 'application/json',
        'Authorization': "bearer " + authToken
      },
    }).then(function(resp) {
      //  console.log('REST resonse: ' + resp); 
      return resp.blob();
    }).then(function(blob) {
      //  console.log('REST resonse blob: ' + blob);
      return saveBlob(blob, "CUSTOM_NAME.xls");
    });
}  

Вот эту часть инструкции выполнить надо еще обязательно:
The simplest way to register a client is to add standard Spring Authorization Server application properties

И еще вот эта настройка полезная:
jmix.cors.allowed-origins - прописать с каких хостов принимать заросы

А вот этот фрагмент обязателен? Подскажите, где нужно определить ?

The `user-management` role looks as follows:
@ResourceRole(name = "User management", code = UserManagementRole.CODE, scope = "API")
public interface UserManagementRole {

    String CODE = "user-management";

    @EntityAttributePolicy(entityClass = User.class, attributes = "*", action = EntityAttributePolicyAction.MODIFY)
    @EntityPolicy(entityClass = User.class, actions = EntityPolicyAction.ALL)
    void user();
}

Ох, давно это было, вспомнить бы.

Зависит, вероятно, это от настройки:

jmix.authserver.client.myclient.resource-roles = user-management, rest-minimal

Этот интерфейс, полагаю, нужно поместить в package ru.cfrenergo.jmix.security; - если я не прав, меня исправят.

1 симпатия

Возможно вы ошиблись ссылкой, но вы приложили ссылку на jmix версии 2.0. Там все немного по другому. Вот дока версии 1.5. Как я понимаю никаких UserManagementRole и тд там не нужно… Путь до токена там /oauth/token, а не /oauth2/token

Вот еще свойства REST
Там client и secret желательно переопределить.

1 симпатия

Благодарю, с этой инструкцией всё заработало. Удалось получить токен и подгрузить сущности.
Не подумал что версии несовместимы. Версию 2.0 не могу использовать, так как работаю в закрытой сети. Всем спасибо за ответы.