적용 대상: 인력 테넌트(자세한 정보)
이 문서에는 애플리케이션의 좌표로 코드를 구성하는 데 도움이 되는 지침이 포함되어 있습니다.
필수 조건
- 새 앱을 Microsoft Entra 관리 센터에 등록하고, 해당 조직 디렉터리의 계정만을 위해 구성합니다.
애플리케이션 등록에서 자세한 내용을 참조하세요. 다음 값을 애플리케이션 개요 페이지에서 기록하여 나중에 사용하십시오.
- 애플리케이션(클라이언트) ID
- 디렉터리(테넌트) ID
플랫폼 리디렉션 URI 추가
앱 등록에 앱 유형을 지정하려면 다음 단계를 수행합니다.
- 관리에서플랫폼>모바일 및 데스크톱 애플리케이션 추가 >을 선택합니다.
- 사용 중인 인증 방법에 따라 다음 옵션 중 하나를 선택합니다.
- 포함된 브라우저를 사용하는 앱의 경우 정확한 값을 사용합니다.
https://login.microsoftonline.com/common/oauth2/nativeclient
- 시스템 브라우저를 사용하는 앱의 경우 정확한 값을 사용합니다.
http://localhost
- macOS용 Objective-C 또는 Swift 앱:
msauth.<your.app.bundle.id>://auth
. - Node.js Electron 앱:
msal{Your_Application/Client_Id}://auth
- 포함된 브라우저를 사용하는 앱의 경우 정확한 값을 사용합니다.
비고
WAM(웹 인증 관리자) 앱의 경우 MSAL에는 리디렉션 URI가 필요하지 않습니다.
공개 클라이언트 플로우 활성화
디먼 애플리케이션에서 사용되는 클라이언트 자격 증명 흐름을 사용하여 디바이스 코드 흐름, 통합 Windows 인증 및 사용자 이름 및 암호를 기밀 클라이언트 애플리케이션과 구분하기 위해 리디렉션 URI가 필요하지 않으며 퍼블릭 클라이언트 애플리케이션으로 구성합니다. 이 구성을 수행하려면
앱을 퍼블릭 클라이언트로 식별하려면 다음 단계를 수행합니다.
관리에서 인증을 선택합니다.
고급 설정에서 공용 클라이언트 흐름 허용에 대해 예를 선택합니다.
저장을 선택하여 변경 내용을 저장합니다.
데스크톱 앱을 지원하는 Microsoft 라이브러리
다음 Microsoft 라이브러리는 데스크톱 앱을 지원합니다.
언어 / 프레임워크 | 프로젝트 진행 중 깃허브 |
패키지 | 가져오기 시작됨 |
사용자 로그인 | 웹 API 액세스 | GA(일반 공급) 또는 공개 미리 보기1 |
---|---|---|---|---|---|---|
전자 | MSAL Node.js | msal-node | — |
![]() |
![]() |
공개 프리뷰 |
자바 | MSAL4J | msal4j | — |
![]() |
![]() |
미국 조지아주 |
macOS(Swift/Obj-C) | iOS 및 macOS용 MSAL | MSAL | 자습서 |
![]() |
![]() |
미국 조지아주 |
유니버설 윈도우 플랫폼 (UWP) | MSAL.NET | Microsoft.Identity.Client | 자습서 |
![]() |
![]() |
미국 조지아주 |
WPF(Windows Presentation Foundation) | MSAL.NET | Microsoft.Identity.Client | 자습서 |
![]() |
![]() |
미국 조지아주 |
1온라인 서비스에 대한 유니버설 사용 조건은 공개 미리 보기의 라이브러리에 적용됩니다.
퍼블릭 클라이언트 애플리케이션
코드 관점에서 볼 때 데스크톱 애플리케이션은 퍼블릭 클라이언트 애플리케이션입니다. 이 구성은 대화형 인증을 사용하는지 여부에 따라 약간 다릅니다.
MSAL.NET 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
메서드에 대한 호출로 구성을 재정의할 수 있습니다.
다음 단계
본 시나리오의 다음 문서인 데스크톱 앱용 토큰 획득으로 이동합니다.