Аутентификация API RESTful

Я нашел немало вопросов по этой теме на SO, но не смог найти ответа на этот вопрос:

Следует ли проверять пользователей с их именем пользователя и паролем или с помощью ключа API? И каковы плюсы и минусы каждого метода.

Я спрашиваю об этом, потому что в моем API есть несколько методов, которые я хотел бы заблокировать и убедиться, что у пользователя есть доступ к некоторому документу или действию. Я немного неохотно проверяю, что пользователь отправил HTTP-заголовок AUTH с их именем пользователя и паролем, потому что он чувствует себя незащищенным и немного более хлопот для пользователя. С другой стороны, хотя, если я использую ключ API, какой смысл когда-либо создавать пароль? Поскольку они больше не будут использовать его для доступа к функциям API.

UPDATE

Если другим читателям это интересно, что я в конечном итоге использовал, я решил скопировать, как Amazon делает свою проверку (хорошее объяснение здесь: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf)

Ответ 1

вы можете использовать HTTP-аутентификацию через SSL и достаточно безопасную. Однако это затрудняет потребление API, так как требует, чтобы клиентская библиотека поддерживала SSL. SSL также может повлиять на производительность, если вы ожидаете слишком много вызовов одновременно.

Параметр API-ключа так же небезопасен, как и HTTP-аутентификация без SSL. Если вы не заинтересованы в безопасности, тогда API-ключ является самым простым для потребителей API.

Ответ 2

Один хороший метод - иметь метод входа в систему, используя имя пользователя и пароль (надеюсь, через TLS). Вы даете им истекающий токен, если они успешно выполнят аутентификацию; остальные вызовы API должны содержать этот токен для успеха.