Как мы можем безопасно передавать ключи API и секретные токены по проводам пользователям?


Как мы можем запретить публичному API раскрывать главные ключи API / учетные данные и секретные токены?

В настоящее время я работаю над веб-приложением с некоторым открытым API, которое должно использовать ключи API и секретные маркеры, и искал способ создать очень безопасный API и посмотрел на некоторые из API крупнейших платформ, например SoundCloud.

I читать некоторые из них направляющие (например https://github.com/interagent/http-api-design ) о хороший (restful) дизайн API, но они не дают много информации о безопасности (ключи API и токены) и как они должны быть получены или созданы в публичных API.

Взгляните на https://a-v2.sndcdn.com/assets/sc-q9dV-e79e4b4a.js и поиск b45b1aa10f1ac2941910a7f0d10f8e28

Это главный API-ключ SoundCloud.

Некоторые из их URL-адресов выглядят так: this:
https://api.soundcloud.com/tracks/id/stream?client_id=client_id
https://api.soundcloud.com/tracks/id/stream?secret_token=secret_token&client_id=client_id
https://api.soundcloud.com/playlists/playlist_id/?secret_token=secret_token&client_id=client_id

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

Также все их личные и секретные виджеты раскройте секретные маркеры, также в запросах и в исходном коде. Они жестко закодированы в JavaScript-коде встроенных кодов.

Проблема существует уже несколько лет, и разработчики, похоже, не имеют опыта работы с безопасными API http://tunelab.com/2011/08/04/this-is-the-problem-with-soundcloud/

Как такие API, использующие JavaScript и JSON, могут предотвратить раскрытие этих маркеров и учетных данных?

Мои мысли об этом:

  • главный ключ API должен быть доступен только через / из soundcloud.com
  • должен быть какой-то домен / IP-блокировка / ограничение / / брандмауэр для всех ключей API
  • используйте OAUTH для всех ключей API, а не только для простого JSON API без аутентификации
  • динамически генерировать одноразовые (секретные) токены, не использовать один и тот же токен все время
  • динамически получать ключи API и токены с сервера SoundCloud вместо того, чтобы помещать их в коды встраивания и просьбы
  • используйте какую-нибудь стеганографию

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

Что вы думаете об этом критическая ситуация на soundcloud.com и как API JavaScript/JSON может быть намного более безопасным / защищенным правильным способом, не раскрывая никаких критических данных, таких как токены и ключи API? Например, использование AJAX и получение ключа API и токена после загрузки веб-сайта? Как Spotify и другие потоковые платформы защищают данные, которые они передают, и получают маркер и ключ API? Является ли хранение этой информации в URL-адресе или URL-адресе запроса безопасным вообще?

Как я могу безопасно отправить ключ API и секретный токен моим пользователям по проводу с помощью JavaScript, HTML, AJAX и PHP?

1 3

1 ответ:

Как безопасно передать ключи API и секретные маркеры по проводам пользователям?

Есть только один надежный способ: использовать HTTPs для вашего веб-сайта, чтобы пользователи могли получить ключ.

Тогда во время вызовов API HTTPS больше не требуется. Ваши пользователи могут использовать аутентификацию HMAC для хэширования ключа с общим секретом.