빠른 시작: Windows 데스크톱 앱에서 사용자 로그인 및 Microsoft Graph 호출

이 빠른 시작에서는 WPF(Windows Presentation Foundation) 애플리케이션이 사용자를 로그인하고 Microsoft Graph API를 호출할 액세스 토큰을 가져오는 방법을 보여 주는 코드 샘플을 다운로드하고 실행합니다. 빌드하는 데스크톱 앱은 PKCE(코드 교환용 증명 키) 표준과 쌍을 이루는 권한 부여 코드 흐름을 사용합니다.

자세한 내용은 샘플 작동 방식을 참조하세요.

필수 조건

빠른 시작 앱 등록 및 다운로드

빠른 시작 애플리케이션을 시작하는 옵션은 두 가지가 있습니다.

옵션 1: 앱을 등록하고 자동 구성한 다음, 코드 샘플 다운로드

  1. Microsoft Entra 관리 센터 - 앱 등록빠른 시작 환경으로 이동합니다.
  2. 애플리케이션 이름을 입력하고 등록을 선택합니다.
  3. 지침에 따라 클릭 한 번으로 새 애플리케이션을 다운로드하고 자동으로 구성합니다.

옵션 2: 애플리케이션 및 코드 샘플을 등록하고 수동으로 구성

1단계: 애플리케이션 등록

이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.

애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.

  1. Microsoft Entra 관리 센터에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
  3. ID>애플리케이션>앱 등록으로 이동하고 신규 등록을 선택합니다.
  4. 애플리케이션에 대한 이름을 입력합니다(예: Win-App-calling-MsGraph). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.
  5. 지원되는 계정 유형 섹션에서 모든 조직 디렉터리의 계정 및 개인 Microsoft 계정(예: Skype, Xbox, Outlook.com)을 선택합니다.
  6. 등록을 선택하여 애플리케이션을 만듭니다.
  7. 관리에서 인증을 선택합니다.
  8. 플랫폼 추가>모바일 및 데스크톱 애플리케이션을 차례로 선택합니다.
  9. 리디렉션 URI 섹션에서 https://login.microsoftonline.com/common/oauth2/nativeclient를 선택하고 사용자 지정 리디렉션 URI에서 ms-appx-web://microsoft.aad.brokerplugin/{client_id}를 추가합니다. 여기서 {client_id}는 애플리케이션(msal{client_id}://auth 확인란에 표시되는 것과 동일한 GUID)의 애플리케이션(클라이언트) ID입니다.
  10. 구성을 선택합니다.

2단계: 프로젝트 다운로드

WPF 샘플 애플리케이션 다운로드

Windows의 경로 길이 제한으로 인해 발생하는 오류를 방지하려면 보관 파일의 압축을 풀거나 리포지토리를 드라이브 루트에 가까운 디렉터리에 복제하는 것이 좋습니다.

3단계: 프로젝트 구성

  1. zip 파일을 디스크 루트에 가까운 로컬 폴더(예: C:\Azure-Samples)로 추출합니다.

  2. Visual Studio에서 프로젝트를 엽니다.

  3. App.Xaml.cs를 편집하고 ClientIdTenant 필드의 값을 다음 코드로 바꿉니다.

    private static string ClientId = "Enter_the_Application_Id_here";
    private static string Tenant = "Enter_the_Tenant_Info_Here";
    

여기서

  • Enter_the_Application_Id_here - 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.

    애플리케이션(클라이언트) ID 값을 찾으려면 Microsoft Entra 관리 센터에서 앱의 개요 페이지로 이동합니다.

  • Enter_the_Tenant_Info_Here - 다음 옵션 중 하나로 설정됩니다.

    • 애플리케이션이 이 조직 디렉터리의 계정을 지원하는 경우 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.

    • 애플리케이션이 모든 조직 디렉터리의 계정을 지원하는 경우 이 값을 organizations로 바꾸세요.

    • 애플리케이션에서 모든 조직 디렉터리의 계정 및 개인 Microsoft 계정을 지원하는 경우 이 값을 common으로 바꿉니다.

      디렉터리(테넌트) ID지원되는 계정 유형 값을 찾으려면 Microsoft Entra 관리 센터에서 앱의 개요 페이지로 이동합니다.

4단계: 애플리케이션 실행

Visual Studio에서 샘플 애플리케이션을 빌드하고 실행하려면 디버그 메뉴>디버깅 시작을 선택하거나 F5 키를 누릅니다. 애플리케이션의 MainWindow가 표시됩니다.

앱의 주 창이 나타나면 Microsoft Graph API 호출 단추를 선택합니다. Microsoft Entra 계정(회사 또는 학교 계정) 또는 Microsoft 계정(live.com, outlook.com) 자격 증명을 사용하여 로그인하라는 메시지가 표시됩니다.

애플리케이션을 처음 실행하는 경우 애플리케이션이 사용자 프로필에 액세스하고 로그인할 수 있도록 동의하라는 메시지가 표시됩니다. 요청된 권한에 동의하면 애플리케이션에 성공적으로 로그인되었음을 표시합니다. Microsoft Graph API 호출에서 얻은 몇 가지 기본 토큰 정보와 사용자 데이터가 표시되어야 합니다.

자세한 정보

샘플 작동 방법

Diagram showing how the sample app generated by this quickstart works.

MSAL.NET

MSAL(Microsoft.Identity.Client)은 사용자를 로그인하고 Microsoft ID 플랫폼으로 보호되는 API 액세스에 사용되는 토큰을 요청할 때 사용되는 라이브러리입니다. Visual Studio의 패키지 관리자 콘솔에서 다음 명령을 실행하여 MSAL을 설치할 수 있습니다.

Install-Package Microsoft.Identity.Client -IncludePrerelease

MSAL 초기화

다음 코드를 추가하여 MSAL에 대한 참조를 추가할 수 있습니다.

using Microsoft.Identity.Client;

그런 다음, 아래 코드를 사용하여 MSAL을 초기화합니다.

IPublicClientApplication publicClientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
                .Build();
여기서 설명
ClientId Microsoft Entra 관리 센터에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Microsoft Entra 관리 센터의 앱 개요 페이지에서 찾을 수 있습니다.

토큰 요청

MSAL에는 토큰 가져오기에 사용되는 두 가지 메서드인 AcquireTokenInteractiveAcquireTokenSilent가 있습니다.

대화형으로 사용자 토큰 가져오기

상황에 따라 사용자가 팝업 창을 통해 Microsoft ID 플랫폼과 상호 작용하여 자격 증명의 유효성을 검사하거나 동의를 제공해야 합니다. 예는 다음과 같습니다.

  • 처음으로 사용자가 애플리케이션에 로그인한 경우
  • 암호가 만료되어 사용자가 자격 증명을 다시 입력해야 할 경우
  • 애플리케이션이 사용자 동의가 필요한 리소스에 액세스를 요청하고 있는 경우
  • 2단계 인증이 필요한 경우
authResult = await app.AcquireTokenInteractive(_scopes)
                                      .ExecuteAsync();
여기서 설명
_scopes 요청된 범위(예: Microsoft Graph의 경우 { "user.read" }, 사용자 지정 웹 API의 경우 { "api://<Application ID>/access_as_user" })를 포함합니다.

자동으로 사용자 토큰 가져오기

사용자가 리소스에 액세스해야 할 때마다 자격 증명의 유효성을 검사할 필요가 없도록 하려고 합니다. 대부분은 사용자 개입 없이 토큰 가져오기 및 갱신을 자동으로 처리하려고 합니다. 초기 AcquireTokenInteractive 메서드 다음에 AcquireTokenSilent 메서드를 사용하여 토큰을 가져와서 보호된 리소스에 액세스할 수 있습니다.

var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await app.AcquireTokenSilent(scopes, firstAccount)
                                      .ExecuteAsync();
여기서 설명
scopes 요청된 범위(예: Microsoft Graph의 경우 { "user.read" }, 사용자 지정 웹 API의 경우 { "api://<Application ID>/access_as_user" })를 포함합니다.
firstAccount 캐시의 첫 번째 사용자를 지정합니다(MSAL은 단일 앱에서 여러 사용자를 지원함).

도움말 및 지원 

도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.

다음 단계

이 빠른 시작의 전체 설명을 포함하여 애플리케이션 및 새로운 기능 빌드에 대한 완전한 단계별 가이드를 제공하는 Windows 데스크톱 자습서를 사용해 보세요.