2012-05-10 5 views
2

У меня есть приложение ASP.NET MVC 3 с самообслуживаемым API ServiceStack, который предоставляет данные. После того, как я добавил путь местоположения API в Web.Config АНИ является вызываемым моим кодом и работает хорошо:ASP.NET MVC 3 Ограничить доступ к API

<location path="api"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

У меня есть проблема в том, что, когда приложение работает в API доступен через браузер - я могу просто введите http: \ localhost: xxxx \ api в браузер. Что было бы хорошим подходом к ограничению доступа к моему самоорганизованному API, чтобы я мог продолжать называть его в приложении MVC 3, но не позволяя пользователям получать доступ к API через браузер?

Обратите внимание, что в какой-то момент в будущем я захочу открыть некоторые области API, чтобы сделать их общедоступными.

ответ

2

Примечание: поддержка Authorization and Authentication, встроенная в ServiceStack, является независимой и отделяемой от аутентификации ASP.NET.

Вы можете обобщенно ограничить доступ ко всем услугам по наследованию от базового класса, который содержит один или более из:

  • [Authenticate] - разрешают доступ к идентифицированным пользователям
  • [RequiredRole] - только разрешить доступ пользователям в определенных ролях
  • [RequiredPermission] - разрешить доступ только к пользователям с указанными разрешениями

Примечание: Эти атрибуты также работают в ваших MVC-контроллерах, которые наследуют от ServiceStackController или контроллеров, отмеченных атрибутом [ExecuteServiceStackFilters].

Вы можете проверить демонстрацию MVC + ServiceStack, которая использует эти атрибуты в примере проекта Social Bootstrap Api.

Другой способ, которым вы можете ограничить общий доступ, - это зарегистрировать глобальный Request filter, которые выполняются по каждому запросу.

2

Одним из возможных вариантов является использование конкретного пользователя для доступа к API:

<location path="api"> 
    <system.web> 
     <authorization> 
      <allow users="api_user" /> 
     </authorization> 
    </system.web> 
</location> 

Затем настройте ваш API, чтобы быть доступным только api_user. Таким образом, любой другой аутентифицированный пользователь в браузере не сможет получить доступ к этому API. В приложении ASP.NET MVC 3 вы можете создать билет проверки подлинности с данным пользователем перед отправкой HTTP-запроса в API.

Также обратите внимание, что использование тега <location> в web.config для управления авторизацией в приложении ASP.NET MVC - очень плохая идея. Причина этого в том, что вы полагаетесь на некоторый url (api). Но ASP.NET MVC работает с маршрутами. Таким образом, вы должны использовать [Authorize] или специальный атрибут авторизации для украшения соответствующих контроллеров/действий, которые вы хотите защитить. Таким образом, ваша авторизация больше не зависит от вашей конфигурации маршрутизации.

Другая возможность заключается в использовании специального атрибута authoriza и implement an access token.

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