2017-02-18 2 views
1

В настоящее время я создаю свой первый API. Я знаю, как настроить все конечные точки и делать то, что я хочу с ними. Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы кто-либо мог посетить site.com/api/example и получить от него данные. Какие методы/концепции доступны, чтобы убедиться, что только мое приложение имеет доступ к API. Я собираюсь получить POST и ПОЛУЧИТЬ эти конечные точки, используя как Javascript, так и PHP.Как мне сделать так, чтобы мой API был доступен только через мое приложение (Javascript и PHP)?

Любая помощь вообще на этом была бы весьма признательна, спасибо!

+0

Насколько я знаю, вы не можете сделать это на 100% безопасным, так как для этого вам нужен javascript (который выполняется в браузере пользователей и его можно манипулировать). Однако вы можете сделать это сложнее для людей, добавив некоторые CSRF-проверки. –

+0

@MagnusEriksson Это вызывает другой вопрос. Если API только возвращает данные, которые уже все время выводят на сайт, действительно ли это имеет значение, если оно безопасно? Теперь конечным точкам, которые мне нужны POST, потребуется что-то, чтобы подтвердить его подлинный запрос с сайта. Я планирую опубликовать комментарии и комментарии AJAX с учетной записью пользователя или IP-адресом. –

+0

Для публикации данных вы должны определенно использовать некоторую защиту ['CSRF'] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF) _Prevention_Cheat_Sheet). Что касается блокировки API вниз, все зависит от данных. Некоторые сайты хотят, чтобы люди обращались к любым данным через свой сайт, а не просто извлекали данные напрямую. Если это не проблема для вас, то нет, вам, вероятно, не нужно пытаться ее заблокировать. –

ответ

1

Вы в основном два решения: аутентификация

  1. Применения: ваша заявка будет нести ответственность за обработку аутентификации вашего пользователя и предоставить на сервере доказательство успешной аутентификации. Реализация будет различаться в зависимости от того, выполняется ли проверка подлинности непосредственно на сервере (путем проверки учетных данных) или косвенно (тогда он предоставит серверу токен аутентификации). Некоторые ключевые слова: oAuth, JWT, LDAP

  2. Client-side TLS certificate: сервер запросит у вашего приложения предоставить сертификат TLS для настройки туннеля TLS.

-1

Вот два варианта:

  1. Не позволяйте никому знать, что вы используете API. Вызывайте API только со стороны сервера, позволяя API только слушать запросы с IP-адреса вашего сервера. Прямой Javascript API вызывает ваш сервер, который перенаправляет их в API и отправляет (возможно даже фильтрованный) ответный объект API на клиентскую сторону.

  2. Проверка подлинности API в сочетании с ACL (список контроля доступа). Используйте oAuth или JWT для создания токена доступа, который вы отправляете с каждым запросом. Через ACL вы можете изменять вывод, основываясь на том, какой пользователь выполняет запрос. На запросы Javascript отвечают ограниченные общедоступные данные, в то время как ответы на запросы на стороне сервера могут содержать данные, которые могут потребоваться для обработки, но не хотят публично публиковать их.

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

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