При работе сервера в режиме активных учетных записей пользователей доступ к серверу ограничен и возможен только для пользователей. Для определения связи конкретного клиента и пользователя требуется прохождение идентификации, аутентификации.
По стилю 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 { // Запрос выполнен с ошибкой } } |