Содержание:


REST API: Авторизация

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

     По стилю REST необходимо осуществлять аутентификацию при каждом запросе серверу предоставляя либо постоянный токен, соответствующий конкретному пользователю, либо логин и пароль в формате base64 в заголовке Authorization HTTP
запроса.

     Web сервер не полностью следует стилю REST. Одной из причин является использование cookie для передачи назначенного ранее при запросе аутентификации токена для выполнения запросов получения сущностей и других.

     При аутентификации производится проверка предоставленных клиентом учетных данных: имени пользователя и пароля при осуществлении запроса. В результате исполнения запроса клиенту назначается токен — последовательность символов, и возвращается в виде новых cookie. В последующих запросах cookie должны передавать серверу.

     Сервер при выполнении запроса всегда проверяет токен и соответствует ли он какому-то пользователю системы. Этот процесс является идентификацией. Если же пользователь отсутствует, то клиенту возвращается код 401 – Unauthorized (не авторизован), а если есть такой пользователь, то запрос выполняется далее.

     Ниже представлен пример аутентификации с запросом паспортов на web сервере. Обращаем внимание на то, что необходимо использовать параметр credentials для использования cookie.

 async function requestSmth() {
  let options = {
    username: 'admin',
    password: 'admin'
  };
  let response = await fetch('/api/signIn', {
    credentials: 'include',
    method: 'POST',
    body: JSON.stringify(options),
    headers: {
      'Content-Type': 'application/json'
    }
  });
  if (response.ok) {
    // Аутентификация пройдена
    // К примеру сделаем запрос на получение паспортов в системы
    response = await fetch('/api/passport/all', {
      credentials: 'include'
    });
    let passports = await response.json();
  } else {
    // Запрос выполнен с ошибкой
  }
}