Большая часть философии REST заключается в использовании как можно большего количества стандартных функций протокола HTTP при разработке вашего API. Применяя эту философию к аутентификации, клиент и сервер будут использовать стандартные функции HTTP-аутентификации в API.
Экраны входа в систему отлично подходят для случаев использования пользователем: зайдите на экран входа в систему, введите имя пользователя и пароль, установите cookie, клиент предоставляет этот cookie во всех будущих запросах. Нельзя ожидать, что люди, использующие веб-браузеры, будут предоставлять идентификатор пользователя и пароль при каждом отдельном HTTP-запросе.
Но для REST API экран входа в систему и сеансовые куки не являются строго необходимыми, поскольку каждый запрос может включать учетные данные, не влияя на пользователя; и если клиент не сотрудничает в любое время, 401
может быть дан «несанкционированный» ответ. RFC 2617 описывает поддержку аутентификации в HTTP.
TLS (HTTPS) также может быть опцией, и он позволит аутентифицировать клиента на сервере (и наоборот) при каждом запросе путем проверки открытого ключа другой стороны. Кроме того, это обеспечивает канал для бонуса. Конечно, обмен парой ключей перед связью необходим для этого. (Обратите внимание, что речь идет именно об идентификации / аутентификации пользователя с помощью TLS. Защита канала с помощью TLS / Diffie-Hellman всегда хорошая идея, даже если вы не идентифицируете пользователя по его открытому ключу.)
Пример: предположим, что токен OAuth - это ваши полные учетные данные для входа. Если у клиента есть токен OAuth, он может быть предоставлен в качестве идентификатора пользователя в стандартной HTTP-аутентификации для каждого запроса. Сервер может проверить токен при первом использовании и кэшировать результат проверки с указанием времени жизни, которое обновляется при каждом запросе. Любой запрос, требующий аутентификации, возвращается, 401
если не предоставлен.