2016-07-27 5 views
2

Я разрабатываю веб-приложение Spring Boot, которое предоставляет REST API. Большинство моих страниц (шаблоны тимелеафа) используют этот API для взаимодействия с внутренними компонентами (с использованием запросов AJAX). Я читал о различных подходах, таких как Basic Authentication, OAuth2 и т. Д. Эти подходы описывают аутентификацию пользователя, после чего пользователи могут обращаться к API. Но я не хочу, чтобы пользователи напрямую обменивались данными с моим API, используя браузер или клиент REST (т. Е. Расширение mailman postman, имеющее доступ к куки-файлам браузера, где обычно хранятся токены доступа).

У меня есть что-то вроде этого:
(1) Пользователь -> (2) MyOwnPages -> (3) RestAPI.

Есть ли способ предотвратить прямую связь 1-3?
Могу ли я как-то определить, что запрос был сделан с моих страниц (т. Е. Добавить к каждому запросу какой-то токен доступа)? Есть ли лучшие практики?

Спасибо!Как разрешить доступ к API только для собственных страниц?

+0

Это DMZ для (https://en.wikipedia.org/wiki/DMZ_(computing)). В вашем случае вам понадобятся два приложения с межсетевым экраном: один в DMZ, действующий как посредник, и один в вашем back-end. – vtosh

ответ

1

Нет, это невозможно. Вы могли бы добавить токены, чтобы сделать это сложнее, генерировать вещи в Javascript и т. Д. И т. Д., Но все, что было бы сделано, это сделать вашу страницу медленнее и с большей вероятностью сбой.

поток не является:

(1) User --> (2) MyOwnPages --> (3) RestAPI. 

Но скорее:

(1) User --> (2) Users Browser --> (3) RestAPI. 

И поскольку это браузер, который делает вызов вашим API, не существует разумный способ сказать различие между тем, cURL, Postman и т. д. Все, что вы можете сделать, пользователь может поставить, скажем, Wireshark, чтобы посмотреть, что именно отправляется, и от этого они могут делать все, что делает браузер.

Было бы более полезно понять, почему именно вы хотите это сделать, поскольку, вероятно, будет лучшее решение для любой конечной цели.

+0

Спасибо за ваш ответ! Моя цель мешает пользователям делать плохие вещи. Предположим, у меня есть следующая конечная точка: POST ../api/checks. Эта конечная точка используется интерфейсом для создания проверки после успешной оплаты. Я не хочу, чтобы пользователи вручную создавали проверки с использованием некоторого клиента для отдыха. Или я должен просто удалить такие конечные точки и инкапсулировать эту логику в других моих конечных точках (просто запретить создание проверок с использованием отдельной конечной точки, вместо этого автоматически создать проверку, то есть после успешного завершения платежа)? –

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

  • Нет связанных вопросов^_^