빠른 시작: 콘솔 앱의 ID를 사용하여 토큰 가져오기 및 Microsoft Graph API 호출
다음 빠른 시작에서는 코드 샘플을 사용하여 .NET Core 콘솔 애플리케이션이 액세스 토큰을 가져와서 Microsoft Graph API 호출하고 디렉터리에 사용자 목록을 표시하는 방법을 보여 줍니다. 또한 사용자 ID 대신 애플리케이션 ID를 사용하여 작업 또는 Windows 서비스를 실행하는 방법을 보여 줍니다. 이 빠른 시작의 샘플 콘솔 애플리케이션도 디먼 애플리케이션이므로 기밀 클라이언트 애플리케이션입니다.
다음 다이어그램에서는 샘플 앱의 작동 방식을 보여 줍니다.
필수 조건
이 빠른 시작에는 .NET Core 6.0 SDK가 필요합니다.
앱 등록 및 다운로드
애플리케이션은 자동 또는 수동 구성을 사용하여 빌드할 수 있습니다.
자동 구성
앱을 등록하고 자동으로 구성한 다음 코드 샘플을 다운로드하려면 다음 단계를 수행합니다.
- 앱 등록을 위한 Azure Portal 페이지로 이동합니다.
- 애플리케이션 이름을 입력하고 등록을 선택합니다.
- 지침에 따라 한 번의 클릭으로 새 애플리케이션을 다운로드하고 자동으로 구성합니다.
수동 구성
애플리케이션 및 코드 샘플을 수동으로 구성하려면 다음 절차를 사용합니다.
1단계: 애플리케이션 등록
애플리케이션을 등록하고 솔루션에 등록 정보를 수동으로 추가하려면 다음 단계를 수행합니다.
- Azure Portal에 로그인합니다.
- 여러 테넌트 액세스를 사용할 수 있는 경우 상단 메뉴의 디렉터리 + 구독 필터
를 사용하여 애플리케이션을 등록할 테넌트로 전환합니다.
- Azure Active Directory를 검색하고 선택합니다.
- 관리 아래에서 앱 등록>새 등록을 선택합니다.
- 이름에 애플리케이션의 이름을 입력합니다. 예를 들어 Daemon-console을 입력합니다. 앱 사용자에게 이 이름이 표시되며 나중에 변경할 수 있습니다.
- 등록을 선택하여 애플리케이션을 만듭니다.
- 관리에서 인증서 & 비밀을 선택합니다.
- 클라이언트 암호에서 새 클라이언트 암호를 선택하고 이름을 입력한 다음, 추가를 선택합니다. 이후 단계에서 사용할 수 있도록 안전한 위치에 비밀 값을 기록합니다.
- 관리에서 API 권한>권한 추가를 선택합니다. Microsoft Graph를 선택합니다.
- 애플리케이션 권한을 선택합니다.
- 사용자 노드 아래에서 User.Read.All을 선택한 다음, 권한 추가를 선택합니다.
2단계: Visual Studio 프로젝트 다운로드
이 프로젝트는 Visual Studio 또는 Mac용 Visual Studio 실행할 수 있으며 코드 샘플에서 다운로드할 수 있습니다.
팁
Windows의 경로 길이 제한으로 인해 발생하는 오류를 방지하려면 보관 파일의 압축을 풀거나 리포지토리를 드라이브 루트에 가까운 디렉터리에 복제하는 것이 좋습니다.
3단계: Visual Studio 프로젝트 구성
Windows의 경로 길이 제한으로 인한 오류를 방지하기 위해 디스크 루트에 가까운 로컬 폴더에 .zip 파일을 추출합니다. 예를 들어 파일의 압축을 C:\Azure-Samples에 풉니다.
Visual Studio: 1-Call-MSGraph\daemon-console.sln에서 솔루션을 엽니다(선택 사항).
appsettings.json에서 ,
ClientId
및ClientSecret
의Tenant
값을 바꿉니다. 애플리케이션(클라이언트) ID 및 디렉터리(테넌트) ID의 값은 Azure Portal 앱의 개요 페이지에서 찾을 수 있습니다."TenantId": "Enter_the_Tenant_Id_Here", "ClientId": "Enter_the_Application_Id_Here", "ClientSecret": "Enter_the_Client_Secret_Here"
코드에서:
Enter_the_Application_Id_Here
는 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다.Enter_the_Tenant_Id_Here
를 테넌트 ID 또는 테넌트 이름으로 바꿉니다(예:contoso.microsoft.com
).Enter_the_Client_Secret_Here
를 1단계에서 만든 클라이언트 암호로 바꿉니다. 새 키를 생성하려면 인증서 & 비밀 페이지로 이동합니다.
4단계: 관리자 동의
이제 애플리케이션을 실행하면 출력 HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation
이 생성됩니다. 이 오류는 앱 전용 권한을 사용하려면 디렉터리의 전역 관리자가 애플리케이션에 동의해야 하기 때문에 발생합니다. 역할에 따라 다음 옵션 중 하나를 선택합니다.
글로벌 테넌트 관리자
전역 테넌트 관리자의 경우 Azure Portal 엔터프라이즈 애플리케이션으로 이동합니다. 앱 등록을 선택하고 왼쪽 창의 보안 섹션에서 사용 권한을 선택합니다. 그런 다음 {테넌트 이름}에 대한 관리자 동의 부여 라는 레이블이 지정된 큰 단추를 선택합니다(여기서 {테넌트 이름} 은 디렉터리의 이름임).
표준 사용자
테넌트 표준 사용자의 경우 전역 관리자에게 애플리케이션에 대한 관리자 동의를 부여하도록 요청합니다. 이렇게 하려면 관리자에게 다음 URL을 제공합니다.
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
URL에서 다음을 수행합니다.
Enter_the_Tenant_Id_Here
를 테넌트 ID 또는 테넌트 이름으로 바꿉니다(예:contoso.microsoft.com
).Enter_the_Application_Id_Here
는 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다.
위의 URL을 사용하여 앱에 동의한 후에 오류가 AADSTS50011: No reply address is registered for the application
표시될 수 있습니다. 이 오류는 애플리케이션과 URL에 리디렉션 URI가 없기 때문에 발생합니다. 이 메시지는 무시하고,
5단계: 애플리케이션 실행
Visual Studio에서 F5 키를 눌러 애플리케이션을 실행합니다. 그렇지 않으면 명령 프롬프트, 콘솔 또는 터미널을 통해 애플리케이션을 실행합니다.
cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run
이 코드의 경우 다음과 같습니다.
{ProjectFolder}
는 .zip 파일의 압축을 푼 폴더입니다. 예제는C:\Azure-Samples\active-directory-dotnetcore-daemon-v2
입니다.
결과적으로 Azure Active Directory의 사용자 수가 표시됩니다.
이 빠른 시작 애플리케이션에서는 클라이언트 암호를 사용하여 자체를 기밀 클라이언트로 식별합니다. 클라이언트 암호는 프로젝트 파일에 일반 텍스트 파일로 추가됩니다. 보안상의 이유로 애플리케이션을 프로덕션 애플리케이션으로 고려하기 전에 클라이언트 암호 대신 인증서를 사용하는 것이 좋습니다. 인증서를 사용하는 방법에 대한 자세한 내용은 다음 지침을 참조하세요.
자세한 정보
이 섹션에서는 사용자를 로그인하는 데 필요한 코드의 개요를 제공합니다. 개요는 코드 작동 방식, 기본 인수 및 기존 .NET Core 콘솔 애플리케이션에 로그인을 추가하는 방법을 이해하는 데 유용할 수 있습니다.
Microsoft.Identity.Web.MicrosoftGraph
Microsoft Identity Web(Microsoft.Identity.Web.TokenAcquisition 패키지)은 Microsoft ID 플랫폼 의해 보호되는 API에 액세스하기 위한 토큰을 요청하는 데 사용되는 라이브러리입니다. 이 빠른 시작에서는 위임된 권한 대신 애플리케이션 소유의 ID를 사용하여 토큰을 요청합니다. 이 예제의 인증 흐름을 클라이언트 자격 증명 OAuth 흐름이라고 합니다. 클라이언트 자격 증명 흐름과 함께 MSAL.NET을 사용하는 방법에 대한 자세한 내용은 이 문서를 참조하세요. 이 빠른 시작의 디먼 앱이 Microsoft Graph를 호출하는 경우 Microsoft Graph에 대해 자동으로 인증된 요청을 처리하고 Microsoft.Identity.Web.TokenAcquisition 자체를 참조하는 Microsoft.Identity.Web.MicrosoftGraph 패키지를 설치합니다.
Visual Studio 패키지 관리자 콘솔에서 다음 명령을 실행하여 Microsoft.Identity.Web.MicrosoftGraph를 설치할 수 있습니다.
dotnet add package Microsoft.Identity.Web.MicrosoftGraph
애플리케이션 초기화
다음 코드를 추가하여 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]"
}
]
}
}
요소 | Description |
---|---|
ClientSecret |
Azure Portal에서 애플리케이션에 대해 생성된 클라이언트 암호입니다. |
ClientId |
Azure Portal에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Azure Portal 앱의 개요 페이지에서 찾을 수 있습니다. |
Instance |
(선택 사항) STS(보안 토큰 서비스)는 앱이 인증할 엔드포인트를 instance 수 있습니다. 퍼블릭 클라우드의 경우 일반적으로 https://login.microsoftonline.com/ 입니다. |
TenantId |
테넌트 또는 테넌트 ID의 이름입니다. |
자세한 내용은 ConfidentialClientApplication
참조 설명서에서 확인할 수 있습니다.
Microsoft Graph 호출
앱의 ID를 사용하여 토큰을 요청하려면 AcquireTokenForClient
메서드를 사용합니다.
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.Request()
.WithAppOnly()
.GetAsync();
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
디먼 애플리케이션에 대해 자세히 알아보려면 시나리오 개요를 참조하세요.
이 빠른 시작에서는 Python 애플리케이션이 앱의 ID를 사용하여 액세스 토큰을 가져와 Microsoft Graph API를 호출하고 디렉터리에 사용자 목록을 표시하는 방법을 보여주는 코드 샘플을 다운로드하고 실행합니다. 코드 샘플에서는 사용자의 ID 대신 애플리케이션 ID를 사용하여 무인 작업 또는 Windows 서비스를 실행할 수 있는 방법을 보여줍니다.
필수 구성 요소
이 샘플을 실행하려면 다음이 필요합니다.
빠른 시작 앱 등록 및 다운로드
1단계: 애플리케이션 등록
애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 디렉터리 + 구독 필터
를 사용하여 애플리케이션을 등록하려는 테넌트로 전환합니다.
- Azure Active Directory를 검색하고 선택합니다.
- 관리 아래에서 앱 등록>새 등록을 선택합니다.
- 애플리케이션에 대한 이름을 입력합니다(예:
Daemon-console
). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다. - 등록을 선택합니다.
- 관리에서 인증서 & 비밀을 선택합니다.
- 클라이언트 암호에서 새 클라이언트 암호를 선택하고 이름을 입력한 다음, 추가를 선택합니다. 이후 단계에서 사용할 수 있도록 안전한 위치에 비밀 값을 기록합니다.
- 관리에서 API 권한>권한 추가를 선택합니다. Microsoft Graph를 선택합니다.
- 애플리케이션 권한을 선택합니다.
- 사용자 노드 아래에서 User.Read.All을 선택한 다음, 권한 추가를 선택합니다.
2단계: Python 프로젝트 다운로드
3단계: Python 프로젝트 구성
zip 파일을 디스크 루트에 가까운 로컬 폴더(예: C:\Azure-Samples)로 추출합니다.
하위 폴더 1-Call-MsGraph-WithSecret으로 이동합니다.
parameters.json을 편집하고
authority
,client_id
및secret
필드의 값을 다음 코드 조각으로 바꿉니다."authority": "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here", "client_id": "Enter_the_Application_Id_Here", "secret": "Enter_the_Client_Secret_Here"
위치:
Enter_the_Application_Id_Here
- 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.Enter_the_Client_Secret_Here
- 1단계에서 만든 클라이언트 비밀로 이 값을 바꿉니다.
팁
애플리케이션(클라이언트) ID, 디렉터리(테넌트) ID의 값을 찾아보려면 Azure Portal에서 앱의 개요 페이지로 이동합니다. 새 키를 생성하려면 인증서 & 비밀 페이지로 이동합니다.
4단계: 관리자 동의
이 시점에서 애플리케이션을 실행하려고 시도하면 HTTP 403 - 사용할 수 없음 오류: Insufficient privileges to complete the operation
메시지가 표시됩니다. 모든 앱 전용 권한에는 관리자 동의가 필요하기 때문에 이 오류가 발생합니다. 디렉터리의 글로벌 관리자가 애플리케이션에 동의해야 합니다. 역할에 따라 아래 옵션 중 하나를 선택합니다.
글로벌 테넌트 관리자
전역 테넌트 관리자인 경우 Azure Portal 앱 등록API 권한 페이지로 이동하여 {테넌트 이름}에 대한 관리자 동의 부여를 선택합니다(여기서 {테넌트 이름}은 디렉터리의 이름임).
표준 사용자
테넌트의 표준 사용자인 경우 전역 관리자에게 애플리케이션에 대한 관리자 동의를 부여하도록 요청합니다. 이렇게 하려면 관리자에게 다음 URL을 제공합니다.
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
위치:
Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.Enter_the_Application_Id_Here
- 이전에 등록한 애플리케이션의 애플리케이션(클라이언트) ID 입니다.
5단계: 애플리케이션 실행
이 샘플의 종속성을 한 번 설치해야 합니다.
pip install -r requirements.txt
그런 다음, 명령 프롬프트 또는 콘솔을 통해 애플리케이션을 실행합니다.
python confidential_client_secret_sample.py parameters.json
콘솔에서 Azure AD 디렉터리의 사용자 목록을 나타내는 일부 Json 조각을 출력하는 것을 볼 수 있습니다.
중요
이 빠른 시작 애플리케이션에서는 클라이언트 비밀을 사용하여 자체를 기밀 클라이언트로 식별합니다. 클라이언트 비밀은 보안상의 이유로 프로젝트 파일에 일반 텍스트로 추가되므로, 이 애플리케이션을 프로덕션 애플리케이션으로 사용하는 방안을 고려하기 전에 클라이언트 비밀 대신 인증서를 사용하는 것이 좋습니다. 인증서를 사용하는 방법에 대한 자세한 내용은 이 샘플에 대한 동일한 GitHub 리포지토리의 두 번째 폴더 2-Call-MsGraph-WithCertificate에 있는 다음 지침을 참조하세요.
자세한 정보
MSAL Python
MSAL Python은 사용자를 로그인하고 Microsoft ID 플랫폼으로 보호되는 API 액세스에 사용되는 토큰을 요청할 때 사용되는 라이브러리입니다. 설명한 것과 같이 이 빠른 시작은 위임된 권한 대신 애플리케이션 소유 ID를 사용하여 토큰을 요청합니다. 이 경우에 사용되는 인증 흐름을 클라이언트 자격 증명 oauth 흐름 이라고 합니다. MSAL Python을 디먼 앱과 함께 사용하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.
다음 pip 명령을 실행하여 MSAL Python을 설치할 수 있습니다.
pip install msal
MSAL 초기화
다음 코드를 추가하여 MSAL에 대한 참조를 추가할 수 있습니다.
import msal
그런 다음, 아래 코드를 사용하여 MSAL을 초기화합니다.
app = msal.ConfidentialClientApplication(
config["client_id"], authority=config["authority"],
client_credential=config["secret"])
위치: Description config["secret"]
Azure Portal에서 애플리케이션에 대한 클라이언트 암호가 생성됩니다. config["client_id"]
Azure Portal에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Azure Portal에서 앱의 개요 페이지에 있습니다. config["authority"]
사용자가 인증하는 STS 엔드포인트 일반적으로 퍼블릭 클라우드에 대한 https://login.microsoftonline.com/{tenant}
입니다. 여기서 {tenant}는 테넌트의 이름 또는 테넌트 ID입니다.
자세한 내용은 ConfidentialClientApplication
에 대한 참조 설명서를 참조하세요.
토큰 요청
앱의 ID를 사용하여 토큰을 요청하려면 AcquireTokenForClient
메서드를 사용합니다.
result = None
result = app.acquire_token_silent(config["scope"], account=None)
if not result:
logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
result = app.acquire_token_for_client(scopes=config["scope"])
위치: Description config["scope"]
요청된 범위를 포함합니다. 기밀 클라이언트의 경우 요청되는 범위가 Azure Portal에서 설정된 앱 개체에서 정적으로 정의된 것임을 나타내기 위해 {Application ID URI}/.default
와 유사한 양식을 사용해야 합니다(Microsoft Graph의 경우{Application ID URI}
는https://graph.microsoft.com
을 가리킴). 사용자 지정 웹 API의 경우{Application ID URI}
는 Azure Portal의 앱 등록에서 API 노출 섹션 아래에 정의됩니다.
자세한 내용은 AcquireTokenForClient
에 대한 참조 설명서를 참조하세요.
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
디먼 애플리케이션에 대해 자세히 알아보려면 시나리오 방문 페이지를 참조하세요.
이 빠른 시작에서는 Node.js 콘솔 애플리케이션이 앱의 ID를 사용하여 액세스 토큰을 가져와 Microsoft Graph API를 호출하고 디렉터리에 사용자 목록을 표시하는 방법을 보여 주는 코드 샘플을 다운로드하고 실행합니다. 코드 샘플에서는 사용자의 ID 대신 애플리케이션 ID를 사용하여 무인 작업 또는 Windows 서비스를 실행할 수 있는 방법을 보여줍니다.
이 빠른 시작에서는 클라이언트 자격 증명 부여와 함께 Node.js용 Microsoft 인증 라이브러리(MSAL 노드)를 사용합니다.
사전 요구 사항
- Node.JS
- Visual Studio Code 또는 다른 코드 편집기
샘플 애플리케이션 등록 및 다운로드
시작하려면 아래의 단계를 따르세요.
1단계: 애플리케이션 등록
애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 디렉터리 + 구독 필터
를 사용하여 애플리케이션을 등록하려는 테넌트로 전환합니다.
- Azure Active Directory를 검색하고 선택합니다.
- 관리 아래에서 앱 등록>새 등록을 선택합니다.
- 애플리케이션에 대한 이름을 입력합니다(예:
msal-node-cli
). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다. - 등록을 선택합니다.
- 관리에서 인증서 & 비밀을 선택합니다.
- 클라이언트 암호에서 새 클라이언트 암호를 선택하고 이름을 입력한 다음, 추가를 선택합니다. 이후 단계에서 사용할 수 있도록 안전한 위치에 비밀 값을 기록합니다.
- 관리에서 API 권한>권한 추가를 선택합니다. Microsoft Graph를 선택합니다.
- 애플리케이션 권한을 선택합니다.
- 사용자 노드 아래에서 User.Read.All을 선택한 다음, 권한 추가를 선택합니다.
2단계: Node.js 샘플 프로젝트 다운로드
3단계: Node.js 샘플 프로젝트 구성
- zip 파일을 디스크 루트에 가까운 로컬 폴더(예: C:/Azure-Samples)로 추출합니다.
- .env를 편집하고
TENANT_ID
,CLIENT_ID
및CLIENT_SECRET
필드의 값을 다음 코드 조각으로 바꿉니다.
"TENANT_ID": "Enter_the_Tenant_Id_Here",
"CLIENT_ID": "Enter_the_Application_Id_Here",
"CLIENT_SECRET": "Enter_the_Client_Secret_Here"
위치:
Enter_the_Application_Id_Here
- 이전에 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 ID는 Azure Portal에 있는 앱 등록 개요 창에서 확인합니다.Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다. 이러한 값은 Azure Portal에 있는 앱 등록 개요 창에서 확인합니다.Enter_the_Client_Secret_Here
- 이 값을 이전에 만든 클라이언트 암호로 바꿉니다. 새 키를 생성하려면 Azure Portal의 앱 등록 설정에서 인증서 & 비밀을 사용합니다.
소스 코드에서 일반 텍스트 비밀을 사용하면 애플리케이션에 대한 보안 위험을 가중시킵니다. 이 빠른 시작의 샘플은 일반 텍스트 클라이언트 암호를 사용하지만 단순성을 위해서만 사용됩니다. 기밀 클라이언트 애플리케이션(특히 프로덕션 환경에 배포하려는 앱)에는 클라이언트 암호 대신 인증서 자격 증명을 사용하는 것이 좋습니다.
- .env를 편집하고 Azure AD 및 Microsoft Graph 엔드포인트를 다음 값으로 바꿉니다.
- Azure AD 엔드포인트의 경우
Enter_the_Cloud_Instance_Id_Here
를https://login.microsoftonline.com
으로 바꿉니다. - Microsoft Graph 엔드포인트의 경우
Enter_the_Graph_Endpoint_Here
를https://graph.microsoft.com/
으로 바꿉니다.
- Azure AD 엔드포인트의 경우
4단계: 관리자 동의
이 시점에서 애플리케이션을 실행하려고 시도하면 HTTP 403 - 사용할 수 없음 오류: Insufficient privileges to complete the operation
메시지가 표시됩니다. 모든 앱 전용 권한에는 관리자 동의가 필요하기 때문에 이 오류가 발생합니다. 디렉터리의 전역 관리자가 애플리케이션에 동의해야 합니다. 역할에 따라 아래 옵션 중 하나를 선택합니다.
글로벌 테넌트 관리자
글로벌 테넌트 관리자인 경우 Azure Portal의 애플리케이션 등록에서 API 사용 권한 페이지로 이동하고 {테넌트 이름}에 대한 관리자 동의 부여를 선택합니다. 여기서 {테넌트 이름}은 디렉터리의 이름입니다.
표준 사용자
테넌트의 표준 사용자인 경우 전역 관리자에게 애플리케이션에 대한 관리자 동의 부여를 요청해야 합니다. 이렇게 하려면 관리자에게 다음 URL을 제공합니다.
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
위치:
Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.Enter_the_Application_Id_Here
- 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.
5단계: 애플리케이션 실행
명령 프롬프트 또는 콘솔에서 package.json
이 있는 샘플의 루트 폴더를 찾습니다. 처음으로 실행하기 전에 샘플 앱에 필요한 종속성을 설치해야 합니다.
npm install
그런 다음, 명령 프롬프트 또는 콘솔을 통해 애플리케이션을 실행합니다.
node . --op getUsers
콘솔에서 Azure AD 디렉터리의 사용자 목록을 나타내는 일부 JSON 조각을 출력하는 것을 볼 수 있습니다.
코드 정보
아래에서는 애플리케이션 예제의 몇 가지 중요한 측면에 대해 설명합니다.
MSAL 노드
MSAL Node는 사용자를 로그인시키고 Microsoft ID 플랫폼으로 보호되는 API 액세스에 사용되는 토큰을 요청할 때 사용되는 라이브러리입니다. 설명한 것과 같이 이 빠른 시작은 위임된 권한 대신 애플리케이션 권한(애플리케이션 소유 ID 사용)으로 토큰을 요청합니다. 이 경우에 사용되는 인증 흐름을 OAuth 2.0 클라이언트 자격 증명 흐름이라고 합니다. 디먼 앱에서 MSAL Node를 사용하는 방법에 대한 자세한 내용은 시나리오: 디먼 애플리케이션을 참조하세요.
다음 npm 명령을 실행하여 MSAL Node를 설치할 수 있습니다.
npm install @azure/msal-node --save
MSAL 초기화
다음 코드를 추가하여 MSAL에 대한 참조를 추가할 수 있습니다.
const msal = require('@azure/msal-node');
그런 다음, 아래 코드를 사용하여 MSAL을 초기화합니다.
const msalConfig = {
auth: {
clientId: "Enter_the_Application_Id_Here",
authority: "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
clientSecret: "Enter_the_Client_Secret_Here",
}
};
const cca = new msal.ConfidentialClientApplication(msalConfig);
위치: | Description |
---|---|
clientId |
Azure Portal에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Azure Portal에서 앱의 개요 페이지에 있습니다. |
authority |
사용자가 인증하는 STS 엔드포인트 일반적으로 퍼블릭 클라우드에 대한 https://login.microsoftonline.com/{tenant} 입니다. 여기서 {tenant}는 테넌트의 이름 또는 테넌트 ID입니다. |
clientSecret |
Azure Portal에서 애플리케이션에 대한 클라이언트 암호가 생성됩니다. |
자세한 내용은 ConfidentialClientApplication
에 대한 참조 설명서를 참조하세요.
토큰 요청
앱의 ID를 사용하여 토큰을 요청하려면 acquireTokenByClientCredential
메서드를 사용합니다.
const tokenRequest = {
scopes: [ 'https://graph.microsoft.com/.default' ],
};
const tokenResponse = await cca.acquireTokenByClientCredential(tokenRequest);
위치: | Description |
---|---|
tokenRequest |
요청된 범위를 포함합니다. 기밀 클라이언트의 경우 요청되는 범위가 Azure Portal에서 설정된 앱 개체에서 정적으로 정의된 것임을 나타내기 위해 {Application ID URI}/.default 와 유사한 양식을 사용해야 합니다(Microsoft Graph의 경우 {Application ID URI} 는 https://graph.microsoft.com 을 가리킴). 사용자 지정 웹 API의 경우 {Application ID URI} 는 Azure Portal의 애플리케이션 등록에서 API 노출 섹션 아래에 정의됩니다. |
tokenResponse |
응답에는 요청된 범위에 대한 액세스 토큰이 포함되어 있습니다. |
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
MSAL Node를 사용한 디먼/콘솔 앱 개발에 대해 자세히 알아보려면 다음 자습서를 참조하세요.
이 빠른 시작에서는 Java 애플리케이션이 앱의 ID를 사용하여 액세스 토큰을 가져와 Microsoft Graph API를 호출하고 디렉터리에 사용자 목록을 표시하는 방법을 보여주는 코드 샘플을 다운로드하고 실행합니다. 코드 샘플에서는 사용자의 ID 대신 애플리케이션 ID를 사용하여 무인 작업 또는 Windows 서비스를 실행할 수 있는 방법을 보여줍니다.
필수 구성 요소
이 샘플을 실행하려면 다음이 필요합니다.
빠른 시작 앱 등록 및 다운로드
빠른 시작 애플리케이션을 시작하는 옵션은 두 가지가 있습니다. 기본(아래 옵션 1) 및 수동(옵션 2)
옵션 1: 앱을 등록하고 자동 구성한 다음, 코드 샘플 다운로드
- Azure Portal - 앱 등록 빠른 시작 환경으로 이동합니다.
- 애플리케이션 이름을 입력하고 등록을 선택합니다.
- 지침에 따라 클릭 한 번으로 새 애플리케이션을 다운로드하고 자동으로 구성합니다.
옵션 2: 애플리케이션 및 코드 샘플을 등록하고 수동으로 구성
1단계: 애플리케이션 등록
애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 디렉터리 + 구독 필터
를 사용하여 애플리케이션을 등록하려는 테넌트로 전환합니다.
- Azure Active Directory를 검색하고 선택합니다.
- 관리 아래에서 앱 등록>새 등록을 선택합니다.
- 애플리케이션에 대한 이름을 입력합니다(예:
Daemon-console
). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다. - 등록을 선택합니다.
- 관리에서 인증서 & 비밀을 선택합니다.
- 클라이언트 암호에서 새 클라이언트 암호를 선택하고 이름을 입력한 다음, 추가를 선택합니다. 이후 단계에서 사용할 수 있도록 안전한 위치에 비밀 값을 기록합니다.
- 관리에서 API 권한>권한 추가를 선택합니다. Microsoft Graph를 선택합니다.
- 애플리케이션 권한을 선택합니다.
- 사용자 노드 아래에서 User.Read.All을 선택한 다음, 권한 추가를 선택합니다.
2단계: Java 프로젝트 다운로드
3단계: Java 프로젝트 구성
- zip 파일을 디스크 루트에 가까운 로컬 폴더(예: C:\Azure-Samples)로 추출합니다.
- msal-client-credential-secret 하위 폴더로 이동합니다.
- src\main\resources\application.properties를 편집하고
AUTHORITY
,CLIENT_ID
및SECRET
필드의 값을 다음 코드 조각으로 바꿉니다.
AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
CLIENT_ID=Enter_the_Application_Id_Here
SECRET=Enter_the_Client_Secret_Here
위치:
Enter_the_Application_Id_Here
- 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.Enter_the_Client_Secret_Here
- 1단계에서 만든 클라이언트 비밀로 이 값을 바꿉니다.
팁
애플리케이션(클라이언트) ID, 디렉터리(테넌트) ID의 값을 찾아보려면 Azure Portal에서 앱의 개요 페이지로 이동합니다. 새 키를 생성하려면 인증서 & 비밀 페이지로 이동합니다.
4단계: 관리자 동의
이 시점에서 애플리케이션을 실행하려고 시도하면 HTTP 403 - 사용할 수 없음 오류: Insufficient privileges to complete the operation
메시지가 표시됩니다. 모든 앱 전용 권한에는 관리자 동의가 필요하기 때문에 이 오류가 발생합니다. 디렉터리의 글로벌 관리자가 애플리케이션에 동의해야 합니다. 역할에 따라 아래 옵션 중 하나를 선택합니다.
글로벌 테넌트 관리자
글로벌 테넌트 관리자인 경우 Azure Portal의 앱 등록에서 API 사용 권한 페이지로 이동하고 {테넌트 이름}에 대한 관리자 동의 부여(여기서 {테넌트 이름}은 디렉터리의 이름)를 선택합니다.
표준 사용자
테넌트의 표준 사용자인 경우 글로벌 관리자에게 애플리케이션에 대한 관리자 동의 부여를 요청해야 합니다. 이렇게 하려면 관리자에게 다음 URL을 제공합니다.
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
위치:
Enter_the_Tenant_Id_Here
- 이 값을 테넌트 ID 또는 테넌트 이름(예: contoso.microsoft.com)으로 바꿉니다.Enter_the_Application_Id_Here
- 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.
5단계: 애플리케이션 실행
IDE에서 ClientCredentialGrant.java의 주 메서드를 실행하여 샘플을 직접 테스트할 수 있습니다.
셸 또는 명령줄에서 다음 명령을 실행합니다.
$ mvn clean compile assembly:single
그러면 /targets 디렉터리에 msal-client-credential-secret-1.0.0.jar 파일이 생성됩니다. 아래와 같은 Java 실행 파일을 사용하여 이 작업을 실행합니다.
$ java -jar msal-client-credential-secret-1.0.0.jar
실행 후 애플리케이션은 구성된 테넌트의 사용자 목록을 표시해야 합니다.
중요
이 빠른 시작 애플리케이션에서는 클라이언트 비밀을 사용하여 자체를 기밀 클라이언트로 식별합니다. 클라이언트 비밀은 보안상의 이유로 프로젝트 파일에 일반 텍스트로 추가되므로, 이 애플리케이션을 프로덕션 애플리케이션으로 사용하는 방안을 고려하기 전에 클라이언트 비밀 대신 인증서를 사용하는 것이 좋습니다. 인증서를 사용하는 방법에 대한 자세한 내용은 이 샘플에 대한 동일한 GitHub 리포지토리의 두 번째 폴더 msal-client-credential-certificate에 있는 다음 지침을 참조하세요.
추가 정보
MSAL Java
MSAL Java는 사용자를 로그인하고 Microsoft ID 플랫폼으로 보호되는 API 액세스에 사용되는 토큰을 요청할 때 사용되는 라이브러리입니다. 설명한 것과 같이 이 빠른 시작은 위임된 권한 대신 애플리케이션 소유 ID를 사용하여 토큰을 요청합니다. 이 경우에 사용되는 인증 흐름을 클라이언트 자격 증명 oauth 흐름 이라고 합니다. 디먼 앱에서 MSAL Java를 사용하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.
Maven이나 Gradle을 사용하여 MSAL4J를 애플리케이션에 추가하고 애플리케이션의 pom.xml(Maven) 또는 build.gradle(Gradle) 파일을 다음과 같이 변경하여 종속성을 관리합니다.
pom.xml에서:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.0.0</version>
</dependency>
build.gradle에서:
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'
MSAL 초기화
MSAL4J를 사용할 파일 맨 위에 다음 코드를 추가하여 Java용 MSAL에 대한 참조를 추가합니다.
import com.microsoft.aad.msal4j.*;
그런 다음, 아래 코드를 사용하여 MSAL을 초기화합니다.
IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication cca =
ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
위치: Description CLIENT_SECRET
Azure Portal에서 애플리케이션에 대한 클라이언트 암호가 생성됩니다. CLIENT_ID
Azure Portal에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다. 이 값은 Azure Portal에서 앱의 개요 페이지에 있습니다. AUTHORITY
사용자가 인증하는 STS 엔드포인트 일반적으로 퍼블릭 클라우드에 대한 https://login.microsoftonline.com/{tenant}
입니다. 여기서 {tenant}는 테넌트의 이름 또는 테넌트 ID입니다.
토큰 요청
앱의 ID를 사용하여 토큰을 요청하려면 acquireToken
메서드를 사용합니다.
IAuthenticationResult result;
try {
SilentParameters silentParameters =
SilentParameters
.builder(SCOPE)
.build();
// try to acquire token silently. This call will fail since the token cache does not
// have a token for the application you are requesting an access token for
result = cca.acquireTokenSilently(silentParameters).join();
} catch (Exception ex) {
if (ex.getCause() instanceof MsalException) {
ClientCredentialParameters parameters =
ClientCredentialParameters
.builder(SCOPE)
.build();
// Try to acquire a token. If successful, you should see
// the token information printed out to console
result = cca.acquireToken(parameters).join();
} else {
// Handle other exceptions accordingly
throw ex;
}
}
return result;
위치: Description SCOPE
요청된 범위를 포함합니다. 기밀 클라이언트의 경우 요청되는 범위가 Azure Portal에서 설정된 앱 개체에서 정적으로 정의된 것임을 나타내기 위해 {Application ID URI}/.default
와 유사한 양식을 사용해야 합니다(Microsoft Graph의 경우{Application ID URI}
는https://graph.microsoft.com
을 가리킴). 사용자 지정 웹 API의 경우{Application ID URI}
는 Azure Portal의 앱 등록에서 API 노출 섹션 아래에 정의됩니다.
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
디먼 애플리케이션에 대해 자세히 알아보려면 시나리오 방문 페이지를 참조하세요.