2012-05-10 5 views
2

데이터를 제공하는 자체 호스팅 ServiceStack API가있는 ASP.NET MVC 3 응용 프로그램이 있습니다. 내가있는 Web.Config의 API의 위치 경로를 추가 한 후 API 내 코드에 의해 호출하고 잘 작동 :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

참고 : ServiceStack에 내장 된 Authorization and Authentication 지원은 독립적이며 ASP.NET의 인증과 분리되어 있습니다.

당신은 일반적으로 하나 이상 포함하는 기본 클래스에서 상속하여 모든 서비스에 대한 액세스를 제한 할 수

  • [도 인증] - 인증 된 사용자 만 허용 액세스
  • [RequiredRole] - 만 이러한 속성을 : 만 지정된 권한

주를 가진 사용자에 대한 액세스를 허용 -

  • 가 [RequiredPermission] 지정된 역할의 사용자에 대한 액세스를 허용 또한 ServiceStackController에서 상속 한 MVC 컨트롤러 또는 [ExecuteServiceStackFilters] 속성으로 표시된 컨트롤러에서 작동합니다.

    Social Bootstrap Api 예제 프로젝트에서 이러한 특성을 사용하는 MVC + ServiceStack 데모를 조사 할 수 있습니다.

    액세스를 일반적으로 제한 할 수있는 또 다른 방법은 모든 요청에 ​​대해 실행되는 글로벌 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에 보내기 전에 지정된 사용자와 인증 티켓을 만들 수 있습니다.

    ASP.NET MVC 애플리케이션에서 권한을 제어하기 위해 web.config의 <location> 태그를 사용하는 것은 매우 나쁜 생각입니다. 그 이유는 당신이 어떤 URL (api)에 의존하고 있기 때문입니다. 그러나 ASP.NET MVC는 경로를 사용합니다. 따라서 [Authorize] 또는 사용자 정의 권한 속성을 사용하여 보호하려는 해당 컨트롤러/조치를 꾸며야합니다. 이렇게하면 귀하의 승인은 귀하의 라우팅 구성에 더 이상 의존하지 않습니다.

    또 다른 가능성은 맞춤 작성자 특성 인 implement an access token을 사용하는 것입니다.