Я работаю с API, и я всегда задавался вопросом, почему вы должны использовать ключ и секрет?
Зачем вам нужны два типа аутентификации?
Я работаю с API, и я всегда задавался вопросом, почему вы должны использовать ключ и секрет?
Зачем вам нужны два типа аутентификации?
Когда сервер получает вызов API, ему нужно знать две вещи: кто выполняет вызов, и является ли вызов законным.
Если у вас только один элемент ( "ключ" ) и включил его при каждом вызове, он ответил бы на оба вопроса. На основе "ключа" сервер знает, кто вы, и потому что только вы знаете ключ, это доказывает, что вызов действительно исходит от вас. Но включение ключа при каждом вызове - это плохая практика безопасности: если кто-то может прочесть хотя бы одно из ваших сообщений в пути, ваш ключ скомпрометирован, и кто-то может притвориться вам. Поэтому, если вы не используете HTTPS, этот подход не работает.
Вместо этого вы можете включить цифровую подпись с каждым вызовом, подписанным с некоторым "секретным" номером. ( "Секретный" номер сам не отправляется). Если злоумышленнику удается прочитать ваше сообщение, он не сможет определить этот "секретный" номер из подписи. (Так работают цифровые подписи: они односторонние).
Но это не решает вопрос идентификации: В последнем случае, как сервер знает, кто звонит? Он может попытаться проверить подпись на "секрет" каждого отдельного пользователя, но, конечно, это будет очень трудоемким.
Итак, вот что мы делаем: отправляем как "ключ" (который идентифицирует пользователя), так и подпись, созданная с использованием "секретного" номера (что доказывает, что сообщение является законным). Сервер просматривает пользователя на основе ключа, а затем проверяет подпись, используя этот секретный номер пользователя.
Это немного похоже на то, когда вы пишете чек: у него есть номер учетной записи (чтобы идентифицировать вас) и вашу подпись (чтобы доказать, что вы - вы). Наличие только номера счета не докажет, что вы на самом деле написали чек. Наличие только подписи без номера счета заставило бы банк сравнить ваш чек со всеми его подписями для всех его учетных записей, что, очевидно, было бы неэффективным.