Table of Contents

Аутентификация и авторизация

Продукты: МоиОтчеты Облако, МоиОтчеты Корпоративный Сервер, МоиОтчеты Публикатор

Процесс проверки подлинности пользовательских данных и выдача пользователю определённых прав в Сервисных решениях осуществляется по одному из двух доступных способов:

  1. Через JWT token.

    В этом случае аутентификацию нужно пройти лично, а токен будет действовать только 5 минут, за которые пользователь должен войти в своё приложение. При подключении к серверу браузер перенаправит на сервер аутентификации, после чего сгенерирует токен доступа. С точки зрения безопасности мы ограничиваем возможность получения JWT токена только лично пользователем.

    Если в течении 5 минут пользователь не зашёл в приложение, то аутентификацию необходимо пройти заново. Если пользователь зашёл в приложение, повторная аутентификация не требуется.

  2. Через API key.

    В этом случае процесс получения прав доступа осуществляется для серверных приложений. Для получения ключа доступа (API key) необходимо присутствие пользователя. Однако сам ключ может действовать продолжительное время, например год.

Получение первого API key

Для получения первого API key воспользуйтесь пользовательской панелью. Если по какой-то причине доступа к пользовательской панели нет, можно запросить ключ по описанию ниже.

  1. Откройте ссылку в браузере: <{host_name}/account/signin?r={host_name}/api/manage/v1/ApiKeys>.

    Переход по этой ссылке направит вас на автоматический процесс аутентификации браузера.

  2. Теперь, когда аутентификация пройдена, необходимо запросить новый ключ.

    Нажмите F12 или Ctrl+Shift+I, чтобы открыть панель разработчика. Сочетание клавиш могут отличаться от стандартных, в этом случае откройте панель разработчика через меню браузера.

  3. Скопируйте и выполните код в консоли JavaScript.

    Этот код сделает POST запрос на URL {host_name}/api/manage/v1/ApiKeys для создания нового ключа доступа до 2030 года.

    await fetch('{host_name}/api/manage/v1/ApiKeys', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json;charset=utf-8'
      },
      body: JSON.	stringify({
        "C": "Generated by js develop panel",
        "expired": "2030-01-01T07:41:23.399Z"
      })
    });
    
  4. Обновите страницу браузера и заберите результат.

    {
        "apiKeys": [
            {
                "value": "cc355oeu1z5d5wncayo33me6c1g5junqdqk4pkupid7t8ynjshey",
                "description": "Generated by js develop panel",
                "expired": "2030-01-01T07:41:23.399Z"
            }
        ],
        "count": 1
    }
    

Также ключ можно создать, открыв вкладку Api ключи.

Теперь вы можете использовать API key, в примере выше был использован cc355oeu1z5d5wncayo33me6c1g5junqdqk4pkupid7t8ynjshey.

Повторно получать новый API key через браузер нет необходимости.

Как использовать API key

Ключ следует передавать с каждым запросом в заголовке Authorization: Basic. В качестве имени пользователя следует использовать apikey, а в качестве пароля - значение ключа. Например:

Authorization: Basic Base64Encode(apikey:cc355oeu1z5d5wncayo33me6c1g5junqdqk4pkupid7t8ynjshey);

Где Base64Encode это функция преобразования строки в base64 при использовании кодировки UTF8.

Получение нового API key

Для получения нового ключа сделайте POST запрос на точку входа {host_name}/api/manage/v1/ApiKeys и передайте JSON в теле запроса по схеме ниже.

{
    "description": "string",
    "expired": "string($date-time)"
}

Пример запроса.

curl -X POST "{host_name}/api/manage/v1/ApiKeys" -H "accept: text/plain" -H "authorization: Basic YXBpa2V5OmNjMzU1b2V1MXo1ZDV3bmNheW8zM21lNmMxZzVqdW5xZHFrNHBrdXBpZDd0OHluanNoZXk=" -H "Content-Type: application/json-patch+json" -d "{ \"description\": \"Generated by js develop panel\", \"expired\": \"2030-01-01T07:41:23.399Z\"}"

Схема ответа.

{
  "value": "string",
  "description": "string",
  "expired": "2020-12-02T08:47:43.270Z"
}

Также получить новый ключ можно через пользовательскую панель.

Что дальше?