비즈니스 논리는 종종 프라이빗 API(애플리케이션 프로그래밍 인터페이스)에 있습니다. API는 온-프레미스 또는 프라이빗 클라우드에서 실행됩니다. 네이티브 Android, iOS, Mac 또는 Windows 앱은 데이터를 사용하거나 사용자 상호 작용을 제공하기 위해 API 엔드포인트와 상호 작용해야 합니다. Microsoft Entra 애플리케이션 프록시 및 MSAL(Microsoft 인증 라이브러리) 을 사용하면 네이티브 앱이 프라이빗 클라우드 API에 안전하게 액세스할 수 있습니다. Microsoft Entra 애플리케이션 프록시는 방화벽 포트를 열고 앱 계층에서 인증 및 권한 부여를 제어하는 것보다 더 빠르고 안전한 솔루션입니다.
팁
"온-프레미스"라는 용어는 물리적 서버가 회사 사무실의 온-프레미스에 있었던 시점으로 거슬러 올라가는 레거시 용어입니다. 이제 많은 자체 호스팅 워크로드가 데이터 센터의 가상 머신에서 실행됩니다. 온-프레미스 및 프라이빗 클라우드의 용어는 서로 바꿔서 사용됩니다.
이 문서에서는 네이티브 앱이 액세스할 수 있는 웹 API 서비스를 호스팅하기 위한 Microsoft Entra 애플리케이션 프록시 솔루션을 설정하는 과정을 안내합니다.
개요
다음 다이어그램은 온-프레미스 API를 게시하는 기존의 방법을 표시합니다. 이 방법을 사용하려면 수신 포트 80 및 443을 열어야 합니다.
다음 다이어그램은 Microsoft Entra 애플리케이션 프록시를 사용하여 수신 포트를 열지 않고도 API를 안전하게 게시하는 방법을 보여 줍니다.
Microsoft Entra 애플리케이션 프록시는 솔루션의 백본을 형성하여 API 액세스를 위한 공용 엔드포인트로 작동하고 인증 및 권한 부여를 제공합니다. MSAL(Microsoft 인증 라이브러리) 라이브러리를 사용하여 다양한 플랫폼에서 API에 액세스할 수 있습니다.
Microsoft Entra 애플리케이션 프록시 인증 및 권한 부여는 Microsoft Entra ID를 기반으로 하므로 Microsoft Entra 조건부 액세스를 사용하여 신뢰할 수 있는 디바이스만 애플리케이션 프록시를 통해 게시된 API에 액세스할 수 있도록 할 수 있습니다. 데스크톱에는 Microsoft Entra 조인 또는 Microsoft Entra 하이브리드 조인을 사용하고 디바이스에는 Intune Managed를 사용합니다. Microsoft Entra ID P1 또는 P2 기능(예: Microsoft Entra 다단계 인증) 및 Microsoft Entra ID Protection의 기계 학습 지원 보안을 활용할 수도 있습니다.
필수 조건
이 연습을 완료하려면 다음 사항이 필요합니다.
- 앱을 만들고 등록할 수 있는 계정을 사용하여 Azure 디렉터리에 대한 관리자 권한
- MSAL(Microsoft 인증 라이브러리)의 샘플 웹 API 및 네이티브 클라이언트 앱
애플리케이션 프록시를 통해 API 게시
애플리케이션 프록시를 통해 인트라넷 외부에 API를 게시하려면 웹앱을 게시하는 것과 동일한 패턴을 따릅니다. 자세한 내용은 자습서: Microsoft Entra ID의 애플리케이션 프록시를 통해 원격 액세스를 위한 온-프레미스 애플리케이션 추가를 참조하세요.
애플리케이션 프록시를 통해 SecretAPI 웹 API를 게시하려면 다음을 수행하세요.
로컬 컴퓨터 또는 인트라넷에 샘플 SecretAPI 프로젝트를 ASP.NET 웹앱으로 빌드하고 게시합니다. 웹앱에 로컬로 액세스할 수 있는지 확인합니다.
최소한 애플리케이션 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
Entra ID>엔터프라이즈 앱으로 이동합니다.
엔터프라이즈 애플리케이션 - 모든 애플리케이션 페이지의 맨 위에서 새 애플리케이션을 선택합니다.
Microsoft Entra 갤러리 찾아보기 페이지에서 온-프레미스 애플리케이션 섹션을 찾아 온-프레미스 애플리케이션추가를 선택합니다. 사용자 고유의 온-프레미스 애플리케이션 추가 페이지가 나타납니다.
개인 네트워크 커넥터가 설치되어 있지 않으면 설치하라는 메시지가 표시됩니다. 프라이빗 네트워크 커넥터 다운로드를 선택하여 커넥터를 다운로드하고 설치합니다.
사용자 고유의 온-프레미스 애플리케이션 추가 페이지에서 정보를 추가합니다.
이름 옆에 SecretAPI를 입력합니다.
내부 URL 옆에 인트라넷 내에서 API에 액세스하는 데 사용하는 URL을 입력합니다.
사전 인증이 Microsoft Entra ID로 설정되어 있는지 확인합니다.
만들기를 선택하고 앱이 만들어질 때까지 기다립니다.
엔터프라이즈 애플리케이션 - 모든 애플리케이션 페이지에서 SecretAPI 앱을 선택합니다.
SecretAPI - 개요 페이지의 왼쪽 탐색 영역에서 속성을 선택합니다.
MyApps 패널에서 최종 사용자가 API를 사용할 수 없도록 하려면 [속성] 페이지 아래쪽에 있는 [사용자에게 표시]를 [아니요]로 설정하고 [저장]을 선택합니다.
웹 API는 이제 Microsoft Entra 애플리케이션 프록시를 통해 게시됩니다. 다음으로, 앱에 액세스할 수 있는 사용자를 추가합니다.
SecretAPI - 개요 페이지의 왼쪽 탐색 창에서 사용자 및 그룹을 선택합니다.
사용자 및 그룹 페이지에서 사용자 추가를 선택합니다.
할당 추가 페이지에서 사용자 및 그룹을 선택합니다.
사용자 및 그룹 페이지에서 적어도 자신을 포함하여 앱에 액세스할 수 있는 사용자를 검색하고 선택합니다. 모든 사용자를 선택한 후 선택을 선택합니다.
할당 추가 페이지에서 할당을 선택합니다.
참고
Windows 통합 인증을 사용하는 API에는 추가 단계가 필요할 수 있습니다.
네이티브 앱 등록 및 API에 대한 액세스 권한 부여
네이티브 앱은 특정 플랫폼 또는 디바이스에서 사용하도록 개발된 프로그램입니다. 네이티브 앱이 API에 연결하고 액세스하려면 먼저 Microsoft Entra ID에 등록해야 합니다. 다음 단계는 네이티브 앱을 등록하고 애플리케이션 프록시를 통해 게시한 웹 API에 대한 액세스 권한을 부여하는 방법을 보여 줍니다.
AppProxyNativeAppSample 네이티브 앱을 등록하려면 다음을 수행합니다.
최소한 애플리케이션 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
Entra ID>엔터프라이즈 앱>앱 등록으로 이동합니다.
새 등록을 선택합니다.
애플리케이션 등록 페이지에 정보를 입력합니다.
이름 아래에서 AppProxyNativeAppSample을 입력합니다.
지원되는 계정 유형에서 이 조직 디렉터리에서만 계정을 선택합니다(Contoso 전용 - 단일 테넌트).
리디렉션 URL에서 공용 클라이언트/네이티브(모바일 및 데스크톱)를 드롭다운하고 선택한 다음 * *
https://login.microsoftonline.com/common/oauth2/nativeclient를 입력합니다.등록을 선택하고 앱이 성공적으로 등록될 때까지 기다립니다.
이제 AppProxyNativeAppSample 앱이 Microsoft Entra ID에 등록되었습니다. 네이티브 앱에 SecretAPI 웹 API에 대한 액세스 권한을 부여합니다.
앱 등록 페이지에서 AppProxyNativeAppSample 앱을 선택합니다.
AppProxyNativeAppSample 페이지의 왼쪽 탐색 영역에서 API 권한을 선택합니다.
API 권한 페이지에서 권한 추가를 선택합니다.
첫 번째 요청 API 권한 페이지에서 조직에서 사용하는 API 탭을 선택한 다음 SecretAPI를 검색하여 선택합니다.
다음 요청 API 권한 페이지에서 user_impersonation 옆의 확인란을 선택한 다음, 권한 추가를 선택합니다.
API 권한 페이지로 돌아가서 Contoso에 대한 관리자 동의 부여를 선택하여 다른 사용자가 앱에 개별적으로 동의할 필요가 없도록 할 수 있습니다.
네이티브 앱 코드 구성
마지막 단계는 네이티브 앱을 구성 하는 것입니다. 코드는 Form1.cs 샘플 앱의 NativeClient 파일에 추가해야 합니다. 이 코드는 MSAL 라이브러리 를 사용하여 토큰을 획득합니다. 토큰은 API 호출을 요청하고 요청의 헤더에 연결합니다. 토큰은 전달자 인증서로 연결됩니다. MSAL에 대한 자세한 내용은 프로젝트에 MSAL 추가 및 MSAL에 대한 참조 추가를 참조하세요.
Form1.cs 코드에 네임스페이스를
using Microsoft.Identity.Client;추가합니다.이 사용자 지정된 코드 샘플을 포함하도록 MSAL(Microsoft 인증 라이브러리)의 인증 컨텍스트에서 네이티브 애플리케이션 코드를 편집합니다.
Microsoft Entra ID에 연결하고 애플리케이션 프록시를 사용하여 API를 호출하도록 네이티브 앱을 구성합니다. 그런 다음, App.config의 NativeClient sample app 파일의 자리 표시자 값을 Microsoft Entra ID의 값으로 업데이트합니다.
필드에 디렉터리(테넌트) ID를 붙여넣습니다
<add key="ida:Tenant" value="" />. 이 값(GUID)은 앱 중 하나의 개요 페이지에서 찾아서 복사할 수 있습니다.AppProxyNativeAppSample 애플리케이션(클라이언트) ID 를
<add key="ida:ClientId" value="" />필드에 붙여넣습니다. AppProxyNativeAppSample 개요 페이지의 관리 아래 왼쪽 탐색 창에서 이 값(GUID)을 찾아 복사할 수 있습니다.필드에 AppProxyNativeAppSample 리디렉션 URI 를 붙여넣습니다
<add key="ida:RedirectUri" value="" />. AppProxyNativeAppSample의 인증 페이지에서 관리 아래의 왼쪽 탐색 창에서 이 값(URI)을 찾아 복사할 수 있습니다. MSAL이PublicClientApplicationBuilder.WithDefaultRedirectUri()메서드를 사용하여 권장 회신 URI(Uniform Resource Identifier)를 삽입하기 때문에 이 단계는 선택 사항입니다.SecretAPI 애플리케이션 ID URI 를 필드에 붙여넣습니다
<add key="todo:TodoListResourceId" value="" />. 값은todo:TodoListBaseAddress과(와) 같습니다. URI 값은 애플리케이션의SecretAPI페이지에 있습니다. 관리 아래의 왼쪽 탐색을 확인하세요.SecretAPI 홈페이지 URL 을 필드에 붙여넣습니다
<add key="todo:TodoListBaseAddress" value="" />. SecretAPI브랜딩 및 속성 페이지의 관리 아래 왼쪽 탐색 창에서 이 값(URL)을 찾아 복사할 수 있습니다.
참고
솔루션이 빌드되고 오류를 invalid Resx file보고하지 않는 경우 솔루션 탐색기에서 속성을 확장하고 Resources.resx를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 선택합니다. 121~123행을 주석 처리합니다.
매개 변수를 구성한 후 네이티브 앱을 빌드하고 실행합니다. 로그인 버튼을 선택하면 앱에 로그인하고, SecretAPI에 성공적으로 연결되었는지 확인하기 위해 성공 화면을 표시합니다.