서비스 관리 요청 인증

업데이트 날짜: 2015년 6월

다음 방법 중 하나를 사용하여 관리 서비스에 대한 요청을 인증해야 합니다.

Azure AD 응용 프로그램을 만들고 Active Directory Authentication Library를 사용하여 해당 응용 프로그램에서 액세스 토큰을 가져오는 방법으로 관리 서비스에 대한 보안 요청을 인증할 수 있습니다. Azure AD를 사용한 인증 방법에 대한 자세한 내용은 Azure AD의 인증 시나리오를 참조하세요.

Azure AD에 응용 프로그램을 추가하려면 다음을 수행하세요.

  1. Azure 관리 포털에 로그인합니다.

  2. 왼쪽 메뉴 아래에서 Active Directory를 클릭하고 기본 디렉터리를 클릭합니다.

  3. 기본 디렉터리 페이지의 응용 프로그램 통합에서 개발 중인 응용 프로그램 추가를 클릭합니다.

    Azure AD 응용 프로그램 추가
  4. 응용 프로그램의 이름을 입력하고 네이티브 클라이언트 응용 프로그램를 선택한 후 오른쪽 화살표를 클릭합니다.

    응용 프로그램 이름 제공
  5. 응용 프로그램의 URI를 입력하고 확인 표시를 클릭합니다. URI에는 http://localhost/와 응용 프로그램 이름이 차례대로 포함됩니다.

    리디렉션 URL 입력
  6. 응용 프로그램을 만든 후에는 응용 프로그램에서 서비스 관리 API에 액세스할 수 있게 사용 권한을 추가해야 합니다. 응용 프로그램 페이지로 이동한 후 구성을 클릭합니다.

  7. 구성 페이지 아래쪽의 다른 응용 프로그램에 대한 권한 섹션에서 응용 프로그램 선택을 클릭하고 Microsoft Azure 서비스 관리 API를 선택합니다.

    응용 프로그램에 권한 할당
  8. 위임된 권한: 0을 클릭하고 Azure 서비스 관리 액세스를 선택합니다.

    권한 설정 계속
  9. 아래쪽 메뉴에서 저장을 클릭합니다.

NuGet 패키지를 사용하여 Visual Studio 프로젝트에 Active Directory Authentication Library를 쉽게 설치할 수 있습니다. 패키지를 설치하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 클릭합니다.

    NuGet 패키지 관리
  2. 검색 상자에 Active Directory를 입력하고 Active Directory 인증 라이브러리 패키지에 대해 설치를 클릭한 후 지침에 따라 패키지를 설치합니다.

    Active Directory 라이브러리 설치

다음 코드 예에서는 액세스 토큰을 가져오는 방법을 보여 줍니다.


private static string GetAuthorizationHeader()
{
  AuthenticationResult result = null;
  
  var context = new AuthenticationContext("https://login.windows.net/{tenantId}");

  var thread = new Thread(() =>
  {
    result = context.AcquireToken(
      "https://management.core.windows.net/",
      "{clientId}",
      new Uri("{redirectUri}"));
  });

  thread.SetApartmentState(ApartmentState.STA);
  thread.Name = "AquireTokenThread";
  thread.Start();
  thread.Join();
            
  if (result == null)
  {
    throw new InvalidOperationException("Failed to obtain the JWT token");
  }

  string token = result.AccessToken;
  return token;
}

위에 나열된 코드를 사용할 때는 다음 항목을 바꾸어야 합니다.

  • {tenantId}를 응용 프로그램의 GUID로 바꿉니다. GUID를 찾으려면 관리 포털의 Active Directory 섹션에 있는 기본 디렉터리 페이지로 이동한 후 이전에 만든 응용 프로그램을 선택하고 끝점 보기를 클릭합니다.

    끝점 보기

    응용 프로그램의 GUID를 복사한 후 자리 표시자 자리에 입력합니다.

    응용 프로그램 끝점 복사
  • {clientId}를 클라이언트 식별자로 바꿉니다. 클라이언트 식별자를 찾으려면 관리 포털에서 응용 프로그램의 구성 페이지로 이동합니다.

    AD 클라이언트 ID 복사
  • {redirectUri}를 리디렉션 URI로 바꿉니다. 리디렉션 URI를 찾으려면 관리 포털에서 응용 프로그램의 구성 페이지로 이동합니다.

    응용 프로그램 리디렉션 URI 복사

다음 코드 줄을 사용하여 위에 표시된 GetAuthorizationHeader 메서드에서 반환된 토큰을 요청에서 사용할 수 있는 변수에 할당합니다.

string token = GetAuthorizationHeader();

다음 코드 줄을 사용하여 요청에 토큰을 추가합니다.


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);

SSL을 통해 관리 인증서를 사용하여 관리 서비스에 대한 보안 요청을 인증할 수 있습니다. 관리 인증서를 사용하려면 인증서를 Azure에 업로드해야 합니다. 구독에 관리 인증서를 추가한 후에는 해당 인증서를 사용하여 서비스에 대한 요청을 서명할 수 있습니다. 관리 인증서를 만들고 구독에 해당 인증서를 연결하는 방법에 대한 자세한 내용은 Azure용 관리 인증서 만들기 및 업로드를 참조하세요.

응용 프로그램을 디자인할 때는 관리 인증서에 대한 다음과 같은 사항을 기억해야 합니다.

  • 서비스 관리 API는 인증서가 여전히 유효한지 확인하지 않으므로 만료된 인증서에 대한 인증도 성공하게 됩니다.

  • 모든 관리 인증서는 동일한 권한 집합을 가지고 있습니다. 동일한 구독에서 역할마다 서로 다른 관리 인증서를 구성할 수 있는 "역할 기반" 인증의 개념이 없습니다.

다음 예제에서는 System.NetSystem.Security.Cryptography.X509Certificates 라이브러리를 사용하여 관리 인증서를 검색하는 방법을 보여 줍니다.


private static X509Certificate2 GetStoreCertificate(string thumbprint)
{
  List<StoreLocation> locations = new List<StoreLocation>
  { 
    StoreLocation.CurrentUser, 
    StoreLocation.LocalMachine
  };

  foreach (var location in locations)
  {
    X509Store store = new X509Store("My", location);
    try
    {
      store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
      X509Certificate2Collection certificates = store.Certificates.Find(
        X509FindType.FindByThumbprint, thumbprint, false);
      if (certificates.Count == 1)
      {
        return certificates[0];
      }
    }
    finally
    {
      store.Close();
    }
  }
  throw new ArgumentException(string.Format(
    "A Certificate with Thumbprint '{0}' could not be located.",
    thumbprint));
}

다음 코드 줄을 사용하여 위에 표시된 GetStoreCertificate 메서드에서 반환된 인증서를 요청에서 사용할 수 있는 변수에 할당합니다.

note참고
Thumbprint는 구독에 추가한 관리 인증서의 지문을 나타냅니다.


X509Certificate2 certificate = GetStoreCertificate(Thumbprint);

다음 코드 줄을 사용하여 요청에 인증서를 추가합니다.


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.ClientCertificates.Add(certificate);

표시: