빠른 시작: 유니버설 Windows 플랫폼 앱에서 사용자 로그인 및 Microsoft Graph 호출
이 빠른 시작에서는 UWP(유니버설 Windows 플랫폼) 애플리케이션에서 사용자를 로그인하고 Microsoft Graph API를 호출하기 위한 액세스 토큰을 가져오는 방법을 보여 주는 코드 샘플을 다운로드하고 실행합니다.
자세한 내용은 샘플 작동 방식을 참조하세요.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Visual Studio
참고 항목
MSAL.NET 버전 4.61.0 이상에서는 UWP(유니버설 Windows 플랫폼), Xamarin Android 및 Xamarin iOS를 지원하지 않습니다. UWP 애플리케이션을 WINUI와 같은 최신 프레임워크로 마이그레이션하는 것이 좋습니다. Xamarin 및 UWP용 MSAL.NET의 향후 사용 중단 발표에서 사용 중단에 대해 자세히 알아보세요.
빠른 시작 앱 등록 및 다운로드
빠른 시작 애플리케이션을 시작하는 옵션은 두 가지가 있습니다.
옵션 1: 앱을 등록하고 자동 구성한 다음, 코드 샘플 다운로드
- AMicrosoft Entra 관리 센터 - 앱 등록빠른 시작 환경으로 이동합니다.
- 애플리케이션 이름을 입력하고 등록을 선택합니다.
- 지침에 따라 새 애플리케이션을 다운로드하고 자동으로 구성합니다.
옵션 2: 애플리케이션 및 코드 샘플을 등록하고 수동으로 구성
1단계: 애플리케이션 등록
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수도 있습니다.
애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 추가하려면 다음 단계를 따르세요.
- Microsoft Entra 관리 센터에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
- ID>애플리케이션>앱 등록으로 이동하고 신규 등록을 선택합니다.
- 애플리케이션에 대한 이름을 입력합니다(예:
UWP-App-calling-MsGraph
). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다. - 지원되는 계정 유형 섹션에서 모든 조직 디렉터리의 계정 및 개인 Microsoft 계정(예: Skype, Xbox, Outlook.com)을 선택합니다.
- 등록을 선택하여 애플리케이션을 만든 다음, 이후 단계에서 사용할 수 있도록 애플리케이션(클라이언트) ID를 기록합니다.
- 관리에서 인증을 선택합니다.
- 플랫폼 추가>모바일 및 데스크톱 애플리케이션을 차례로 선택합니다.
- 리디렉션 URI 아래에서
https://login.microsoftonline.com/common/oauth2/nativeclient
를 선택합니다. - 구성을 선택합니다.
2단계: 프로젝트 다운로드
팁
Windows의 경로 길이 제한으로 인해 발생하는 오류를 방지하려면 보관 파일의 압축을 풀거나 리포지토리를 드라이브 루트에 가까운 디렉터리에 복제하는 것이 좋습니다.
3단계: 프로젝트 구성
.zip 보관 파일을 드라이브 루트에 가까운 로컬 폴더에 추출합니다. 예를 들어 C:\Azure-Samples입니다.
Visual Studio에서 프로젝트를 엽니다. 메시지가 표시되면 유니버설 Windows 플랫폼 개발 워크로드 및 개별 SDK 구성 요소를 설치합니다.
MainPage.Xaml.cs에서
ClientId
변수의 값을 이전에 등록한 애플리케이션의 애플리케이션(클라이언트) ID로 변경합니다.private const string ClientId = "Enter_the_Application_Id_here";
Microsoft Entra 관리 센터(ID>애플리케이션>앱 등록>{앱 등록})에서 앱의 개요 창에서 애플리케이션(클라이언트) ID를 찾을 수 있습니다.
패키지에 대한 새 자체 서명된 테스트 인증서를 만든 다음, 이를 선택합니다.
- 솔루션 탐색기에서 Package.appxmanifest 파일을 두 번 클릭합니다.
- 패키징>인증서 선택...>만들기...를 차례로 선택합니다.
- 암호를 입력한 다음, 확인을 선택합니다. Native_UWP_V2_TemporaryKey.pfx라는 인증서가 만들어집니다.
- 확인을 선택하여 인증서 선택 대화 상자를 해제한 다음, 솔루션 탐색기에 Native_UWP_V2_TemporaryKey.pfx가 표시되는지 확인합니다.
- 솔루션 탐색기에서 마우스 오른쪽 단추로 Native_UWP_V2 프로젝트를 클릭하고, 속성을 선택합니다.
- 서명을 선택한 다음, 강력한 이름 키 파일 선택 드롭다운에서 만든 .pfx를 선택합니다.
4단계: 애플리케이션 실행
로컬 컴퓨터에서 샘플 애플리케이션을 실행합니다.
Visual Studio 도구 모음에서 올바른 플랫폼을 선택합니다(ARM이 아닌 x64 또는 x86). 대상 디바이스가 디바이스에서 로컬 컴퓨터로 변경됩니다.
디버그>디버그하지 않고 시작을 선택합니다.
이 작업을 수행하라는 메시지가 표시되면 먼저 개발자 모드를 사용하도록 설정한 다음, 디버그하지 않고 시작을 다시 사용하도록 설정해야 할 수 있습니다.
앱 창이 표시되면 Microsoft Graph API 호출 단추를 선택하고, 자격 증명을 입력하고, 애플리케이션에서 요청한 권한에 동의할 수 있습니다. 성공하면 애플리케이션에서 Microsoft Graph API에 대한 호출에서 가져온 일부 토큰 정보 및 데이터를 표시합니다.
샘플 작동 방법
MSAL.NET
MSAL(Microsoft.Identity.Client)은 사용자를 로그인하고 보안 토큰을 요청하는 데 사용되는 라이브러리입니다. 보안 토큰은 Microsoft ID 플랫폼으로 보호되는 API에 액세스하는 데 사용됩니다. Visual Studio의 패키지 관리자 콘솔에서 다음 명령을 실행하여 MSAL을 설치할 수 있습니다.
Install-Package Microsoft.Identity.Client
MSAL 초기화
다음 코드를 추가하여 MSAL에 대한 참조를 추가할 수 있습니다.
using Microsoft.Identity.Client;
그런 다음, 다음 코드를 사용하여 MSAL을 초기화합니다.
public static IPublicClientApplication PublicClientApp;
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
ClientId
값은 Microsoft Entra 관리 센터에 등록한 앱의 애플리케이션(클라이언트) ID입니다. 이 값은 Microsoft Entra 관리 센터의 앱 개요 페이지에서 찾을 수 있습니다.
토큰 요청
MSAL에는 UWP 앱에서 토큰 획득을 위한 두 가지 메서드인 AcquireTokenInteractive
및 AcquireTokenSilent
가 있습니다.
대화형으로 사용자 토큰 가져오기
상황에 따라 사용자가 자격 증명의 유효성을 검사하거나 동의를 제공하기 위해 팝업 창을 통해 Microsoft ID 플랫폼과 상호 작용해야 합니다. 예는 다음과 같습니다.
- 사용자가 애플리케이션에 처음으로 로그인하는 경우
- 암호가 만료되어 사용자가 자격 증명을 다시 입력해야 할 경우
- 애플리케이션이 사용자 동의가 필요한 리소스에 액세스를 요청하고 있는 경우
- 2단계 인증이 필요한 경우
authResult = await PublicClientApp.AcquireTokenInteractive(scopes)
.ExecuteAsync();
scopes
매개 변수에는 요청된 범위(예: Microsoft Graph의 경우 { "user.read" }
또는 사용자 지정 웹 API의 경우 { "api://<Application ID>/access_as_user" }
)가 포함됩니다.
자동으로 사용자 토큰 가져오기
초기 AcquireTokenInteractive
메서드 다음에 보호된 리소스에 액세스하는 토큰을 가져오려면 AcquireTokenSilent
메서드를 사용합니다. 사용자가 리소스에 액세스해야 할 때마다 자격 증명의 유효성을 검사할 필요가 없도록 하려고 합니다. 대부분의 경우 사용자 개입 없이 토큰 획득 및 갱신 처리
var accounts = await PublicClientApp.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
scopes
에는 요청된 범위(예: Microsoft Graph의 경우{ "user.read" }
또는 사용자 지정 웹 API의 경우{ "api://<Application ID>/access_as_user" }
)가 포함됩니다.firstAccount
는 캐시의 첫 번째 사용자 계정을 지정합니다(MSAL은 단일 앱에서 여러 사용자를 지원함).
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
이 빠른 시작의 전체 설명을 포함하여 애플리케이션 및 새로운 기능 빌드에 대한 완전한 단계별 가이드를 제공하는 Windows 데스크톱 자습서를 사용해 보세요.