Как сгенерировать ограниченный по времени ключ или пароль без сохранения данных

Вот мой сценарий...

  1. Пользовательское клиентское приложение делает запрос к веб-сервису на доступ.

  2. Webservice отвечает "ключом", который действителен только в течение X секунд / минут (время может быть переменным или, по крайней мере, определяемым в моем веб-сервисе)

  3. Клиентское приложение пользователя использует ключ немедленно, чтобы сделать дальнейший запрос.

  4. Веб-служба проверяет, что ключ все еще действителен, и, если он обрабатывает запрос, в противном случае отвечает соответствующим образом.

Мне нужно сделать это без фактического сохранения ключа в базе данных, поэтому я предполагаю, что хэш, используемый для генерации ключа (с солью), должен как-то основываться на времени.

Я думаю, что я действительно спрашиваю, что является лучшим подходом для этого.

Язык: VB.Net

3 ответа

Решение

В итоге мы пошли со следующим....

Соль известна приложению Пользователь username Текущая дата / время + 5 секунд

объедините вышеперечисленное в определенном порядке в виде строки и MD5 хеша.

У нас есть специальный URL-адрес, по которому они могут использовать хеш в качестве параметра строки запроса.

Мы сравниваем хэш с 5 хэшами, сгенерированными во время запроса (один для текущей секунды и один для каждой из предыдущих 4 секунд). Если хэш параметра QS совпадает с одним из этих 5 сгенерированных хэшей, мы принимаем запрос и выполняем соответствующие действия.

В нашем API есть метод, который возвращает URL с уже примененным хешем. Клиенты API могут затем отправить свой запрос по указанному URL-адресу немедленно. Любые запросы, сделанные более чем через 5 секунд после получения URL-адреса, отклоняются.

Таким образом, у нас есть ключ, который действителен только в течение 5 секунд с момента его создания.

Это позволяет нам предоставлять пользователям возможность "автоматического входа" на свой сайт из API-клиента. Клиент запрашивает URL-адрес для входа в систему (который поставляется вместе с хэшем), а затем сразу же направляет веб-браузер пользователя на этот URL-адрес. URL обрабатывает запрос, проверяет хеш и, если он действителен, устанавливает cookie для входа и перенаправляет их на страницу администратора.

Простой, эффективный и, так как все наши запросы к API по SSL, безопасный.

Хранить ключ где-то не получится, природа хэша в том, что вы не можете получить информацию, из которой он был сгенерирован. Если вы хотите получить информацию обратно, используйте алгоритм шифрования.

Для этого мы использовали сторонний инструмент. Это называется Crypkey. Очень настраиваемый, но не дешевый.

Другие вопросы по тегам