api — аутентификация на основе токенов для переполнения стека

Я пытаюсь реализовать аутентификацию для API с частным & открытый ключ.

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

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

Будет ли хеширование каких-либо данных с помощью закрытого ключа достаточно безопасным или мне нужно сделать что-то особенное?

2

Решение

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

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

  3. Подписание запроса означает, что они просто хэшировать содержимое запроса с помощью алгоритма MAC, их секретный токен является ключом к хешу.

    • Какие части запроса на хеширование вы решаете; все, что включено в хеш, не подлежит сомнению третьими лицами, но вы должны воздерживаться от необходимости все хэшируется, поскольку заголовки HTTP могут быть добавлены или удалены на разных этапах запроса.
    • Чтобы избежать повторных атак, хешируйте дату запроса (и требуйте, чтобы дата была отправлена ​​вместе с запросом). Не принимать запросы после определенной даты истечения. В качестве альтернативы можно включить постоянно меняющийся токен, если это возможно.
    • Убедитесь, что хеш легко воспроизводим, например, Требуется сортировка данных для хеширования.
    • Вы должны включить URL в хеш; если вы это сделаете, не имеет значения, есть ли данные тела или нет. URL + дата / токен сверху вполне достаточны для формирования MAC.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]