Разрешение запроса API только от SPA - PullRequest
2 голосов
/ 28 марта 2020

Я создаю веб-страницу с ASP. NET Core и angular 8 (размещены вместе). Я хочу разрешать запросы к моему API только из SPA.

На данный момент я думаю создать какое-то правило хэширования, которое известно только приложениям внешнего и внутреннего интерфейса. Для каждого запроса я вычисляю га sh и помещаю его в заголовок запроса. После получения запроса я снова вычислю га sh и сравню его с ха sh, указанным в шапке. Если они совпадают, тогда все в порядке.

Меня интересует, насколько это безопасно и есть ли способ взломать его.

Я новичок в angular, и меня также интересует, есть ли возможность (в производственном режиме) написать какой-то код js (пользователем приложения), который будет вызывать мой 'send' Метод запроса (т.е. не нажатием кнопки).

РЕДАКТИРОВАТЬ:

Я использую стандартную аутентификацию на основе токенов jwt в моем приложении, поэтому нет возможности доступа к ресурсам API, если пользователь не аутентифицирован , Я хочу добиться того, чтобы аутентифицированный пользователь приложения (разработчик) не мог делать запросы из других источников, таких как почтальон, C# код, например, консоль браузера.

У меня есть некоторые «ценные» данные, и я хочу, чтобы они были видны только моей веб-странице. Я хочу устранить факты воровства ..

Ответы [ 2 ]

3 голосов
/ 28 марта 2020

Реального безопасного решения для вашего требования не существует. Причины этого:

  • JavaScript код всегда читабелен. Каждый пользователь может прочитать и отладить ваш SPA и любые логи c, которые вы добавляете для защиты ваших запросов, разработчики могут увидеть и заново внедрить в свое собственное приложение. Вы можете попытаться сделать их жизнь сложнее ... и все.

  • При этом вы не можете включать секреты в свой код. Секреты, загруженные во время выполнения, будут видны, если разработчики отладят ваш код.

  • Ваш сервер не может увидеть, что такое клиентское приложение, потому что нативные приложения будут использовать любые заголовки http и будут выглядеть точно так же, как браузер.

Общее «решение» для этого состоит в том, чтобы ограничить и заблокировать количество запросов от IP, предполагая, что объем данных, обычно запрашиваемый при интерактивном использовании, мал.


Простой способ усложнить жизнь - переключиться на веб-сокеты (signalR) вместо http-запросов - при условии, что стандартные сканеры ограничены http.

0 голосов
/ 28 марта 2020

Предположим, что Angular SPA будет использовать ссылку: http://localhost: 4200

В файле Startup.cs вашего Web-проекта Api (метод настройки void) добавьте app.UseCors

        app.UseCors(
            options => options.WithOrigins("http://localhost:4200").AllowAnyMethod().AllowAnyHeader()
            ); ;

Метод

public void Configure(IApplicationBuilder app, IWebHostEnvironment env
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...