2012-03-28 2 views
5

Microsoft ASP.NET MVC 4 ApiController을 사용하여 간단한 RESTful 웹 서비스 (지금은 GET 전용)를 만들었습니다.Microsoft MVC 4, APIController 및 적절한 RESTful 로그인 웹 서비스

이제 서비스 인증 시스템을 구현하는 올바른 방법을 찾고 있습니다. 내 WS를 사용하는 모든 응용 프로그램에 대해 고유 한 로그인 페이지를 갖고 싶지 않기 때문에 내장 된 FormsAuthentication을 사용하고 싶지 않습니다. 또한 RESTful 패러다임을 깨고 리다이렉션을 강제 실행하고 적절한 401 상태 코드로 클라이언트에 알리지 않습니다.

그래서 난에서 다음 줄을 삭제 장애인 FormsAuthentication이 내 web.config :

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
</authentication> 

및 추가 다음

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="FormsAuthentication" /> 
</modules> 

을 이미 사용자 로그인, 기본적으로 검사를 관리하기위한 ApiController이 자격 증명이 유효하지 않은 경우 내 데이터베이스에 대한 자격 증명을 입력하고 사용자 또는 401을 반환합니다.

나는 MembershipAuthorization API를 구현해야한다는 것을 읽었지만, 처음부터 저에게 도움이되는 것을 찾지 못했습니다. 아이디어가 있으십니까? 데이터베이스에서 쿠키 및 인증 코드를 관리해야합니까, 아니면 FormsAuthentication과 비슷한 클래스가 있습니까?

답변

3

해결책을 찾았는데 기본적으로 Microsoft에서 example에 표시된 대안을 사용했습니다.

  1. App_Start라는 폴더를 만듭니다.
  2. twoclasses을 적절한 네임 스페이스와 함께 넣으십시오.
  3. FormsAuthentication과 추가 된 요청/응답 처리 시스템이 나머지 작업을 수행합니다.

    private void OnEndRequest(object source, EventArgs args) 
        { 
         var context = (HttpApplication)source; 
         var response = context.Response; 
    
         if (context.Context.Items.Contains("__WEBAPI:Authentication-Fixup")) 
         { 
          response.StatusCode = (int)context.Context.Items[FixupKey]; 
          response.RedirectLocation = null; 
          // Clear the page content, since I don't want the "Content moved here." body 
          response.ClearContent(); 
         } 
        } 
    

    참고 :

, 나는 OnEndRequest 방법이 방법을 편집 한

3

인증을 처리하기 위해 custom message handler을 쓸 수 있습니다. 도미니크 바이어 (Dominick Baier)는 자세한 내용을 자세히 들어 보신 우수한 series of blog posts을 썼습니다.

2

이 체크 아웃 project on github. ASP.NET 웹 API에 보안을 추가하기 위해 몇 가지 클래스와 예제를 개발했습니다. 지원되는 보안 모델 중 하나는 기본 인증입니다.이 인증은 사용자의 질문에서 설명한 것입니다.

+0

첫 번째 예제 인 'BasicAuthentication'이 필요합니다. 그러나 나는 데이터베이스에 authcode (authcode로 클라이언트에 사용자 이름과 암호를 보내지 않음)를 저장하는 방법이 있는지 아직 이해하지 못했습니다. – frapontillo

+0

"authcode를 저장하는 방법"이 무슨 의미인지 이해하지 못합니다. authcode에 대한 설명은 무엇입니까? 기본 인증을 사용하면 보낸 사용자 이름/암호를 인코딩하고 반대쪽에서 암호를 해독하려고합니다.또한 기본 인증과 함께 HTTPS/SSL/TSL을 사용하여 전선에서 전체 메시지를 암호화하려고합니다. DB에 암호를 저장할 때 나는 항상 저장된 암호에 대해 단방향 암호화를 사용합니다. 그런 다음 DB에있는 내용을 비교하기 전에 사용자가 입력 한 암호에 대해 동일한 암호화를 사용합니다. –

+0

로그인 할 때마다 임시 인증 코드를 만들어 데이터베이스에 저장하고 싶습니다. FormsAuthentication이하는 것과 똑같은 일이라고 생각합니다. 즉, 로그온 한 사용자에게 엄격하게 연결된 세션 인증 코드를 만듭니다. – frapontillo