빠른 시작: 콘솔 앱의 ID를 사용하여 토큰 가져오기 및 Microsoft Graph API 호출

환영합니다! 아마도 기대했던 페이지는 아닐 것입니다. 수정 작업을 진행하는 동안 이 링크를 통해 올바른 문서로 이동해야 합니다.

빠른 시작: .NET 콘솔 앱에서 토큰 획득 및 Microsoft Graph 호출

이 문제를 해결하는 동안 불편을 끼쳐 드려 죄송하며 양해해 주셔서 감사합니다.

다음 빠른 시작에서는 코드 샘플을 사용하여 .NET 콘솔 애플리케이션이 액세스 토큰을 가져와 Microsoft Graph API를 호출하고 디렉터리에 사용자 목록을 표시하는 방법을 보여 줍니다. 또한 사용자 ID 대신 애플리케이션 ID를 사용하여 작업 또는 Windows 서비스를 실행하는 방법을 보여 줍니다. 이 빠른 시작의 샘플 콘솔 애플리케이션은 디먼 애플리케이션이기도 하므로 기밀 클라이언트 애플리케이션입니다.

필수 조건

.NET 6.0 SDK최소 요구 사항입니다.

빠른 시작 앱 다운로드 및 구성

1단계: Azure Portal에서 애플리케이션 구성

이 빠른 시작의 코드 샘플이 작동하려면 클라이언트 암호를 만들고 Graph API의 User.Read.All 애플리케이션 권한을 추가합니다.

이미 구성됨 이러한 특성을 사용하여 애플리케이션을 구성합니다.

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

Visual Studio 2022를 사용하여 프로젝트를 실행합니다.

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

참고 항목

Enter_the_Supported_Account_Info_Here

이제 애플리케이션을 실행하면 출력 HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation이 생성됩니다. 이 오류는 앱 전용 사용 권한에 애플리케이션에 동의하려면 디렉터리의 전역 관리영구자가 필요하기 때문에 발생합니다. 역할에 따라 다음 옵션 중 하나를 선택합니다.

글로벌 테넌트 관리자

전역 테넌트 관리자인 경우 API 사용 권한 페이지로 이동하여 Enter_the_Tenant_Name_Here에 대한 관리자 동의 부여를 선택합니다.

표준 사용자

테넌트의 표준 사용자의 경우 전역 관리주인에게 애플리케이션에 대한 관리자 동의를 부여하도록 요청합니다. 이렇게 하려면 관리자에게 다음 URL을 제공합니다.

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

이전 URL을 사용하여 앱에 동의를 허용한 후에 AADSTS50011: No reply address is registered for the application 오류가 표시될 수 있습니다. 이 오류는 애플리케이션과 URL에 리디렉션 URI가 없기 때문에 발생합니다. 이 메시지는 무시하고,

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

Visual Studio에서 F5 키를 눌러 애플리케이션을 실행합니다. 그렇지 않으면 명령 프롬프트, 콘솔 또는 터미널을 통해 애플리케이션을 실행합니다.

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

이 코드의 경우 다음과 같습니다.

  • {ProjectFolder}는 .zip 파일의 압축을 푼 폴더입니다. 예제는 C:\Azure-Samples\active-directory-dotnetcore-daemon-v2입니다.

결과적으로 Microsoft Entra ID의 사용자 목록이 표시되어야 합니다.

이 빠른 시작 애플리케이션에서는 클라이언트 암호를 사용하여 자체를 기밀 클라이언트로 식별합니다. 클라이언트 암호는 프로젝트 파일에 일반 텍스트 파일로 추가됩니다. 보안을 위해 애플리케이션을 프로덕션 애플리케이션으로 사용하는 방안을 고려하기 전에 클라이언트 암호 대신 인증서를 사용하는 것이 좋습니다. 인증서를 사용하는 방법에 대한 자세한 내용은 다음 지침을 참조하세요.

자세한 정보

이 섹션에서는 로그인 사용자에 필요한 코드에 대한 개요를 제공합니다. 이 개요는 코드의 > 작동 방식, 기본 인수 및 기존 .NET 콘솔 애플리케이션에 로그인을 추가하는 방법을 이해하는 데 유용할 수 있습니다.

샘플 작동 방법

이 빠른 시작에서 생성된 샘플 앱의 작동 방식을 보여 주는 다이어그램

Microsoft.Identity.Web.GraphServiceClient

Microsoft ID 웹(Microsoft.Identity.Web.TokenAcquisition 패키지에서)은 Microsoft ID 플랫폼으로 보호되는 API에 액세스하기 위해 토큰을 요청하는 데 사용되는 라이브러리입니다. 이 빠른 시작에서는 위임된 권한 대신 애플리케이션 소유의 ID를 사용하여 토큰을 요청합니다. 이 예제의 인증 흐름을 클라이언트 자격 증명 OAuth 흐름이라고 합니다. 클라이언트 자격 증명 흐름과 함께 MSAL.NET을 사용하는 방법에 대한 자세한 내용은 이 문서를 참조하세요. 이 빠른 시작의 디먼 앱이 Microsoft Graph를 호출하면 Microsoft Graph에 대한 자동으로 인증된 요청을 처리하고 자체적으로 Microsoft.Identity.Web.TokenAcquisition을 참조하는 Microsoft.Identity.Web.GraphServiceClient 패키지를 설치합니다.

Visual Studio 패키지 관리자 콘솔에서 다음 명령을 실행하여 Microsoft.Identity.Web.GraphServiceClient를 설치할 수 있습니다.

dotnet add package Microsoft.Identity.Web.GraphServiceClient

애플리케이션 초기화

다음 코드를 추가하여 Microsoft.Identity.Web에 대한 참조를 추가합니다.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

그런 후, 다음을 사용하여 앱을 초기화합니다.

// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the 
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();

이 코드는 appsettings.json 파일에 정의된 구성을 사용합니다.

{
   "AzureAd": {
       "Instance": "https://login.microsoftonline.com/",
       "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
       "ClientId": "[Enter here the ClientId for your application]",
       "ClientCredentials": [
           {
              "SourceType": "ClientSecret",
              "ClientSecret": "[Enter here a client secret for your application]"
           }
       ]
   }
}
요소 설명
ClientSecret Azure Portal에서 애플리케이션에 대해 생성된 클라이언트 암호입니다.
ClientId Azure Portal에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Azure Portal에 있는 앱의 개요 페이지에서 찾을 수 있습니다.
Instance (선택 사항) STS(보안 토큰 서비스)는 앱이 인증할 엔드포인트를 인스턴스화할 수 있습니다. 퍼블릭 클라우드의 경우 일반적으로 https://login.microsoftonline.com/입니다.
TenantId 테넌트 또는 테넌트 ID의 이름입니다.

자세한 내용은 ConfidentialClientApplication 참조 설명서에서 확인할 수 있습니다.

Microsoft Graph 호출

앱의 ID를 사용하여 토큰을 요청하려면 AcquireTokenForClient 메서드를 사용합니다.

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

도움말 및 지원 

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

다음 단계

디먼 애플리케이션에 대해 자세히 알아보려면 시나리오 개요를 참조하세요.