빠른 시작: Microsoft ID 플랫폼을 사용하여 ASP.NET Core 웹 API 보호
이 빠른 시작에서는 ASP.NET Core 웹 API 코드 샘플을 사용하여 권한 있는 계정에 대한 리소스 액세스를 제한하는 방법을 보여 줍니다. 이 샘플에서는 MSAL(Microsoft 인증 라이브러리)와 상호 작용하는 ASP.NET 핵심 ID를 사용하여 인증을 처리합니다.
필수 조건
- 활성 구독이 있는 Azure 계정 계정이 아직 없는 경우 무료로 계정을 만듭니다.
- .NET 8.0 SDK 최소 요구 사항
- Visual Studio 2022 또는 Visual Studio Code
애플리케이션 및 레코드 식별자를 등록합니다.
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수도 있습니다.
등록을 완료하려면 애플리케이션 이름을 제공하고 지원되는 계정 유형을 지정합니다. 등록되면 애플리케이션 개요 페이지에 애플리케이션 소스 코드에 필요한 식별자가 표시됩니다.
최소한 애플리케이션 개발자 자격으로 Microsoft Entra 관리 센터에 로그인합니다.
여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
ID>애플리케이션>앱 등록으로 이동합니다.
새 등록을 선택합니다.
NewWebAPI1과 같은 애플리케이션의 이름을 입력합니다.
지원되는 계정 유형의 경우 이 조직 디렉터리 계정의 계정만을 선택합니다. 다양한 계정 유형에 대한 정보를 보려면 선택 도움말 옵션을 선택합니다.
등록을 선택합니다.
등록이 완료되면 애플리케이션의 개요 창이 표시됩니다. 애플리케이션 소스 코드에 사용할 디렉터리(테넌트) ID와 애플리케이션(클라이언트) ID를 기록해 둡니다.
참고 항목
지원되는 계정 유형은 애플리케이션에서 지원하는 계정 수정을 참조하여 변경할 수 있습니다.
API 표시
API가 등록되면 API가 클라이언트 애플리케이션에 노출하는 범위를 정의하여 해당 권한을 구성할 수 있습니다. 클라이언트 애플리케이션은 요청과 함께 액세스 토큰을 보호된 웹 API에 전달하여 작업을 수행할 수 있는 권한을 요청합니다. 그런 다음 웹 API는 수신한 액세스 토큰에 필요한 범위가 포함된 경우에만 요청된 작업을 수행합니다.
관리에서 API 노출 > 범위 추가를 선택합니다. 저장 후 계속을 선택하여 제안된 애플리케이션 ID URI
(api://{clientId})
를 수락합니다.{clientId}
는 개요 페이지에서 기록된 값입니다. 그런 다음, 다음 정보를 입력합니다.- 범위 이름으로
Forecast.Read
를 입력합니다. - 동의할 수 있는 사람에 대해 관리자 및 사용자 옵션을 선택했는지 확인합니다.
- 관리자 동의 표시 이름 상자에
Read forecast data
를 입력합니다. - 관리자 동의 설명 상자에
Allows the application to read weather forecast data
를 입력합니다. - 사용자 동의 표시 이름 상자에
Read forecast data
를 입력합니다. - 사용자 동의 설명 상자에
Allows the application to read weather forecast data
를 입력합니다. - 상태가 사용으로 설정되어 있는지 확인합니다.
- 범위 이름으로
범위 추가를 선택합니다. 범위가 올바르게 입력되면 API 노출 창에 나열됩니다.
샘플 애플리케이션 복제 또는 다운로드
샘플 애플리케이션을 가져오려면 GitHub에서 복제하거나 .zip 파일로 다운로드할 수 있습니다.
샘플을 복제하려면 명령 프롬프트를 열고 프로젝트를 만들려는 위치로 이동한 후 다음 명령을 입력합니다.
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
.zip 파일을 다운로드합니다. 이름 길이가 260자 미만인 파일 경로에 추출합니다.
ASP.NET Core 샘플 애플리케이션 구성
IDE에서 샘플이 포함된 ms-identity-docs-code-dotnet/web-api 프로젝트 폴더를 엽니다.
다음 코드 조각을 포함하는
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 값으로 바꿉니다.
샘플 애플리케이션 실행
다음 명령을 실행하여 앱을 시작합니다.
dotnet run
다음 샘플과 같은 출력이 나타납니다.
... info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:{port} ...
http://localhost:{port}
URL에 포트 번호를 기록해 두세요.엔드포인트가 보호되는지 확인하려면 다음 cURL 명령의 기본 URL을 이전 단계에서 받은 것과 일치하도록 업데이트한 다음 명령을 실행합니다.
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
다음 단계
다음 문서를 진행하여 cURL을 사용하여 보호된 웹 API를 호출하는 방법을 알아봅니다.