Как вы управляете ключами API

Я подумываю о создании API и рассматривал oauth для управления доступом к api, но то, что я делаю, больше похоже на систему b2b, позволяющую предприятиям получать доступ к данным для включения в их сайты. Вначале у меня не будет b2c.

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

Что-то там уже есть? Лучше всего просто создать хэш данных, отправленных пользователем, или что-то в этом роде?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 974
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я бы не стал просто использовать данные, отправленные пользователем, так как это может создать ситуацию, в которой ключи API можно угадать. Как правило, я беру некоторые данные, которые генерируются пользователем, а затем объединяю их с некоторыми данными, которые являются относительно уникальными (например, текущее системное время) и хешем, который использует SHA-1 или что-то еще, возможно, меняю представление, если я не хотите, чтобы это явно был хеш SHA-1, а затем используйте его в качестве ключа.

Ответ принят как подходящий

Вам нужно что-то, что однозначно идентифицирует пользователя ... Просто используйте UUID или, возможно, хеш UUID.

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

Взгляните практически на любой сайт / услугу Web 2.0. Все они имеют разную степень аутентификации и управления ключами API. Flickr, Twitter, Github и т. д.

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

pedalpete 01.01.2009 02:26

В зависимости от требований в мире веб-API предоставление вашим партнерам / разработчикам ключа API (идентификация) и требование, чтобы они подписывали вызовы (аутентификация), является довольно стандартным. Есть много способов указать сигнатуры. В наши дни довольно часто встречается; взять все параметры вызова, временную метку (+/- 5 минут покачивания), общий секрет и хэшировать его с помощью SHA-1 или MD5 (лучше SHA-1).

Вы можете реализовать это самостоятельно или найти партнера (их несколько), который сделает это за вас.

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

Однако существует крипто-стандартный способ выполнения этой операции «mung», называемый HMAC. Стоит посмотреть, если вы хотите что-то более стандартное / надежное / безопасное.

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

В качестве альтернативы вы можете использовать двусторонний SSL для транспортного уровня и просто доверять этому в приложении / API.

На самом деле зависит от того, насколько безопасно вы этого хотите ...:]

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