У меня есть частный API, который я хочу, чтобы сторонние клиенты авторизировали без отправки конфиденциальной информации клиенту, например пароля.Обычный поток в этом случае:
- Мы даем клиенту секретный токен один раз
- После активации этого токена (например, вызов API с этим токеном) он может создатьучетной записи, указав пароль.
- Клиент авторизуется с этим паролем и получает секретный токен
- Этот секретный токен используется при каждом вызове API.
Проблема сэтот поток - когда мы посылаем ему одноразовый токен.Если кто-то первым использует его, он получает все данные, которые ему нужны.
Асимметричное шифрование Atm используется повсеместно, https (ssl) основан на нем.Интересно, есть ли такая вещь, как асимметричная аутентификация?Как я вижу, этот поток таков:
- Клиент и сервер генерируют 2 магических токена
client_private_token
, client_secret_token
, server_public_token
, server_secret_token
. - Мы спасаем противниковпубличные токены, например, в файлах настроек с обеих сторон.
- Сервер отвечает
server_public_token
- Клиент использует
client_private_token
для генерации некоторого session_token
и отправки его с каждым запросом, который требуетauthorization - Сервер использует свои
server_private_token
и user_public_token
, чтобы убедиться, что этот session_token
действителен.
Поток очень похож на ssl, но вместо шифрования данных мы просто генерируем магические строки, которые доказывают, что это мы.
Пожалуйста, не путайте это с JWT, как JWTэто просто полезная нагрузка с некоторой информацией и подписью сервера с ней.Для создания пользователя JWT сначала необходимо авторизоваться.
Кроме того, если есть такие вещи, было бы здорово иметь клиентов с такими современными языками, как java
, js
, python
и т. Д. * 1046.*