У меня есть Restful API веб-сервисов, который используется разными третьими сторонами. Часть этого API ограничена (для этого вам нужно имя пользователя/пароль). Мне было интересно, какой был бы лучший способ аутентификации?
Я использую https, поэтому связь зашифрована. У меня есть две идеи:
- Прежде чем пользователь начнет использовать (ограниченный) сервис, он отправит имя пользователя/пароль с помощью POST (поскольку https используется, учетные данные зашифровываются). После успешного входа в систему сервер отправляет обратно случайное одноразовое значение (nonce), которое соответствует этому имени пользователя. Когда выполняется следующий запрос, вдоль имени пользователя клиент отправляет ранее возвращенный nonce. Серверы сопоставляют имя пользователя и nonce и возвращают новые nonce вдоль запрашиваемых сторон. Каждый новый запрос использует новый nonce. В принципе, это облегченная версия аутентификации доступа к дайджесту.
- Поскольку этот API используется от стороннего пользователя, имя пользователя/пароль может использоваться для каждого (ограниченного) запроса. Поскольку https используется, они будут зашифрованы. Падение этого подхода заключается в том, что это не будет удовлетворительным (POST будет использоваться всегда).
Я гораздо ближе выбираю первый подход (это легко реагировать на требования, относительно легко реализовать, XML, json или html можно использовать, не меняя ничего), но я хотел посмотреть, каково ваше мнение? Что вы рекомендуете: первый, второй или третий подход?
Btw, я использую Python на стороне сервера.