보안: 폼 인증

등록일시: 2014-01-27 08:00,  수정일시: 2014-01-30 12:39
조회수: 8,520
이 문서는 ASP.NET Web API 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

폼 인증은 HTML 폼을 이용해서 사용자의 자격 증명을 서버로 전송합니다. 이 방식은 인터넷 표준은 아닙니다. 폼 인증은 사용자가 HTML 폼과 상호 작용하는 웹 응용 프로그램에서 호출되는 Web API에 가장 적합합니다.

장점 단점
  • 구현이 쉬움: ASP.NET에 내장됨
  • 손쉽게 사용자 계정을 관리할 수 있는, ASP.NET 멤버십 공급자를 사용함
  • 표준 HTTP 인증 메커니즘이 아니며, 표준 Authorization 헤더 대신 HTTP 쿠키를 사용함
  • 브라우저 클라이언트를 주 대상으로 함
  • 자격 증명이 평문으로 전송됨
  • 크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery)에 취약해서 CSRF에 대한 별도 대응 방안이 필요함
  • 비 브라우저 클라이언트에서 사용이 어렵고, 로그인에 브라우저가 필요함
  • 자격 증명이 요청에 담겨서 전송됨
  • 일부 사용자들은 쿠키를 사용하지 않음

ASP.NET에서 폼 인증이 동작하는 방식을 요약해보면 다음과 같습니다:

  1. 클라이언트가 인증이 필요한 리소스를 요청합니다.
  2. 만약, 사용자가 인증되지 않았다면, 서버가 HTTP 302 (Found)를 반환하고 로그인 페이지로 재전송합니다.
  3. 사용자가 폼에 자격 증명을 입력하고 서버에 제출합니다.
  4. 서버가 다시 한 번 HTTP 302를 반환하고 최초의 URI로 다시 재전송합니다. 이 응답에는 인증 쿠키가 담겨 있습니다.
  5. 클라이언트가 리소스를 다시 요청합니다. 이번 요청에는 인증 쿠키가 담겨 있기 때문에, 서버가 요청을 허가해주게 됩니다.

보다 자세한 정보는 An Overview of Forms Authentication 문서를 참고하시기 바랍니다.

Web API에서 폼 인증 사용하기

폼 인증을 사용하는 응용 프로그램을 작성하려면, MVC 4 프로젝트 마법사에서 "인터넷 응용 프로그램(Internet Application)" 템플릿을 선택합니다. 이 템플릿은 계정 관리를 위한 MVC 컨트롤러를 자체적으로 생성해줍니다. ASP.NET Fall 2012 업데이트를 설치했다면 "Single Page Application" 템플릿을 사용할 수도 있습니다.

그리고, 보안: ASP.NET Web API의 인증(Authentication)과 권한(Authorization) 문서에서 살펴본 것처럼, [Authorize] 어트리뷰트를 이용해서 Web API 컨트롤러에 대한 접근을 제한할 수도 있습니다.

폼 인증은 인증 요청에 세션 쿠키를 이용합니다. 브라우저는 자동으로 관련된 모든 쿠키들을 대상 웹 사이트로 전송합니다. 바로 이런 점이 폼 인증을 크로스 사이트 요청 위조(CSRF) 공격에 취약하게 만드는 원인이기도 합니다. 자세한 내용은 보안: 크로스 사이트 요청 위조(Cross-Site Request Forgery) 공격 방지하기 문서를 참고하시기 바랍니다.

폼 인증은 사용자의 자격 증명을 암호화하지 않습니다. 따라서, SSL을 사용하지 않는 경우, 폼 인증의 안전을 보장할 수 없습니다. 자세한 내용은 보안: Web API에서 SSL 사용하기 문서를 참고하시기 바랍니다.