Я использую REST-ful API (приложение) в Azure, используя App Services
. В частности, я использую Flask
для написания API. Я могу «защитить» от CSRF
с помощью CORS
следующим образом.
app = Flask(__name__)
CORS(app, resources={r'/api/v1/*': {'origins': 'https://my-angular-app.azurewebsites.net'}})
Обратите внимание, что мое намерение разрешить только XHR из домена https://my-angular-app.azurewebsites.net
, который является угловым приложением.
Однако я все еще могу использовать браузер (инкогнито или нет) или Postman для доступа к конечным точкам REST (например, https://my-rest-app.azurewebsites.net/api/v1/test
). Инструмент Почтальон не является браузером, и поэтому он должен вести себя так, как он наблюдал. Поскольку браузер - это не один домен, использующий XHR для доступа к API-интерфейсу REST, напрямую набрав в известной конечной точке, я все равно могу получить доступ к ресурсу.
Я попытался применить Аутентификацию / Авторизацию к приложению REST, используя Login with Azure Active Directory
. Этот подход «защищает» посторонних от прямого доступа к конечным точкам REST, однако он также не дает приложению Angular создавать XHR (я получаю 401 Unauthorized
).
Есть идеи, как защитить REST-приложение от "посторонних"? Я могу представить «исправления» в нескольких местах (например, в Angular, Flask, Azure и т. Д.), Но не уверен в разумном подходе.