Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top