Share via


보호된 API 테스트

이 자습서는 외부 테넌트에 등록된 보호된 웹 API를 빌드하고 테스트하는 방법을 보여 주는 시리즈의 마지막 부분입니다. 이 시리즈의 1부에서는 ASP.NET Core 웹 API를 만들고 해당 엔드포인트를 보호했습니다. 이 마지막 단계에서는 디먼 앱을 등록하고 API를 테스트합니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 웹 API를 호출하는 경량 디먼 앱을 사용하여 보호된 웹 API 테스트

필수 조건

자습서: 외부 테넌트에 등록된 ASP.NET Core Web API 보호

디먼 앱 등록

다음 단계에서는 Microsoft Entra 관리 센터에 디먼 앱을 등록하는 방법을 보여 줍니다.

  1. 최소한 애플리케이션 개발자 자격으로 Microsoft Entra 관리 센터에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘 을 사용하여 디렉터리 + 구독 메뉴에서 외부 테넌트로 전환합니다.

  3. ID>애플리케이션>앱 등록으로 이동합니다.

  4. + 새 등록을 선택합니다.

  5. 표시되는 애플리케이션 등록 페이지에서 애플리케이션의 등록 정보를 입력합니다.

    1. 이름 섹션에 앱 사용자에게 표시될 의미 있는 애플리케이션 이름을 입력합니다(예: ciam-client-app).

    2. 지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.

  6. 등록을 선택합니다.

  7. 등록이 완료되면 애플리케이션의 개요 창이 표시됩니다. 애플리케이션 소스 코드에 사용할 디렉터리(테넌트) ID애플리케이션(클라이언트) ID를 기록해 둡니다.

등록된 애플리케이션에 대한 클라이언트 암호를 만듭니다. 애플리케이션은 토큰을 요청할 때 클라이언트 암호를 사용하여 ID를 증명합니다.

  1. 앱 등록 페이지에서 만든 애플리케이션(예: ciam-client-app)을 선택하여 개요 페이지를 엽니다.
  2. 관리에서 인증서 및 비밀을 선택합니다.
  3. 새 클라이언트 비밀을 선택합니다.
  4. 설명 상자에 클라이언트 암호에 대한 설명을 입력합니다(예: ciam 앱 클라이언트 암호).
  5. 만료에서 조직의 보안 규칙에 따라 비밀이 유효한 기간을 선택한 다음 추가를 선택합니다.
  6. 비밀의 을 기록합니다. 이후 단계에서 구성에 이 값을 사용합니다. 인증서 및 비밀에서 벗어나면 비밀 값이 다시 표시되지 않으며 어떤 수단으로도 검색할 수 없습니다. 기록해야 합니다.

디먼 앱에 앱 역할 할당

앱 자체를 인증하려면 앱 권한이 필요합니다.

  1. 앱 등록 페이지에서 ciam-client-app과 같이 만든 애플리케이션을 선택합니다.

  2. 관리 아래에서 API 권한을 선택합니다.

  3. 구성된 사용 권한 아래에서 권한 추가를 선택합니다.

  4. 내 조직에서 사용하는 API 탭을 선택합니다.

  5. API 목록에서 ciam-ToDoList-api와 같은 API를 선택합니다.

  6. 애플리케이션 권한 옵션을 선택합니다. 사용자가 아닌 앱이 자체적으로 로그인하므로 이 옵션을 선택합니다.

  7. 권한 목록에서 TodoList.Read.All, ToDoList.ReadWrite.All을 선택합니다(필요한 경우 검색 상자 사용).

  8. 사용 권한 추가 단추를 선택합니다.

  9. 이제 권한이 올바르게 할당되었습니다. 그러나 디먼 앱은 사용자가 앱과 상호 작용하는 것을 허용하지 않기 때문에 사용자 자신은 이러한 권한에 동의할 수 없습니다. 이 문제를 해결하려면 관리자로서 테넌트의 모든 사용자를 대신하여 다음 권한에 동의해야 합니다.

    1. <테넌트 이름>에 대한 관리자 동의 부여를 선택한 다음 를 선택합니다.
    2. 새로 고침을 선택한 다음 두 권한에 대해 <테넌트 이름>에 부여됨상태 아래에 표시되는지 확인합니다.

코드 작성

  1. .NET 콘솔 앱을 초기화하고 해당 루트 폴더로 이동합니다.

    dotnet new console -o MyTestApp
    cd MyTestApp
    
  2. 다음 명령을 실행하여 인증 처리에 도움이 되는 MSAL을 설치합니다.

    dotnet add package Microsoft.Identity.Client
    
  3. API 프로젝트를 실행하고 실행 중인 포트를 기록해 둡니다.

  4. Program.cs 파일을 열고 "Hello world" 코드를 다음 코드로 바꿉니다.

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var response = await client.GetAsync("https://localhost:<your-api-port>/api/todolist");
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    디먼 앱 루트 디렉터리로 이동하고 dotnet run 명령을 사용하여 앱을 실행합니다. 이 코드는 액세스 토큰 없이 요청을 보냅니다. 콘솔에 사용자의 응답은: Unauthorized라는 문자열이 인쇄되어야 합니다.

  5. 4단계에서 코드를 제거하고 다음으로 바꿔 유효한 액세스 토큰이 포함된 요청을 보내 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 tenantName= "<your-tenant-name>";
    var authority = $"https://{tenantName}.ciamlogin.com/";
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("https://localhost:44351/api/todolist");
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    디먼 앱 루트 디렉터리로 이동하고 dotnet run 명령을 사용하여 앱을 실행합니다. 이 코드는 유효한 액세스 토큰이 포함된 요청을 보냅니다. 다음 문자열이 표시되어야 합니다. 귀하의 응답은 다음과 같습니다: OK가 콘솔에 인쇄되었습니다.

참고 항목

셀프 서비스 암호 재설정 사용