적용 대상: Workforce 테넌트
외부 테넌트 (자세히 알아보기)
이 자습서는 Microsoft Entra 테넌트에 등록된 보호된 웹 API를 빌드하고 테스트하는 방법을 보여 주는 시리즈의 마지막 부분입니다. 이 시리즈의 1부에서는 ASP.NET Core 웹 API를 만들고 해당 엔드포인트를 보호했습니다. 이제 간단한 디먼 앱을 만들고, 테넌트에 등록하고, 디먼 앱을 사용하여 빌드한 웹 API를 테스트합니다.
이 자습서에서는 다음을 수행합니다.
- 디먼 앱 등록
- 디먼 앱에 앱 역할 할당
- 디먼 앱 빌드
- 디먼 앱을 실행하여 보호된 웹 API 호출
필수 조건
- 아직 자습서를 완료하지 않은 경우 Microsoft ID 플랫폼을 사용하여 ASP.NET Core 웹 API 빌드 및 보호
디먼 앱 등록
다음 단계에서는 Microsoft Entra 관리 센터에 디먼 앱을 등록하는 방법을 보여 줍니다.
최소한 애플리케이션 개발자 자격으로 Microsoft Entra 관리 센터에 로그인합니다.
여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘
을 사용하여 디렉터리 + 구독 메뉴에서 외부 테넌트로 전환합니다.
Entra ID>앱 등록으로 이동합니다.
+ 새 등록을 선택합니다.
표시되는 애플리케이션 등록 페이지에서 애플리케이션의 등록 정보를 입력합니다.
이름 섹션에 앱 사용자에게 표시될 의미 있는 애플리케이션 이름을 입력합니다(예: ciam-client-app).
지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.
등록을 선택합니다.
등록이 완료되면 애플리케이션의 개요 창이 표시됩니다. 애플리케이션 소스 코드에 사용할 디렉터리(테넌트) ID와 애플리케이션(클라이언트) ID를 기록해 둡니다.
등록된 애플리케이션에 대한 클라이언트 암호를 만듭니다. 애플리케이션은 클라이언트 비밀을 사용하여 토큰을 요청할 때 해당 ID를 증명합니다.
- 앱 등록 페이지에서 만든 애플리케이션(예: 웹앱 클라이언트 암호)을 선택하여 개요 페이지를 엽니다.
- 관리아래에서 인증서 & 비밀>클라이언트 비밀>새 클라이언트 비밀을 선택합니다.
- 설명 상자에 클라이언트 암호에 대한 설명(예: 웹앱 클라이언트 암호 )을 입력합니다.
- 만료에서 조직의 보안 규칙에 따라 비밀이 유효한 기간을 선택한 다음 추가를 선택합니다.
- 비밀의 값을 기록합니다. 이후 단계에서 구성에 이 값을 사용합니다. 인증서 및 비밀 페이지에서 다른 페이지로 이동한 후에는 비밀 값이 다시 표시되지 않으며 어떠한 방법으로도 검색할 수 없습니다. 기록해야 합니다.
디먼 앱에 앱 역할 할당
사용자 없이 자체 인증하는 애플리케이션에는 앱 권한(역할이라고도 함)이 필요합니다. 이러한 권한을 통해 앱 자체에서 리소스에 직접 액세스할 수 있습니다. 반면에 로그인한 사용자로 API를 테스트하는 경우 위임된 권한(범위)을 할당합니다. 위임된 권한을 사용하면 앱이 사용자의 액세스 권한으로 제한되는 사용자를 대신하여 작동할 수 있습니다. 디먼 앱에 애플리케이션 권한을 할당하려면 다음 단계를 수행합니다.
앱 등록 페이지에서 만든 애플리케이션을 선택합니다(예: ciam-client-app).
관리 아래에서 API 권한을 선택합니다.
구성된 사용 권한 아래에서 권한 추가를 선택합니다.
내 조직에서 사용하는 API 탭을 선택합니다.
API 목록에서 ciam-ToDoList-api와 같은 API를 선택합니다.
애플리케이션 권한 옵션을 선택합니다. 앱이 사용자를 대신하여 로그인하지 않고 그 자체로 로그인할 때 이 옵션을 선택합니다.
권한 목록에서 TodoList.Read.All, ToDoList.ReadWrite.All을 선택합니다(필요한 경우 검색 상자 사용).
사용 권한 추가 단추를 선택합니다.
이 시점에서 사용 권한을 올바르게 할당했습니다. 그러나 디먼 앱은 사용자가 앱과 상호 작용하는 것을 허용하지 않기 때문에 사용자 자신은 이러한 권한에 동의할 수 없습니다. 이 문제를 해결하려면 관리자가 테넌트에 있는 모든 사용자를 대신하여 이러한 권한에 동의해야 합니다.
- <테넌트 이름>에 대한 관리자 동의 부여를 선택한 다음 예를 선택합니다.
- 새로 고침을 선택한 다음, 두 가지 권한 모두에 대해 < 아래에 >귀하의 테넌트 이름에 부여됨이 표시되는지 확인합니다.
디먼 앱 빌드
.NET 콘솔 앱을 초기화하고 루트 폴더로 이동합니다.
dotnet new console -o MyTestApp cd MyTestApp
다음 명령을 실행하여 인증을 처리하는 데 도움이 되는 MSAL.NET 설치합니다.
dotnet add package Microsoft.Identity.Client
API 프로젝트를 실행하고 실행 중인 포트를 확인합니다.
Program.cs 파일을 열고 "Hello world" 코드를 다음 코드로 바꿉니다.
using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var response = await client.GetAsync("http://localhost:<your-api-port>/api/todolist); Console.WriteLine("Your response is: " + response.StatusCode);
디먼 앱 루트 디렉터리로 이동하고 명령을
dotnet run
사용하여 앱을 실행합니다. 이 코드는 액세스 토큰 없이 요청을 보냅니다. 다음과 같은 문자열이 콘솔에 표시됩니다: 응답은: Unauthorized4단계에서 코드를 제거하고 다음으로 바꿔서 유효한 액세스 토큰으로 요청을 전송하여 API를 테스트합니다. 이 디먼 앱은 클라이언트 자격 증명 흐름을 사용하여 사용자 상호 작용 없이 인증할 때 액세스 토큰을 획득합니다.
using Microsoft.Identity.Client; using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var clientId = "<your-daemon-app-client-id>"; var clientSecret = "<your-daemon-app-secret>"; var scopes = new[] {"api://<your-web-api-application-id>/.default"}; var tenantId = "<your-tenant-id>"; //Use in workforce tenant configuration var tenantName = "<your-tenant-name>"; //Use in external tenant configuration var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync(); Console.WriteLine($"Access Token: {result.AccessToken}"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine("Your response is: " + response.StatusCode); Console.WriteLine(content);
코드의 자리 표시자를 디먼 앱 클라이언트 ID, 비밀, 웹 API 애플리케이션 ID 및 테넌트 이름으로 바꿉니다.
- 외부 테넌트에서 다음 형식의 권한을 사용합니다.
"https://{tenantName}.ciamlogin.com/"
- 인력 테넌트를 위해, 권한을 다음 형식으로 사용하세요:
"https://login.microsoftonline.com/{tenantId}"
- 외부 테넌트에서 다음 형식의 권한을 사용합니다.
디먼 앱 루트 디렉터리로 이동하고 명령을
dotnet run
사용하여 앱을 실행합니다. 이 코드는 유효한 액세스 토큰을 사용하여 요청을 보냅니다. 다음과 같은 문자열이 표시됩니다. 응답은 콘솔에 인쇄된 OK입니다.