2013-04-23 3 views
0

현재 회원이 계정을 갖고 있으며 Facebook과 내 로그인 양식을 사용하여 로그인 할 수있는 ASP.NET MVC 4 웹 사이트가 있습니다. 그런 다음 FormsAuthentication을 사용하고 있습니다.WebAPI의 보안 접근 방식

다음으로 WebAPI를 사용하여 API를 작성하고 일부 기능을 모바일 클라이언트에 공개하여 건물을 계획하고 있습니다.

다른 사용자가 내 API를 사용하는 것에 대한 계획이 없으므로 이는 내가 작성한 클라이언트에 대한 것입니다.

WebAPI에서 보안을 구현하려면 어떻게해야합니까? 클라이언트에서 로그인 양식을 가지고 자격 증명을 받고, 로그인하고, 각 호출에서 서버로 다시 보낼 토큰을 반환 할 수있는 토큰 시스템을 사용해야합니까?

서버에 oAuth를 구현해야합니까?

+0

참조 http://stackoverflow.com/questions/319530/restful-authentication – Yaur

답변

0

완전히 RESTful이되도록 노력하십시오. 각 요청에서 클라이언트가 인증 정보를 제공하는 HTTP의 기본 인증 시스템을 사용하십시오. SSL을 사용하는 경우 보안 문제없이 HTTP 기본 인증을 사용할 수도 있습니다. 그렇지 않으면 HTTP Digest가이 목적을 위해 충분히 안전합니다.

ASP.NET 용 HTTP 기본 인증 공급자를 구현해야합니다. 다행히도 쉽고 재미 있습니다!

querystring 매개 변수를 사용하여 서명 된 URI를 필요로하는 다른 시스템보다 우수합니다.이 시스템은 추악하고 멋진 REStfulness를 엉망으로 만들거나 주변에 토큰 (일반적으로 쿠키로 전달됨)을 운반합니다.

0

거룩한 전쟁은 제쳐두고 인증을 수행하는 방법에 관한 것입니다. 양식 인증 만 사용할 수 있습니다. 동일한 사이트/도메인의 웹 인터페이스를 사용하고 있고 인증 정보를 잘 고려한 경우이 방법이 매우 쉽고 편리합니다.

당신이 첫번째 장소에있는 티켓을 만들려면 API 컨트롤러

public class MyApiControllerBase : ApiController 
{ 
    public MySecurityContextType SecurityContext { get; set; } 
} 
ActionFilterAttribute

public class AuthenticationContextAttribute : System.Web.Http.Filters.ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     MyApiControllerBase controller = actionContext.ControllerContext.Controller as MyApiControllerBase ; 
     if (controller != null) 
     { 

      var context = ((HttpContextBase)controller.Request.Properties["MS_HttpContext"]); 

      HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
      FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 

      controller.SecurityContext= ParseFormsAuthenticationTicket(ticket); 
     } 
    } 
} 

및 코드에 대한 기본 클래스가 필요합니다.

LogIn(HttpRequestBase httpRequest, string userName, string password) 
{ 
    var context = DoLoginLogic(userName,password); 
    FormsAuthentication.SetAuthCookie(context, usePersistentCookies); 
} 

승인 방법은 분명히 컨트롤러 메소드에서 수행해야합니다.

+0

컨트롤러 작업 메서드에 특성을 추가하여 인증 구현을 단순화 할 수 있습니다. – Dai

+0

정말 권한 부여 방식에 따라 다릅니다. 승인 수준 (예 : 관리자 대 비 관리자)이 필요한 경우 객체 레벨 권한 부여가 필요한 경우 액션 필터를 사용하여 간단하게 만들 수 있습니다. – Yaur