다음을 통해 공유


RESTful 웹 서비스 인증

HTTP는 여러 인증 메커니즘을 사용하여 리소스에 대한 액세스를 제어할 수 있도록 지원합니다. 기본 인증은 올바른 자격 증명이 있는 클라이언트에만 리소스에 대한 액세스를 제공합니다. 이 문서에서는 기본 인증을 사용하여 RESTful 웹 서비스 리소스에 대한 액세스를 보호하는 방법을 보여 줍니다.

참고 항목

iOS 9 이상에서 ATS(App Transport Security)는 인터넷 리소스(예: 앱의 백 엔드 서버)와 앱 간에 보안 연결을 적용하여 중요한 정보의 우발적인 공개를 방지합니다. ATS는 iOS 9용으로 빌드된 앱에서 기본적으로 사용하도록 설정되므로 모든 연결에는 ATS 보안 요구 사항이 적용됩니다. 연결이 이러한 요구 사항을 충족하지 않으면 예외로 실패합니다. 인터넷 리소스에 대한 프로토콜 및 보안 통신을 사용할 HTTPS 수 없는 경우 ATS를 옵트아웃할 수 있습니다. 이 작업은 앱의 Info.plist 파일을 업데이트하여 수행할 수 있습니다. 자세한 내용은 App Transport Security를 참조 하세요.

HTTP를 통해 사용자 인증

기본 인증은 HTTP에서 지원하는 가장 간단한 인증 메커니즘이며, 암호화되지 않은 base64로 인코딩된 텍스트로 사용자 이름 및 암호를 보내는 클라이언트가 포함됩니다. 다음과 같이 작동합니다.

  • 웹 서비스가 보호된 리소스에 대한 요청을 수신하는 경우 다음 다이어그램과 같이 HTTP 상태 코드 401(액세스 거부)을 사용하여 요청을 거부하고 WWW-Authenticate 응답 헤더를 설정합니다.

Basic Authentication Failing

  • 웹 서비스가 헤더가 올바르게 설정된 보호된 리소스 Authorization 에 대한 요청을 받으면 웹 서비스는 요청이 성공했으며 요청된 정보가 응답에 있음을 나타내는 HTTP 상태 코드 200으로 응답합니다. 이 시나리오는 다음 다이어그램에 나와 있습니다.

Basic Authentication Succeeding

참고 항목

기본 인증은 HTTPS 연결을 통해서만 사용해야 합니다. HTTP 연결을 Authorization 통해 사용하는 경우 공격자가 HTTP 트래픽을 캡처하는 경우 헤더를 쉽게 디코딩할 수 있습니다.

웹 요청에서 기본 인증 지정

기본 인증 사용은 다음과 같이 지정됩니다.

  1. "Basic" 문자열이 요청의 헤더에 Authorization 추가됩니다.
  2. 사용자 이름과 암호는 "username:password" 형식의 문자열로 결합된 다음 base64로 인코딩되어 요청의 헤더에 Authorization 추가됩니다.

따라서 'XamarinUser'의 사용자 이름과 'XamarinPassword'의 암호를 사용하면 헤더가 다음과 같이 됩니다.

Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk

클래스는 HttpClient 속성에 헤더 Authorization 값을 HttpClient.DefaultRequestHeaders.Authorization 설정할 수 있습니다. 인스턴스는 HttpClient 여러 요청에 Authorization 걸쳐 존재하기 때문에 다음 코드 예제와 같이 모든 요청을 수행할 때가 아니라 헤더를 한 번만 설정하면 됩니다.

public class RestService : IRestService
{
  HttpClient _client;
  ...

  public RestService ()
  {
    var authData = string.Format ("{0}:{1}", Constants.Username, Constants.Password);
    var authHeaderValue = Convert.ToBase64String (Encoding.UTF8.GetBytes (authData));

    _client = new HttpClient ();
    _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Basic", authHeaderValue);
  }
  ...
}

그런 다음 웹 서비스 작업에 대한 요청이 수행되면 사용자가 작업을 호출할 수 있는 권한이 있는지 여부를 나타내는 헤더로 요청이 서명 Authorization 됩니다.

Important

이 코드는 자격 증명을 상수로 저장하지만 게시된 애플리케이션에서 안전하지 않은 형식으로 저장해서는 안 됩니다.

권한 부여 헤더 서버 쪽 처리

REST 서비스는 각 작업을 특성으로 [BasicAuthentication] 데코레이트해야 합니다. 이 특성은 헤더를 구문 분석 Authorization 하고 Web.config에 저장된 값과 비교하여 base64로 인코딩된 자격 증명이 유효한지 확인하는 데 사용됩니다. 이 방법은 샘플 서비스에 적합하지만 공용 웹 서비스에 대해 확장해야 합니다.

IIS에서 사용하는 기본 인증 모듈에서 사용자는 Windows 자격 증명에 대해 인증됩니다. 따라서 사용자에게 서버의 할 일기본 계정이 있어야 합니다. 그러나 사용자 지정 인증을 허용하도록 기본 인증 모델을 구성할 수 있습니다. 여기서 사용자 계정은 데이터베이스와 같은 외부 원본에 대해 인증됩니다. 자세한 내용은 ASP.NET 웹 사이트의 ASP.NET Web API에서 기본 인증을 참조하세요.

참고 항목

기본 인증은 로그아웃을 관리하도록 설계되지 않았습니다. 따라서 로그아웃에 대한 표준 기본 인증 방법은 세션을 종료하는 것입니다.