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

0

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

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

Было бы очень полезно, если кто-то может помочь в этом вопросе.

Мои мысли:

  1. Используйте сервер, чтобы сделать этот вызов API вместо его прямого вызова из приложения.
  2. Если сервер используется, проблема все равно будет существовать, поскольку вызов API, сделанный на сервер (в конечном итоге, который вызывает купленный API) также может быть прерван/доступен
  3. Как защитить вызов, сделанный сервером из приложения?

Технологии: Угловой JS, Узел JS, Ионная структура

  • 2
    возможный дубликат Best Practices для защиты REST API / веб-службы
  • 0
    Это довольно широкий вопрос, но ваша мысль № 1 верна: если вы делаете запросы от ненадежного клиента (такие интерфейсы внешнего интерфейса, как Angular, попадают в эту категорию), вы не можете делать запросы API, которые могут поставить под угрозу ваши учетные данные. Одним из решений является использование такой схемы, как OAuth на вашем сервере, чтобы предоставить клиенту токен доступа, и, конечно, все ваши частные запросы API только с вашего сервера.
Показать ещё 2 комментария
Теги:
security
server

1 ответ

0

Посмотрите на мой ответ на этот вопрос. Вместо использования имени пользователя и пароля ваш бэкэнд может предоставить дополнительный ресурс, который позволяет пользователю создавать токен с особой областью. В вашем приложении AngularJS вы можете использовать $ http или $ resource services (если включен модуль ngResource) и получить такой токен, который позволяет вам получить доступ только к частям вашего бэкэнд, которым действительно нужен ваш клиент.

Этот токен должен быть кэширован на стороне клиента и включен в заголовок каждого запроса.

В AngularJS сохранение токена в заголовке каждого запроса может выполняться в центральном месте, если вы используете конфигурационную функцию созданного вами модуля.

    app.config(function($httpProvider) { $httpProvider.defaults.xsrfCookieName = "TOKEN" }

AngularJS также предоставляет некоторые дополнительные функции безопасности. Например, вы можете использовать механизм защиты уязвимостей JSON. Если вы используете это, ваш бэкэнд должен был добавить символы)]} '(вы также можете переопределить символы по умолчанию) для каждого тела ответа JSON. Для других клиентов ответ JSON будет недопустимым Javascript-кодом, но в вашем приложении AngularJS символы будут автоматически удалены.

ОБНОВИТЬ

Лучшим способом реализации безопасности для вашего приложения будет чтение и понимание спецификации OAuth2.

В этом видео с минуты 11:36 до 17:26 описывается поток JavaScript.

Этот сайт обеспечивает некоторую реализацию стандарта для разных языков программирования.

Некоторые из аспектов этого стандарта заключаются в том, что все клиенты и перенаправленные URL-адреса должны быть зарегистрированы на дополнительном сервере аутентификации. Клиент идентифицируется уникальным идентификатором клиента.

Чтобы исключить, что какое-либо другое приложение перехватывает ваши запросы на извлечение токена, исходный токен должен быть активным только в течение небольшого промежутка времени, и каждый запрос api должен быть зашифрован SSL.

Для обеспечения единого входа также можно использовать токены обновления.

  • 0
    Спасибо за информацию. Я думаю, что даже с подходом, который вы предложили, будут проблемы. 1. Если бы этот подход использовался для веб-сайта, было бы целесообразно использовать токен и добавлять его для каждого запроса на аутентификацию. 2. Но в случае приложения, если этот подход используется, как мы можем гарантировать, что сам токен не будет перехвачен / получен доступ с помощью инструментов fiddler, и тот же самый токен используется для вызова API на сервере?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню