OAuth를 사용하여 Microsoft Dynamics 365 웹 서비스에 연결

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

OAuth는 Microsoft Dynamics 365 웹 API에서 지원하는 인증 메서드이며 조직 서비스에 대한 두 가지 인증 메서드 중 하나입니다. 다른 인증 메서드는 Active Directory 인증입니다.OAuth를 사용했을 때 이점은 응용 프로그램이 다중 요소 인증을 지원할 수 있다는 점입니다. 응용 프로그램이 조직 서비스 또는 검색 서비스에 연결할 때 OAuth 인증을 사용할 수 있습니다.

웹 서비스에 대한 메서드 호출을 위해서는 해당 서비스 끝점에 대한 ID 공급자를 사용하여 권한을 받아야 합니다. 인증은 Microsoft Azure Active Directory에서 발행된 유효한 OAuth 2.0(사용자) 액세스 토큰이 메시지 요청의 헤더에 제공되었을 때 승인됩니다.

Dynamics 365 웹 API를 사용하기 위해 권장되는 인증 API는 Azure Active Directory Authentication Library(ADAL)입니다. ADAL은 다양한 플랫폼 및 프로그래밍 언어에 사용할 수 있습니다. ADAL API는 Dynamics 365 웹 서비스 ID 공급자와 함께 OAuth 2.0 인증을 관리합니다. 실제 사용되는 OAuth 프로토콜에 대한 자세한 내용은 OAuth를 사용하여 CRM 서비스에 인증을 참조하십시오.

Dynamics 365 웹 서비스로 연결하는 OAuth 인증을 사용하기 전에 먼저 응용 프로그램을 Microsoft Azure Active Directory로 등록해야 합니다.Azure Active Directory는 응용 프로그램에 Dynamics 365 테넌트에 저장된 비즈니스 데이터에 액세스할 수 있는 권한이 있는지 확인하는 데 사용됩니다.

ADAL을 사용하여 인증

ADAL을 사용하는 기본 OAuth 웹 서비스 인증은 단 몇 줄의 코드를 사용하여 이루어집니다.

// TODO Substitute your correct CRM root service address, 
string resource = "https://mydomain.crm.dynamics.com";

// TODO Substitute your app registration values that can be obtained after you
// register the app in Active Directory on the Microsoft Azure portal.
string clientId = "e5cf0024-a66a-4f16-85ce-99ba97a24bb2";
string redirectUrl = "https://localhost/SdkSample";


// Authenticate the registered application with Azure Active Directory.
AuthenticationContext authContext = 
    new AuthenticationContext("https://login.windows.net/common", false);
AuthenticationResult result = authContext.AcquireToken(resource, clientId, new
                                                       Uri(redirectUrl));

인증 컨텍스트는 잘 알려진 권한 제공자를 사용하여 반환됩니다. 호출하는 Dynamics 365 인스턴스와 연결된 Azure Active Directory 테넌트를 모르는 경우 다중 테넌트 시나리오에 대한 인증 URL인 "https://login.windows.net/common"의 상수 문자열을 사용할 수 있습니다. 런타임 시 권한을 동적으로 검색할 수 있는 또 다른 방법은 이 항목의 뒷부분에 설명되어 있습니다.

다음 코드 줄은 찾고 있는 액세스 토큰을 포함하는 인증 결과를 가져옵니다. 이 토큰을 사용하여 웹 서비스에 요청 메시지를 보낼 수 있습니다.

이 코드에서 몇 가지 추가 항목은 사용되는 문자열 값입니다. 리소스 변수는 Dynamics 365 서버의 도메인(조직)을 포함하여 TLS(Transport Layer Security) 또는 SSL(Secure Sockets Layer) 루트 주소를 담고 있습니다.clientIdredirectUrl 변수는 Active Directory로 응용 프로그램을 등록하면 생기는 응용 프로그램 등록 정보를 포함합니다. 앱 등록에 대한 자세한 내용은 연습: Azure Active Directory를 사용하여 Dynamics 365 등록을 참조하십시오.

요청 메시지에서 액세스 토큰 사용

Dynamics 365 사용 중인 API에 따라 웹 서비스에 요청 메시지를 보낼 수 있는 방법이 두 가지 있습니다. 웹 API의 경우 일반적으로 HTTP 메시지 요청을 보냅니다. 조직 서비스의 경우 웹 클라이언트 프록시를 사용하여 메시지 요청을 보냅니다.

HTTP 메시지 요청

액세스 토큰을 얻고 나면 액세스 토큰 값으로의 웹 서비스에 보내는 메시지 요청의 인증 헤더를 설정하고 "Bearer" 토큰 유형을 지정해야 합니다. 인증 헤더에 대한 자세한 내용은 HTTP/1.1 프로토콜의 섹션 14.8을 참조하십시오. 다음 코드에서는 System.Net.Http.HttpClient 클래스를 사용하는 실행 방법을 설명합니다.

using (HttpClient httpClient = new HttpClient())
{
    httpClient.Timeout = new TimeSpan(0, 2, 0);  // 2 minutes
    httpClient.DefaultRequestHeaders.Authorization = 
        new AuthenticationHeaderValue("Bearer", result.AccessToken);

웹 클라이언트 요청

조직 서비스의 OrganizationWebProxyClient 또는 DiscoveryWebProxyClient를 사용하는 경우 단순히 HeaderToken 속성 값을 액세스 토큰으로 지정합니다.

액세스 토큰 새로 고침

매 번 Dynamics 365 웹 서비스 메서드로 호출하기 전에 액세스 토큰을 새로 고치는 것이 권장됩니다. 이는 액세스 토큰의 만료 날짜를 확인하고 토큰이 곧 만료되려고 할 때 토큰을 새로 고칠 수 있는 코드 작성의 임시 방편입니다.

ADAL로 캐시되는 액세스 토큰을 새로 고치려면 동일한 컨텍스트를 사용하여 AcquireToken 메서드를 호출하기만 하면 됩니다.

AuthenticationResult result = authContext.AcquireToken(resource, clientId, new Uri(redirectUrl));

그 후에 웹 API를 사용하는 경우 result.AccessToken, 조직 서비스를 사용하는 경우 HeaderToken로 인증 헤더를 다시 한 번 설정합니다.

httpClient.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", result.AccessToken);

런타임에서 인증 검색

인증 권한 URL과 리소스 URL은 런타임 시 다음 ADAL 코드를 사용하여 동적으로 확인합니다. 이것은 앞서 코드 조각에 나온 잘 알려진 인증 URL에 비해 권장되는 방법입니다.

AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(
                        new Uri("https://mydomain.crm.dynamics.com/api/data/")).Result;

String authorityUrl = ap.Authority;
String resourceUrl  = ap.Resource;

웹 API의 경우 기관 URL을 얻을 수 있는 또 다른 방법은 액세스 토큰을 지정하지 않은 웹 서비스에 대한 메시지 요청을 보내는 것입니다. 이것은 전달자 시도/응답으로 알려져 있습니다.URL 권한을 얻으려면 응답을 구문 분석할 수 있습니다.

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", “”);

참고 항목

연습: Azure Active Directory를 사용하여 Dynamics 365 등록
다중 요소 인증 설명서
OAuth 2.0

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보