Двусторонний секрет

Я работаю над проектом, в котором две стороны могут отправлять запросы API друг другу и аутентифицируются с использованием общего секрета. Другая сторона хочет, чтобы общий секрет был одинаковым в обоих направлениях, но я не понимаю, как это будет работать. Поэтому я либо ищу объяснение того, как сделать это безопасно, либо чтобы выяснить, не является ли это возможным, и что общие секреты должны отличаться в зависимости от направления запроса.

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

Есть ли способ сделать это, или общий секрет должен отличаться в зависимости от того, в каком направлении идет запрос?

1 ответ

Ваш анализ верен. Если обе стороны могут быть вызывающей стороной, то обе стороны должны знать секрет (а не просто иметь возможность проверить его).

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

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

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

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