2013-10-05 2 views
3

У меня есть сборка api с node.js & express.js. На данный момент у меня есть незащищенный api, где каждый может GET, POST, PUT, DELETE записи.Как защитить мой REST-API?

У меня возникает следующая проблема. Мой отдых api не должен аутентифицировать пользователей, а приложений. Например. мое мобильное приложение должно иметь действительный токен для доступа к api. То же самое для веб-приложения.

Другой случай пользователя: мой api будет использоваться другим приложением, которое использует только один вызов для отдыха. Так что где-то в коде, который я не знаю в приложении, которое я не знаю (для большей части), будет вызван вызов для отдыха на моем api. Как я могу защитить такой доступ, поскольку не используются куки-файлы или сеансы?

Моя первая мысль была, создать пользователя и пароль. Каждый вызов api (через https) должен содержать учетные данные. Пароль может быть хэширован. Однако я прочитал это

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

из https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

Любые предложения по этому поводу? Я читал о oauth, но это связано с перенаправлением, и я не могу представить, как это будет работать с мобильным приложением, например. на андроиде.

ответ

2

Для этого вы можете использовать шифрование RSA, посмотрите на модуль ursa для узла.
Упрощенный процесс использования этого: ... Упорядочить клиентские приложения для шифрования секретного пароля с открытым ключом, а на стороне сервера расшифровать его с помощью частного, проверьте, является ли секрет тем, что вы ожидаете и действуете соответственно. .

Существует множество статей об использовании rsa в приложениях, я уверен, что вы сможете подобрать более определенное объяснение того, как работать с ним, если вы просто Google.

EDIT
Я просто наткнулся на this post, который имеет более подробную рецензию на этот вопрос.

2

Существует вопрос о том, как приложения сначала узнают имя пользователя/пароль, но если вы в порядке с общей идеей (что безопасно, если вы рассматриваете среду, в которой выполняется приложение чтобы быть в безопасности), тогда вам не нужно беспокоиться о имени пользователя/паролях в URL-адресах: просто используйте https вместо https.

https зашифрован, так что только 2 конечных точки (клиент и ваш API) могут читать даже URL-адрес. Любой маршрутизатор/прокси-сервер между ними видит только зашифрованные данные и не имеет средств доступа к вашему имени пользователя/паролям.

Вместо имени пользователя/пароля, кстати, просто используйте «токен доступа», который является длинной строкой (чтение: трудно угадать) и назначает один токен доступа для каждого приложения. В конце концов, вы держите список действительных токенов в БД и аутентифицируетесь против этого. Вы можете даже приложить даты истечения срока действия к этим строкам, если хотите.

Добавление токена доступа как часть https: // url - обычная практика.

Смежные вопросы