연습 - MSAL.NET을 사용하여 대화형 인증 구현

완료됨

이 연습에서는 다음 작업을 수행하는 방법을 배웁니다.

  • Microsoft ID 플랫폼에 애플리케이션 등록
  • MSAL.NET에서 PublicClientApplicationBuilder 클래스 사용
  • 콘솔 애플리케이션에서 대화형으로 토큰 획득

사전 요구 사항

새 애플리케이션 등록

  1. 포털에 로그인: https://portal.azure.com

  2. Microsoft Entra ID를 검색하여 선택합니다.

  3. 관리 아래에서 앱 등록>새 등록을 선택합니다.

  4. 애플리케이션 등록 페이지가 표시되면 애플리케이션의 등록 정보를 입력합니다.

    필드
    이름 az204appreg
    지원되는 계정 유형 이 조직 디렉터리의 계정만 선택
    리디렉션 URI(선택 사항) 퍼블릭 클라이언트/네이티브(모바일 및 데스크톱)를 선택하고 오른쪽에 있는 상자에 http://localhost를 입력합니다.
  5. 등록을 선택합니다.

이 작동하려면 다음 사항이 요구됩니다.Features and licenses for Microsoft Entra가 앱에 고유한 애플리케이션(클라이언트) ID를 할당하며, 애플리케이션의 개요 페이지가 표시됩니다.

콘솔 애플리케이션 설정

  1. 터미널을 선택하고 새 터미널을 선택하여 Visual Studio Code를 실행하고 터미널을 엽니다.

  2. 프로젝트에 대한 폴더를 만들고 폴더로 변경합니다.

    md az204-auth
    cd az204-auth
    
  3. .NET 콘솔 앱을 만듭니다.

    dotnet new console
    
  4. Visual Studio Code에서 az204-auth 폴더를 엽니다.

    code . -r
    

콘솔 앱 빌드

이 섹션에서는 프로젝트에 필요한 패키지와 코드를 추가합니다.

패키지 및 using 문 추가

  1. Visual Studio Code에서 터미널의 프로젝트에 Microsoft.Identity.Client 패키지를 추가합니다.

    dotnet add package Microsoft.Identity.Client
    
  2. Program.cs 파일을 열고 Microsoft.Identity.Client를 포함하고 비동기 작업을 활성화할 수 있도록 using 문을 추가합니다.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Main 메서드를 변경하여 async를 활성화합니다.

    public static async Task Main(string[] args)
    

대화형 인증에 대한 코드 추가

  1. 애플리케이션(클라이언트) 및 디렉터리(테넌트) ID를 저장하려면 두 개의 변수가 필요합니다. 포털에서 이러한 값을 복사할 수 있습니다. 다음 코드를 추가하고 문자열 값을 포털의 적절한 값으로 바꿉니다.

    private const string _clientId = "APPLICATION_CLIENT_ID";
    private const string _tenantId = "DIRECTORY_TENANT_ID";
    
  2. PublicClientApplicationBuilder 클래스를 사용하여 권한 부여 컨텍스트를 빌드합니다.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    코드 Description
    .Create ClientID에서 PublicClientApplicationBuilder를 만듭니다.
    .WithAuthority ADFS 서버에 해당하는 알려진 기관을 추가합니다. 코드에서 퍼블릭 클라우드를 지정하고 등록한 앱에 대한 테넌트를 사용합니다.

토큰 획득

az204appreg 앱을 등록하면 Microsoft Graph에 대한 API 권한 user.read가 자동으로 생성됩니다. 이 권한을 사용하여 토큰을 가져옵니다.

  1. 토큰 요청에 대한 권한 범위를 설정합니다. PublicClientApplicationBuilder 아래에 다음 코드를 추가합니다.

    string[] scopes = { "user.read" };
    
  2. 토큰을 요청하고 결과를 콘솔에 기록하는 코드를 추가합니다.

    AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    Console.WriteLine($"Token:\t{result.AccessToken}");
    

완료된 애플리케이션 검토

Program.cs 파일의 내용은 다음 예제와 유사합니다.

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace az204_auth
{
    class Program
    {
        private const string _clientId = "APPLICATION_CLIENT_ID";
        private const string _tenantId = "DIRECTORY_TENANT_ID";

        public static async Task Main(string[] args)
        {
            var app = PublicClientApplicationBuilder
                .Create(_clientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
                .WithRedirectUri("http://localhost")
                .Build(); 
            string[] scopes = { "user.read" };
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

            Console.WriteLine($"Token:\t{result.AccessToken}");
        }
    }
}

애플리케이션 실행

  1. Visual Studio Code 터미널에서 dotnet build를 실행하여 오류를 확인한 다음, dotnet run을 실행하여 앱을 실행합니다.

  2. 앱에 기본 브라우저가 열리면서 인증할 계정을 선택하라는 메시지가 표시됩니다. 나열된 계정이 여러 개이면 앱에서 사용하는 테넌트와 연결된 계정이 선택됩니다.

  3. 등록된 앱을 처음으로 인증하는 경우 사용자 계정에 연결된 데이터를 읽기 위해 앱을 승인하도록 요청하는 사용 권한 요청 알림을 받게 됩니다. 수락을 선택합니다.

    Select **Accept** to grant the permission.

  4. 콘솔에 아래 예제와 비슷한 결과가 표시됩니다.

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....