다음을 통해 공유


웹 API를 호출하는 디먼 앱을 구성하는 방법

웹 API를 호출하는 디먼 애플리케이션에 대한 코드를 구성하는 방법을 알아봅니다.

디먼 앱을 지원하는 Microsoft 라이브러리

다음 Microsoft 라이브러리는 디먼 앱을 지원합니다.

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

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

권한 구성

디먼 애플리케이션은 위임된 권한 대신 애플리케이션 권한을 사용합니다. 따라서 지원되는 계정 유형은 조직 디렉터리 또는 개인 Microsoft 계정(예: Skype, Xbox, Outlook.com)의 계정이 될 수 없습니다. Microsoft 개인 계정의 디먼 애플리케이션에 대한 동의 권한을 부여하는 테넌트 관리자가 없습니다. 내 조직의 계정 또는 모든 조직의 계정을 선택해야 합니다.

애플리케이션 구성에 지정된 권한은 테넌트로 지정(조직에 연결된 테넌트 ID 또는 도메인 이름을 지정)해야 합니다.

다중 테넌트 도구를 제공하려는 경우에도 서비스가 사용해야 하는 테넌트를 안정적으로 유추할 수 없으므로 이 흐름이 아닌 common 테넌트 ID 또는 organizations 도메인 이름을 사용해야 합니다.

애플리케이션 구성 및 인스턴스화

MSAL 라이브러리에서 클라이언트 자격 증명(비밀 또는 인증서)은 기밀 클라이언트 애플리케이션 생성의 매개 변수로 전달됩니다.

Important

애플리케이션이 서비스로 실행되는 콘솔 애플리케이션이더라도 디먼 애플리케이션의 경우에는 기밀 클라이언트 애플리케이션이어야 합니다.

구성 파일

구성 파일은 다음을 정의합니다.

  • 클라우드 인스턴스 및 테넌트 ID가 함께 ‘권한’을 구성합니다.
  • 애플리케이션 등록에서 가져온 클라이언트 ID입니다.
  • 클라이언트 암호 또는 인증서 중 하나입니다.

다음은 appsettings.json 파일의 구성을 정의하는 예제입니다. 이 예제는 GitHub의 .NET 콘솔 디먼 코드 샘플에서 가져옵니다.

{
    "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]"
            }
        ]
    }
}

클라이언트 암호 또는 워크로드 ID 페더레이션 자격 증명 대신 인증서를 제공합니다.

MSAL 애플리케이션 인스턴스화

MSAL 애플리케이션을 인스턴스화하려면 해당 언어에 따라 MSAL 패키지를 추가, 참조하거나 가져옵니다.

클라이언트 암호 또는 인증서(또는 고급 시나리오로 서명된 어설션)를 사용하는지에 따라 구성이 달라집니다.

패키지 참조

애플리케이션 코드에서 MSAL 패키지를 참조합니다.

애플리케이션에 Microsoft.Identity.Web.TokenAcquisition NuGet 패키지를 추가합니다. 또는 Microsoft Graph를 호출하려면 Microsoft.Identity.Web.GraphServiceClient 패키지를 추가합니다. 사용자의 프로젝트는 다음과 같을 수 있습니다. appsettings.json 파일을 출력 디렉터리에 복사해야 합니다.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Program.cs 파일에서 Microsoft.Identity.Web을 참조하도록 코드에 using 지시문을 추가합니다.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

클라이언트 암호를 사용하여 기밀 클라이언트 애플리케이션 인스턴스화

클라이언트 암호를 사용하여 기밀 클라이언트 애플리케이션을 인스턴스화하는 코드는 다음과 같습니다.

   class Program
    {
        static async Task Main(string[] _)
        {
            // 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에서 읽습니다.

클라이언트 인증서를 사용하여 기밀 클라이언트 애플리케이션 인스턴스화

인증서를 사용하여 애플리케이션을 빌드하는 코드는 다음과 같습니다.

코드 자체는 완전히 동일합니다. 인증서는 구성에 설명되어 있습니다. 인증서를 가져오는 방법에는 여러 가지가 있습니다. 자세한 내용은 https://aka.ms/ms-id-web-certificates를 참조하세요. KeyVault에서 인증서를 가져오는 방법은 다음과 같습니다. Microsoft ID는 Azure ID의 DefaultAzureCredential에 위임하고 KeyVault에서 인증서에 액세스할 수 있는 경우 관리 ID를 사용했습니다. 애플리케이션은 개발자 자격 증명을 사용하므로 로컬로 디버그할 수 있습니다.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

고급 시나리오: 클라이언트 어설션을 사용하여 기밀 클라이언트 애플리케이션 인스턴스화

기밀 클라이언트 애플리케이션은 클라이언트 암호 또는 인증서를 사용하는 것 외에도 클라이언트 어설션을 사용하여 해당 ID를 증명할 수 있습니다. 자세한 내용은 CredentialDescription을 참조하세요.

다음 단계

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