다음을 통해 공유


웹 API를 호출하는 데스크톱 앱: 코드 구성

이제 애플리케이션을 만들었으므로 애플리케이션 좌표를 사용하여 코드를 구성하는 방법을 알아봅니다.

데스크톱 앱을 지원하는 Microsoft 라이브러리

다음 Microsoft 라이브러리는 데스크톱 앱을 지원합니다.

언어 / 프레임워크 프로젝트 설정
GitHub
Package(패키지) 가져오기
시작됨
사용자 로그인 웹 API 액세스 GA(일반 공급) 또는
공개 미리 보기1
전자 MSAL Node.js msal-node 라이브러리에서 사용자 로그인에 대한 ID 토큰을 요청할 수 있습니다. 라이브러리는 보호된 웹 API에 대한 액세스 토큰을 요청할 수 있습니다. 공개 프리뷰
Java MSAL4J msal4j 라이브러리에서 사용자 로그인에 대한 ID 토큰을 요청할 수 있습니다. 라이브러리는 보호된 웹 API에 대한 액세스 토큰을 요청할 수 있습니다. GA
macOS(Swift/Obj-C) iOS 및 macOS용 MSAL MSAL 자습서 라이브러리에서 사용자 로그인에 대한 ID 토큰을 요청할 수 있습니다. 라이브러리는 보호된 웹 API에 대한 액세스 토큰을 요청할 수 있습니다. GA
UWP MSAL.NET Microsoft.Identity.Client 자습서 라이브러리에서 사용자 로그인에 대한 ID 토큰을 요청할 수 있습니다. 라이브러리는 보호된 웹 API에 대한 액세스 토큰을 요청할 수 있습니다. GA
WPF MSAL.NET Microsoft.Identity.Client 자습서 라이브러리에서 사용자 로그인에 대한 ID 토큰을 요청할 수 있습니다. 라이브러리는 보호된 웹 API에 대한 액세스 토큰을 요청할 수 있습니다. GA

1 온라인 서비스에 대한 유니버설 사용 조건은 공개 미리 보기의 라이브러리에 적용됩니다.

퍼블릭 클라이언트 애플리케이션

코드 관점에서 볼 때 데스크톱 애플리케이션은 퍼블릭 클라이언트 애플리케이션입니다. 이 구성은 대화형 인증을 사용하는지 여부에 따라 약간 다릅니다.

MSAL.NET IPublicClientApplication을 빌드하고 조작해야 합니다.

IPublicClientApplication

코드 전용

다음 코드는 퍼블릭 클라이언트 애플리케이션을 인스턴스화하고 Microsoft Azure 퍼블릭 클라우드의 사용자는 다음 코드를 사용하여 회사 또는 학교 계정 또는 개인 Microsoft 계정으로 로그인합니다.

IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
    .Build();

앞서 살펴본 것처럼 대화형 인증 또는 디바이스 코드 흐름을 사용하려는 경우 .WithRedirectUri 한정자를 사용합니다.

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithDefaultRedirectUri()
        .Build();

구성 파일 사용

다음 코드는 구성 개체에서 퍼블릭 클라이언트 애플리케이션을 인스턴스화합니다. 이 애플리케이션은 프로그래밍 방식으로 채우거나 구성 파일에서 읽을 수 있습니다.

PublicClientApplicationOptions options = GetOptions(); // your own method
IPublicClientApplication app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
        .WithDefaultRedirectUri()
        .Build();

보다 정교한 구성

여러 한정자를 추가하여 애플리케이션 빌드를 정교하게 만들 수 있습니다. 예를 들어 애플리케이션을 국가별 클라우드(예: 여기에 표시된 미국 정부)의 다중 테넌트 애플리케이션으로 만들려면 다음과 같이 작성할 수 있습니다.

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithDefaultRedirectUri()
        .WithAadAuthority(AzureCloudInstance.AzureUsGovernment,
                         AadAuthorityAudience.AzureAdMultipleOrgs)
        .Build();

MSAL.NET에는 다음과 같은 Active Directory Federation Services 2019에 대한 한정자도 포함되어 있습니다.

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithAdfsAuthority("https://consoso.com/adfs")
        .Build();

마지막으로, Azure AD(Azure Active Directory) B2C 테넌트에 대한 토큰을 획득하려는 경우 다음 코드 조각에 표시된 것처럼 테넌트를 지정합니다.

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithB2CAuthority("https://fabrikamb2c.b2clogin.com/tfp/{tenant}/{PolicySignInSignUp}")
        .Build();

자세한 정보

MSAL.NET 데스크톱 애플리케이션을 구성하는 방법에 대한 자세한 정보:

  • PublicClientApplicationBuilder에서 사용할 수 있는 모든 한정자 목록은 참조 설명서 PublicClientApplicationBuilder를 참조하세요.
  • PublicClientApplicationOptions에서 제공하는 모든 옵션에 대한 설명은 참조 설명서의 PublicClientApplicationOptions를 참조하세요.

구성 옵션을 사용하는 전체 예제

다음 appsettings.json 구성 파일을 포함하는 .NET 콘솔 애플리케이션을 가정해 보겠습니다.

{
  "Authentication": {
    "AzureCloudInstance": "AzurePublic",
    "AadAuthorityAudience": "AzureAdMultipleOrgs",
    "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
  },

  "WebAPI": {
    "MicrosoftGraphBaseEndpoint": "https://graph.microsoft.com"
  }
}

.NET 제공 구성 프레임워크를 사용하여 이 파일에서 읽을 코드가 거의 없습니다.

public class SampleConfiguration
{
 /// <summary>
 /// Authentication options
 /// </summary>
 public PublicClientApplicationOptions PublicClientApplicationOptions { get; set; }

 /// <summary>
 /// Base URL for Microsoft Graph (it varies depending on whether the application runs
 /// in Microsoft Azure public clouds or national or sovereign clouds)
 /// </summary>
 public string MicrosoftGraphBaseEndpoint { get; set; }

 /// <summary>
 /// Reads the configuration from a JSON file
 /// </summary>
 /// <param name="path">Path to the configuration json file</param>
 /// <returns>SampleConfiguration as read from the json file</returns>
 public static SampleConfiguration ReadFromJsonFile(string path)
 {
  // .NET configuration
  IConfigurationRoot Configuration;
  var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile(path);
  Configuration = builder.Build();

  // Read the auth and graph endpoint configuration
  SampleConfiguration config = new SampleConfiguration()
  {
   PublicClientApplicationOptions = new PublicClientApplicationOptions()
  };
  Configuration.Bind("Authentication", config.PublicClientApplicationOptions);
  config.MicrosoftGraphBaseEndpoint =
  Configuration.GetValue<string>("WebAPI:MicrosoftGraphBaseEndpoint");
  return config;
 }
}

이제 애플리케이션을 만들려면 다음 코드를 작성합니다.

SampleConfiguration config = SampleConfiguration.ReadFromJsonFile("appsettings.json");
var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(config.PublicClientApplicationOptions)
           .WithDefaultRedirectUri()
           .Build();

.Build() 메서드를 호출하기 전에 앞에서 본 것처럼 .WithXXX 메서드에 대한 호출로 구성을 재정의할 수 있습니다.

다음 단계

본 시나리오의 다음 문서인 데스크톱 앱용 토큰 획득으로 이동합니다.