Уникальный хеш как авторизация для конечной точки - PullRequest
1 голос
/ 13 марта 2019

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

Например, какая-то компания отправляет мне электронное письмо со ссылкой на мои счета:

www.financial.service.com/<SOME_HASHED_VALUE>

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

во-первых, это хороший подход?

во-вторых, как мне сделать этот хеш? sha512 по каким-то случайным данным?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

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

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

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

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

Таким образом, хороший токен выглядит следующим образом:

  • Выберите случайную длинную строку
  • Сохраните его в своей базе данных вместе с метаданными о том, что это значит, и отметкой времени
  • Когда пользователь обнаружит это, прочитайте данные из базы данных
  • ПослеЧерез некоторое время истекает токен, удаляя его из базы данных (необязательно, но желательно).

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

1 голос
/ 13 марта 2019

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

Обычно перед доступом к конечной точке есть авторизация (Вы прошли проверку подлинности до получения счетов).Я считаю это распространенным способом обмена ресурсами с внешними сторонами.Мы используем аналогичный подход с расширяемыми URL-адресами AWS S3.

во-первых, это хороший подход?

Это зависит от вашего варианта использования.Для совместного использования некоторых внутренних ресурсов с возможностью управления доступом (отзыв доступа, доступ на основе времени, одноразовый доступ, ..)

во-вторых, как мне сделать этот хэш?sha512 для некоторых случайных данных?

Пока SOME_HASHED_VALUE не будет угадано с незначительной вероятностью столкновения (соленый хеш, длинное случайное уникальное значение, ..), все должно быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...