웹 서비스를 사용하여 사용자 인증

 

게시 날짜: 2017년 1월

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

Microsoft Dynamics 365의 외부 클라이언트 인증 기능을 사용하여 Windows 8 데스크톱은 물론 태블릿 및 전화와 같은 모바일 장치에 대한 클라이언트 응용 프로그램을 개발할 수 있습니다. 이 기능은 .NET 이외의 응용 프로그램에도 사용할 수 있습니다.

이 항목의 내용

인증 개요

기술 종속성

보안

사용자 로그인 및 응용 프로그램 등록

클라이언트 응용 프로그램

OAuth 인증 끝점

OAuth 끝점 URL 검색

OAuth 리소스 지정

인증 개요

.NET Framework에서 빌드되지 않은 앱을 포함하여 최신 모바일 앱을 만드는 개발자는 조직 웹 서비스의 SOAP 및 OData 끝점을 통해 Microsoft Dynamics 365 비즈니스 데이터에 액세스할 수 있습니다. 이 웹 서비스는 OAuth 2.0 프로토콜에 있는 특정 인증 기능을 지원합니다.

다음 목록은 최신 모바일 앱 인증에 지원되는 작업에 대해 설명합니다.

  • HTTP 인증 헤더에서 JSON 웹 토큰 사용

  • 외부 앱(브라우저 외부)에서 OData 서비스에 대한 인증

  • 외부 응용 프로그램(브라우저 외부)에서 Organization.svc/web(SOAP) 서비스에 대한 인증

기술 종속성

Microsoft Dynamics 365OData 및 SOAP 웹 서비스 종점으로 인증하는 외부 클라이언트 애플리케이션을 개발 및 실행하기 위해서는 다음 기술이 요구됩니다:

Microsoft Dynamics 365OData 및 SOAP 웹 서비스 종점으로 인증하는 외부 클라이언트 애플리케이션을 개발 및 실행하기 위해서는 다음 기술이 옵션입니다:

보안

이 인증 기능에는 다음과 같은 보안 정보가 적용됩니다.

  • 인증 토큰은 보호된 저장소의 장치에 저장됩니다. Windows 운영 체제에서는 Windows 자격 증명 관리자가 사용됩니다.

  • 이 기능은 HTTP 요청에 대해 TLS(Transport Layer Security) 또는 SSL(Secure Sockets Layer)를 사용하도록 합니다.

사용자 로그인 및 응용 프로그램 등록

다음 정보는 사용자 로그인 및 응용 프로그램 등록과 관련되어 있습니다.

  • Microsoft Azure Active Directory Authentication Library(ADAL)에 대한 사용자 로그인은 웹 브라우저 컨텍스트에서 처리됩니다.

  • 응용 프로그램 등록은 Dynamics 365(온라인)배포용 Azure Active Directory및 온-프레미스 또는 인터넷 연결 배포(IFD)용 Active Directory Federation Services(AD FS)를 통해 관리됩니다.Microsoft Azure 관리 포털 또는 API를 사용하여 Dynamics 365(온라인)에 앱을 등록할 수 있습니다.

클라이언트 응용 프로그램

외부 클라이언트 응용 프로그램에서 수행할 수 있는 작업의 범위는 다음 목록에 요약되어 있습니다.

  • OData 끝점을 사용하면 만들기, 검색, 업데이트 및 삭제 작업이 지원됩니다. 메시지 실행 또는 메타 데이터 검색에 대한 지원은 없습니다.

  • 최신 모바일 응용 프로그램에 대해 SOAP 끝점(Organization.svc/web)을 사용할 경우 전체 웹 서비스 기능 집합에 대 한 액세스를 사용할 수 있습니다.

웹 서비스를 호출하는 클라이언트 코드를 작성할 때 서비스를 매번 호출하기 전에 ADAL을 통해 토큰을 요청하는 것이 좋습니다. 이러한 방식으로 ADAL은 캐시된 액세스 토큰의 인스턴스를 다시 사용할지, 새로 고침 토큰을 사용하여 새로 하나 요청할지, 아니면 사용자에게 로그인하라는 메시지를 표시할지 결정할 수 있습니다.

OAuth 끝점 URL 검색

응용 프로그램 또는 구성 파일에서 OAuth 공급자 URLs을 하드코딩하는 것과 비교하여 인증 기관을 얻는 다른 방법으로 런타임에 웹 서비스 인증을 위한 인증 기관을 검색할 수 있는 기능이 제공됩니다.

검색 프로세스는 Authorization 헤더에 "Bearer"라는 무단 HTTP 요청과 테넌트 조직의 SOAP 끝점 URL을 요청 메시지로 보내 시작합니다.

GET /XRMServices/2011/Organization.svc HTTP/1.1 Host: <org>.crm.dynamics.com Authorization: Bearer

참고

전달자 시도/응답은 이제 선택적입니다. 인증 헤더 없이 GET을 수행해도 동일한 결과를 산출합니다.

authorization_uri 매개 변수가 포함된 응답과 함께 401 오류가 반환됩니다. 해당 매개 변수의 값은 인증 기관 URL입니다.

HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer authorization_uri=URI

인증 기관 검색 기능은 SdkClientVersion 속성이 테넌트 조직의 SOAP 끝점 URL에 있을 경우에만 SOAP 클라이언트에 사용할 수 있습니다. 예제 URL은 다음과 같습니다.

https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;

SdkClientVersion 값은 소수점 하나 이상의 6.0.0002.0000보다 큰 버전 번호일 수 있습니다.SdkClientVersion 속성 값은 클라이언트 응용 프로그램에 연결된 SDK 어셈블리의 제품 빌드 버전으로 설정하는 것이 좋습니다.

다음 코드 샘플에서는 인증 기관 URL을 얻는 방법에 대해 설명합니다. 샘플 코드는 NuGet.org에서 가져올 수 있는 Microsoft Azure Active Directory Authentication Library(ADAL)을 사용합니다.AndroidiOS용 이 라이브러리의 원본 버전을 열 수도 있습니다.


/// <summary>
/// Discover the authentication authority.
/// </summary>
/// <param name="serviceUrl">The URL of the organization's SOAP endpoint. </param>
/// <returns>The authority URL.</returns>
/// <remarks>The service URL must contain the SdkClient property.</remarks>
/// <example>https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;</example>
public static string DiscoveryAuthority(Uri serviceUrl)
{
    // Use AuthenticationParameters to send a request to the organization's endpoint and
    // receive tenant information in the 401 challenge. 
    Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters parameters = null;
    HttpWebResponse response = null;
    try
    {
        // Create a web request where the authorization header contains the word "Bearer".
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);

        // The response is to be encoded.
        httpWebRequest.ContentType = "application/x-www-form-urlencoded";
        response = (HttpWebResponse)httpWebRequest.GetResponse();
    }

    catch (WebException ex)
    {
        response = (HttpWebResponse)ex.Response;

        // A 401 error should be returned. Extract any parameters from the response.
        // The response should contain an authorization_uri parameter.
        parameters = Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters.
            CreateFromResponseAuthenticateHeader((response.Headers)["WWW-Authenticate"]);
    }
    finally
    {
        if (response != null)
            response.Dispose();
    }
    // Return the authority URL.
    return parameters.Authority;
}

OAuth 인증 끝점

OAuth 검색을 사용하는 대신 다른 방법은 잘 알려진 OAuth 인증 끝점을 사용하는 것입니다.Microsoft Dynamics 365(온라인 및 온-프레미스) 웹 서비스로 인증하는 앱을 작성할 때 다음 표와 같이 인증 코드에서 OAuth 공급자 URLs을 사용해야 합니다.

배포

URL

Microsoft Dynamics 365(온라인)

HYPERLINK "https://login.windows.net/common/oauth2/authorize" https://login.windows.net/common/oauth2/authorize(다중 테넌트)

https://login.windows.net/<tenant ID>/oauth2/authorize(단일 테넌트)

Microsoft Dynamics 365(온-프레미스/IFD)

https://<serverFQDNaddress>/adfs/ls

STS(보안 토큰 서비스)URL에서 IFD 서버의 주소, 예컨대 contoso.com을 교체하십시오. 표시된 STS URL은 AD FS의 기본 설치용입니다. 기본이 아닌 설치는 다른 URL을 사용할 수 있습니다. 유하사게 표시된 테넌트 ID를 대체합니다.

인증 끝점은 나중에 변경할 수 있으므로 Dynamics 365(온라인)으로 항상 OAuth 검색을 사용하는 것이 좋습니다.

OAuth 리소스 지정

OAuth 인증 코드 플로를 사용하여 Microsoft AzureActive Directory와 함께 인증할 떄는 대상 리소스의 값을 제공해야 합니다. 루트 조직 웹 주소(예: https://contoso.crm.dynamics.com)를 OAuth 인증 끝점에 대한 호출에서 "resource" 쿼리 문자열 매개 변수로 사용해야 합니다.

// Obtain an authentication token to access the web service.
String resource = “https://contoso.crm.dynamics.com”; 
_authenticationContext = new AuthenticationContext(_oauthUrl, false );
AuthenticationResult result = await _authenticationContext.AcquireTokenAsync( resource, clientID );

추가 정보:샘플: Windows 8 데스크톱 최신 OData 앱

참고 항목

모바일 및 최신 앱 작성
연습: Active Directory를 사용하여 Dynamics 365 등록
Microsoft Dynamics 365에서 사용자 인증
블로그: Azure AD 개발자 미리 보기에 새 기능 소개: Azure 인증 라이브러리
Azure Active Directory를 사용한 서버측 CRM 인증

Microsoft Dynamics 365

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