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) 루트 주소를 담고 있습니다.clientId 및 redirectUrl 변수는 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. 저작권 정보