Общим вариантом использования WebAPI было бы отображать представления оболочки с помощью MVC-контроллеров, которые содержат javascript, который затем попадает в ваш API для доступа к данным.Как сделать действия WebAPI доступными только из моего приложения?
Но предположим, что у вас есть дорогостоящие операции API, и вы не хотите, чтобы люди дистанционно обращались к этим конечным точкам - вы хотите, чтобы ваши просмотры MVC, предоставленные вашим приложением, получили доступ к ним. Как вы могли защитить их?
В этом случае Request.IsLocal
не работает, потому что javascript вызывает его из браузера клиента на своей машине. Даже если это действительно сработало, вам нужно копать, чтобы получить реальный HttpContext
, чтобы найти это свойство - и это решение не будет работать в самообслуживании WebAPI.
Для конечных точек API, для которых требуется действительный IPrincipal
, вы можете защитить их с помощью атрибута [Authorize]
. Но как насчет конечных точек API, к которым вы хотите, чтобы ваше приложение было доступно для анонимных пользователей?
Я пробовал решение и опубликует его отдельно как ответ, потому что я не уверен, что это лучший (или даже хороший) подход.
Что делать, если я хочу, чтобы действие было доступно для анонимных пользователей? – danludwig
@ danludwig - ограничение доступа к дорогому ресурсу и предоставление неограниченного доступа к нему противоречивые требования. Вы должны решить. –
@ danludwig, тогда все выходит из-под контроля. Вы просто не можете этого сделать. По самому определению анонимного пользователя это означает, что он может вызывать любую конечную точку. И даже если вы вызываете веб-API только с ваших контроллеров, а не с javascript, анонимный пользователь все равно может косвенно вызвать контроллер. –