Структура мини-курса
-
Проектирование API
-
Взаимодействие с API в режиме реального времени
-
Реализация API
В нашем понимании API все начинает проясняться. Мы знаем, кто такие клиент и сервер, мы знаем, что они используют HTTP для общения друг с другом, и мы знаем, что они используют в определенные форматы данных, чтобы понимать друг друга. Однако знание того, как общаться, оставляет важный вопрос: как сервер узнает, что клиент — тот, за кого себя выдает? В этой главе мы рассмотрим два способа, которыми клиент может доказать свою идентичность серверу.
Структура главы 4
Что такое API-аутентификация?
Вероятно, вы уже регистрировали учетную запись на веб-сайте. В процессе этого веб-сайт запрашивает у вас некоторую личную информацию, в первую очередь имя пользователя и пароль. Эти две части информации становятся вашими идентификационными данными. Мы называем их вашими учетными данными (credentials). Когда вы снова зайдете на веб-сайт, вы сможете войти в систему, предоставив эти учетные данные.
Вход с использованием имени пользователя и пароля — один из примеров технического процесса, известного как аутентификация (authentication). Когда вы проходите аутентификацию на сервере, вы подтверждаете свою личность серверу, сообщая ему информацию, которую знаете только вы (по крайней мере, мы надеемся, что знаете ее только вы). Как только сервер узнает, кто вы, он может доверять вам и раскрывать личные данные в вашей учетной записи.
Существует несколько методов, которые API используют для аутентификации клиента. Они называются схемами аутентификации (authentication schemes). Давайте рассмотрим две из этих схем.

Basic authentication (Базовая аутентификация)
Приведенный выше пример входа в систему — это самая базовая форма аутентификации. Фактически, официальное название для нее — Базовая аутентификация («Базовая аутентификация» для друзей) (Basic Authentication («Basic Auth» to its friends).). Хотя название не получило никаких наград за креативность, эта схема является вполне приемлемым способом для сервера аутентифицировать клиента в API.
Базовая аутентификация требует только имя пользователя и пароль. Клиент берет эти два удостоверения, склеивает их вместе, чтобы сформировать одно значение 1, и передает его в запросе в заголовке HTTP, называемом Authorization.
Внимание. Процесс базовой аутентификации включает в себя объединение имени пользователя с двоеточием, за которым следует пароль, а затем прогон всей строки через алгоритм кодирования base64. Таким образом, «user» и «password» становятся «user:password«, а после кодирования получается «
dXNlcjpwYXNzd29yZAo=
«.

Когда сервер получает запрос, он просматривает заголовок Authorization и сравнивает его с сохраненными учетными данными. Если имя пользователя и пароль совпадают с одним из пользователей в списке сервера, сервер выполняет запрос клиента от имени этого пользователя. Если совпадений нет, сервер возвращает специальный код статуса (401) (special status code), чтобы сообщить клиенту, что аутентификация не удалась и запрос отклонен.
Хотя «Базовая аутентификация» (Basic Auth) является допустимой схемой аутентификации, тот факт, что она использует одно и то же имя пользователя и пароль для доступа к API и управления учетной записью, не является идеальным. Это как отель, который выдает гостю ключи от всего здания, а не от номера.
Аналогично с API, могут быть случаи, когда у клиента должны быть иные разрешения, чем у владельца учетной записи. Возьмем, к примеру, владельца бизнеса, который нанимает подрядчика для написания программы, использующей API от его имени. Доверие подрядчику учетных данных учетной записи подвергает владельца риску, поскольку недобросовестный подрядчик может изменить пароль, заблокировав владельца бизнеса от его собственной учетной записи. Очевидно, было бы неплохо иметь альтернативу.
API key authentication (Аутентификация по ключу API)
Аутентификация по ключу API — это метод, который преодолевает слабость использования общих учетных данных, требуя доступа к API с помощью уникального ключа. В этой схеме ключ обычно представляет собой длинную серию букв и цифр, отличную от пароля владельца учетной записи. Владелец дает ключ клиенту, очень похоже на то, как отель дает гостю ключ от одного номера.
Когда клиент проходит аутентификацию с помощью ключа API, сервер знает, что клиенту нужно разрешить доступ к данным, но теперь у него есть возможность ограничить административные функции, такие как изменение паролей или удаление учетных записей. Иногда ключи используются просто для того, чтобы пользователю не приходилось выдавать свой пароль. Гибкость аутентификации с помощью ключа API позволяет ограничить контроль, а также защитить пароли пользователей.
Итак, куда же делся ключ API? В отличие от «Базовой аутентификации» (Basic Auth), которая является устоявшимся стандартом со строгими правилами, ключи API были задуманы несколькими компаниями в ранние дни Интернета. В результате аутентификация с помощью ключа API немного похожа на Дикий Запад — у каждого свой способ сделать это.
Однако со временем появилось несколько распространенных подходов.
Один из них заключается в том, чтобы клиент поместил ключ в заголовок Authorization вместо имени пользователя и пароля.
Другой — добавить ключ в URL (http://example.com?api_key=my_secret_key).
Менее распространенным является захоронение ключа где-то в теле запроса рядом с данными. Куда бы ни направлялся ключ (предполагая, что он находится там, где сервер ожидает его увидеть на основе документации API), эффект один и тот же — он позволяет серверу аутентифицировать клиента.
Краткое изложение главы 4
В этой главе мы узнали, как клиент может доказать свою идентичность серверу, процесс, известный как аутентификация. Мы рассмотрели две техники или схемы, которые API используют для аутентификации.
Ключевые термины, которые мы изучили:
Аутентификация (Authentication): процесс подтверждения клиентом своей личности серверу
Авторизация (Authorization): процесс подтверждения клиентом своих прав доступа
Учетные данные (Credentials): секретные фрагменты информации, используемые для подтверждения личности клиента (имя пользователя, пароль…)
Базовая аутентификация (Basic Auth): схема, которая использует закодированное имя пользователя и пароль для учетных данных
Аутентификация по ключу API (API key auth): схема, которая использует уникальный ключ для учетных данных
Заголовок авторизации (Authorization header): заголовок HTTP, используемый для хранения учетных данных
Следующая
В следующей главе мы продолжим обсуждение аутентификации, рассмотрев третий метод, который быстро становится стандартом Интернета.
Предыдущая глава: |
Следующая глава: |
ссылка на оригинал статьи https://habr.com/ru/articles/891398/
Добавить комментарий