Share via


빠른 시작: Microsoft ID 플랫폼을 사용하여 ASP.NET Core 웹 API 보호

이 빠른 시작에서는 ASP.NET Core 웹 API 코드 샘플을 사용하여 권한 있는 계정에 대한 리소스 액세스를 제한하는 방법을 보여 줍니다. 이 샘플에서는 MSAL(Microsoft 인증 라이브러리)상호 작용하는 ASP.NET 핵심 ID를 사용하여 인증을 처리합니다.

필수 조건

애플리케이션 및 레코드 식별자를 등록합니다.

이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.

등록을 완료하려면 애플리케이션 이름을 제공하고 지원되는 계정 유형을 지정합니다. 등록되면 애플리케이션 개요 페이지에 애플리케이션 소스 코드에 필요한 식별자가 표시됩니다.

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

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

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

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

  5. NewWebAPI1과 같은 애플리케이션의 이름을 입력합니다.

  6. 지원되는 계정 유형의 경우 이 조직 디렉터리 계정의 계정만을 선택합니다. 다양한 계정 유형에 대한 정보를 보려면 선택 도움말 옵션을 선택합니다.

  7. 등록을 선택합니다.

    이름 입력 및 계정 유형 선택 방법을 보여 주는 스크린샷.

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

    개요 페이지의 식별자 값을 보여 주는 스크린샷.

참고 항목

지원되는 계정 유형애플리케이션에서 지원하는 계정 수정을 참조하여 변경할 수 있습니다.

API 표시

API가 등록되면 API가 클라이언트 애플리케이션에 노출하는 범위를 정의하여 해당 권한을 구성할 수 있습니다. 클라이언트 애플리케이션은 요청과 함께 액세스 토큰을 보호된 웹 API에 전달하여 작업을 수행할 수 있는 권한을 요청합니다. 그런 다음 웹 API는 수신한 액세스 토큰에 필요한 범위가 포함된 경우에만 요청된 작업을 수행합니다.

  1. 관리에서 API 노출 > 범위 추가를 선택합니다. 저장 후 계속을 선택하여 제안된 애플리케이션 ID URI(api://{clientId})를 수락합니다. {clientId}개요 페이지에서 기록된 값입니다. 그런 다음, 다음 정보를 입력합니다.

    1. 범위 이름으로 Forecast.Read를 입력합니다.
    2. 동의할 수 있는 사람에 대해 관리자 및 사용자 옵션을 선택했는지 확인합니다.
    3. 관리자 동의 표시 이름 상자에 Read forecast data를 입력합니다.
    4. 관리자 동의 설명 상자에 Allows the application to read weather forecast data를 입력합니다.
    5. 사용자 동의 표시 이름 상자에 Read forecast data를 입력합니다.
    6. 사용자 동의 설명 상자에 Allows the application to read weather forecast data를 입력합니다.
    7. 상태사용으로 설정되어 있는지 확인합니다.
  2. 범위 추가를 선택합니다. 범위가 올바르게 입력되면 API 노출 창에 나열됩니다.

    API에 범위를 추가할 때 필드 값을 보여 주는 스크린샷.

샘플 애플리케이션 복제 또는 다운로드

샘플 애플리케이션을 가져오려면 GitHub에서 복제하거나 .zip 파일로 다운로드할 수 있습니다.

  • 샘플을 복제하려면 명령 프롬프트를 열고 프로젝트를 만들려는 위치로 이동한 후 다음 명령을 입력합니다.

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
    
  • .zip 파일을 다운로드합니다. 이름 길이가 260자 미만인 파일 경로에 추출합니다.

ASP.NET Core 샘플 애플리케이션 구성

  1. IDE에서 샘플이 포함된 프로젝트 폴더 ms-identity-docs-code-dotnet /web-api를 엽니다.

  2. 다음 코드 조각을 포함하는 파일을 엽니다 appsettings.json .

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center",
        "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center",
        "Scopes": "Forecast.Read"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    

    다음을 찾습니다.key

    • ClientId - 클라이언트라고도 하는 애플리케이션의 식별자입니다. 따옴표의 value 텍스트를 등록된 애플리케이션의 개요 페이지에서 이전에 기록된 애플리케이션(클라이언트) ID로 바꿉니다.
    • TenantId - 애플리케이션이 등록된 테넌트 식별자입니다. 따옴표의 value 텍스트를 등록된 애플리케이션의 개요 페이지에서 이전에 기록된 디렉터리(테넌트) ID 값으로 바꿉니다.

샘플 애플리케이션 실행

  1. 다음 명령을 실행하여 앱을 시작합니다.

    dotnet run
    
  2. 다음 샘플과 같은 출력이 나타납니다.

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: https://localhost:{port}
    ...
    

    https://localhost:{port} URL에 포트 번호를 기록해 두세요.

  3. 엔드포인트가 보호되는지 확인하려면 Bash에서 다음 cURL 명령을 사용하여 Bash에서 인증되지 않은 HTTP GET 요청을 보냅니다.

    curl -X GET https://localhost:5001/weatherforecast -ki
    

    예상 응답은 다음과 유사한 출력으로 401 권한 없음입니다.

    user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki
    HTTP/2 401
    date: Fri, 23 Sep 2023 23:34:24 GMT
    server: Kestrel
    www-authenticate: Bearer
    content-length: 0