다음을 통해 공유


Microsoft Entra ID를 사용하여 애플리케이션 및 사용자 인증

앱에 대한 Microsoft Entra ID의 기본 기능은 인증으로, 인증 프로세스에서는 사용자가 사용자 이름 또는 메일 주소와 같은 개인 식별자로 ID를 선언합니다. ID에 대한 증명이 제공됩니다. 증명은 암호, 다단계 인증 아티팩트, 생체 인식 또는 암호 없는 동의일 수 있습니다.

이 문서에서는 애플리케이션이 Microsoft Entra ID를 사용하여 사용자 및 애플리케이션을 인증하는 방법을 설명합니다. 이는 ISV(독립 소프트웨어 개발자)가 Microsoft Entra ID용 애플리케이션을 빌드하고 최적화하는 방법에 대한 일련의 문서 중 세 번째입니다. 이 시리즈에서는 다음 항목에 대해 자세히 알아볼 수 있습니다.

  • 독립 소프트웨어 개발자를 위한 Microsoft Entra ID에서는 이 클라우드 기반 ID 및 액세스 관리 서비스를 사용하여 직원이 애플리케이션을 통해 리소스에 액세스할 수 있도록 하는 방법을 설명합니다.
  • Microsoft Entra ID 에코시스템에 애플리케이션 설정에서는 Microsoft Entra 관리 센터 또는 Microsoft Graph API(애플리케이션 프로그래밍 인터페이스)를 사용하여 Microsoft Entra ID 테넌트에 앱을 등록하는 방법을 설명합니다.
  • 애플리케이션, 리소스 및 워크로드 권한 부여에서는 개인이 애플리케이션과 상호 작용하고 애플리케이션에 지시를 내릴 때, API가 사용자를 대신하여 작업할 때의 권한 부여에 대해 설명합니다. 또한 애플리케이션이나 서비스가 독립적으로 작동할 경우도 다룹니다.
  • 토큰 사용자 지정을 사용하면 Microsoft Entra ID의 ID 토큰 및 액세스 토큰을 사용하여 애플리케이션에 보안을 빌드할 수 있습니다. Microsoft Entra ID 토큰으로 받을 수 있는 정보와 이를 사용자 지정할 수 있는 방법에 대해 설명합니다.

토큰 요청

애플리케이션이 Microsoft Entra ID의 토큰을 요청합니다. 앱은 토큰을 받은 후 토큰의 정보를 사용하여 사용자를 식별할 수 있습니다. Microsoft Entra ID를 기반으로 빌드하는 경우 사용자는 등록된 단일 Microsoft Entra ID 계정(SSO)을 사용하여 여러 애플리케이션을 인증할 수 있습니다. SSO 인증 방법을 사용하면 사용자가 하나의 자격 증명 세트를 사용하여 여러 독립 소프트웨어 시스템에 로그인할 수 있습니다.

개발자가 Microsoft Entra ID의 토큰을 요청하는 데 사용할 수 있는 프로토콜은 브라우저를 사용하여 사용자를 Microsoft Entra ID 웹 사이트에 연결합니다. 이 웹 사이트에서는 사용자가 Microsoft Entra ID를 사용하여 개인 대화를 나눌 수 있습니다. 애플리케이션은 개인 대화의 참가자가 아닙니다. 앱은 Microsoft Entra ID 웹 사이트를 시작하고, 여기에서 사용자가 인증 프로세스를 시작합니다. 인증 프로세스가 완료되면 Microsoft Entra ID는 토큰과 함께 또는 토큰 없이 사용자를 애플리케이션으로 다시 리디렉션합니다.

사용자가 되도록 인증 프로세스를 거치지 않도록 하는 것이 중요합니다. 사용자가 더 자주 인증해야 할수록 피싱 공격과 같은 악용에 영향을 받기 쉬워집니다.

로그인 프롬프트 줄이기

SSO는 로그인 프롬프트를 줄이거나 제거할 수 있습니다. 개발자는 로그인 프롬프트를 줄이고 제거하는 데 중요한 역할을 합니다. 사용자가 인증 프로세스를 수행하는 Microsoft Entra ID 웹 사이트에 액세스하는 브라우저를 모든 앱에서 공유해야 합니다. 앱이 브라우저 기반 SPA(단일 페이지 애플리케이션)나 웹앱인 경우 개발자 단계가 필요하지 않습니다. 이 경우 브라우저의 모든 앱이 브라우저를 공유합니다. 데스크톱 및 모바일 디바이스에서 실행되는 네이티브 애플리케이션의 경우 개발자가 능동적으로 로그인 프롬프트를 줄이거나 제거해야 합니다.

로그인 프롬프트를 줄이거나 제거하는 가장 좋은 방법은 MSAL(Microsoft 인증 라이브러리)이나 MSAL 기반으로 빌드된 라이브러리 및 브로커 인증을 사용하는 것입니다. 이 방법은 로그인 프롬프트를 최소화하고 가장 원활한 환경을 제공합니다. MSAL을 기반으로 빌드할 수 없는 경우 애플리케이션에서 시스템 브라우저를 사용하여 로그인 프롬프트를 최소화해야 합니다.

iOS 또는 Android에서 실행되는 앱의 경우 모바일 플랫폼 공급자가 이 환경을 보다 원활하게 만드는 몇 가지 기능을 제공합니다. Google에서는 Chrome 사용자 지정 탭을 사용하여 Android 애플리케이션에 대한 지침을 제공합니다. Apple에서는 iOS 애플리케이션에서 Authenticate a User Through a Web Service(웹 서비스를 통한 사용자 인증)에 대한 지침을 제공합니다. 포함된 WebView는 앱 간이나 시스템 브라우저와의 공유를 허용하지 않을 수 있으므로 사용하지 마세요.

사용자 인증을 위한 두 가지 프로토콜은 SAML(Security Assertion Markup Language) 2.0 및 OIDC(OpenID Connect)입니다. Microsoft Entra ID는 두 프로토콜을 사용하는 앱을 완벽히 지원하므로 개발자는 요구 사항에 따라 둘 중 하나를 선택할 수 있습니다.

다음 참고자료에서 Microsoft Entra ID SAML 지원에 대해 자세히 설명합니다.

Microsoft Entra ID SAML 지원에는 몇 가지 제한 사항이 있습니다. 특히 WS-Trust ActAs 패턴 및 SAML 아티팩트 확인 지원과 같은 프로토콜 기능이 필요한 앱은 마이그레이션할 수 없습니다.

Microsoft Entra ID는 SAML 프로토콜을 기반으로 하는 앱에 대해 SAML을 완벽히 지원하지만 Microsoft ID 플랫폼에서는 SAML을 사용하여 애플리케이션을 개발하기 위한 라이브러리나 기타 개발 도구를 제공하지 않습니다. 새 애플리케이션을 개발하는 경우 인증에 OIDC(OpenID Connect)를 사용하는 것이 좋습니다.

Microsoft Entra ID는 OpenID Connect를 완벽히 지원합니다. Microsoft는 OIDC 애플리케이션 개발을 용이하게 하기 위해 MSAL, Microsoft Identity Web 및 Azure SDK 라이브러리를 제공합니다. Microsoft ID 플랫폼의 OIDC(OpenID Connect)에서는 Microsoft Entra ID OIDC 지원에 대해 자세히 설명합니다. MSAL은 OIDC를 자동으로 지원합니다. MSAL은 앱이 리소스에 액세스하기 위한 권한 부여 요청을 비롯한 각 토큰 요청에서 OIDC ID 토큰을 항상 요청합니다.

토큰 수명

MSAL은 액세스 토큰의 만료 시간을 기준으로 ID 토큰 및 액세스 토큰을 캐시합니다. Microsoft Entra ID에서는 ID 토큰 및 액세스 토큰의 수명을 다르게 설정하므로 만료된 MSAL 캐시에서 만료된 ID 토큰을 받더라도 액세스 토큰의 수명은 아직 유효할 수 있습니다.

MSAL은 ID 토큰을 자동으로 갱신하지 않습니다. MSAL은 애플리케이션이 토큰을 요청할 때 액세스 토큰의 수명 종료 시나 수명 종료가 가까울 때 액세스 토큰을 갱신합니다. 이 시점에 MSAL은 새 ID 토큰을 요청합니다. OIDC를 구현하려면 ID 토큰에 exp(만료) 클레임을 사용하여 MSAL의 ForceRefresh 플래그로 ID 토큰 요청을 예약합니다.

MSAL 또는 MSAL 기반의 라이브러리에서 빌드할 수 없는 경우 OpenID Connect 표준을 사용하여 현재 사용자를 인증할 수 있습니다. 네이티브 앱이 관리형 디바이스에서 실행 중인지 확인하는 기능과 같은 네이티브 애플리케이션의 일부 기능은 MSAL을 사용하지 않으면 작동하지 않을 수 있습니다. MSAL에서 빌드하지 않는 경우의 지침은 개발하는 클라이언트 애플리케이션에서 인증 및 권한 부여의 복원력 향상을 참조하세요.

Microsoft Entra ID는 특정 Microsoft Graph 경로(https://graph.microsoft.com/oidc/userinfo)를 사용하여 Microsoft Entra ID OIDC 표준 지원의 일부로 UserInfo 엔드포인트를 구현합니다. UserInfo 엔드포인트가 반환하는 정보를 추가하거나 사용자 지정할 수는 없습니다. ID 토큰의 정보는 UserInfo 엔드포인트를 호출하여 반환되는 정보의 상위 집합이므로 UserInfo 엔드포인트를 호출하는 대신 ID 토큰을 사용하는 것이 좋습니다.

사용자 인증

애플리케이션이 Microsoft Entra ID 테넌트와 상호 작용하여 사용자를 인증합니다. 사용자를 인증하기 위해 애플리케이션은 브라우저를 https://login.microsoftonline.com/{tenant}/v2.0으로 보냅니다. 여기서 {tenant}는 테넌트의 ID 또는 도메인입니다. 그러나 ISV는 Microsoft Entra ID를 사용하여 광범위한 고객을 지원할 수 있는 다중 테넌트 애플리케이션을 빌드하는 것이 좋습니다. 다중 테넌트 애플리케이션의 경우 앱은 사용자가 인증될 때까지 사용자가 속한 테넌트를 알 수 없으므로 특정 테넌트 엔드포인트를 사용할 수 없습니다.

다중 테넌트 앱을 지원하기 위해 Microsoft Entra ID는 테넌트에 독립적인 다음과 같은 두 가지 OIDC/OAuth 2.0 엔드포인트를 제공합니다.

  • https://login.microsoftonline.com/common/v2.0 - 사용자가 임의의 Microsoft Entra ID 테넌트에 속한 경우 또는 outlook.com, skype.com, xbox.com, live.com, Hotmail.com 등 사이트의 소비자 Microsoft 계정이 있는 경우 앱을 인증할 수 있습니다.
  • https://login.microsoftonline.com/organizations/v2.0 - 사용자가 임의의 Microsoft Entra ID 테넌트에 속한 경우 앱을 인증할 수 있습니다.

이러한 엔드포인트를 사용하면 임의의 Microsoft Entra ID 테넌트의 모든 사용자가 애플리케이션을 인증할 수 있습니다. 특정 테넌트의 사용자만 허용하려면 해당 테넌트의 사용자만 앱에 액세스하도록 허용하는 논리를 구현합니다. 일반적인 구현 방법은 토큰의 iss(발급자) 또는 tid(테넌트 ID) 클레임을 기반으로 유지 관리하는 테넌트의 허용 목록으로 사용자를 필터링하는 것입니다.

Microsoft Entra ID 테넌트는 테넌트의 일반 멤버이거나 테넌트의 게스트 사용자일 수 있는 사용자를 지원합니다. 기본적으로 테넌트의 게스트 사용자는 기능이 제한됩니다. 예를 들어 게스트 사용자는 테넌트에 있는 다른 사용자의 전체 프로필을 볼 수 없습니다. B2B(Business to Business) 사용자라고도 하는 게스트 사용자를 사용하면 서로 다른 조직이 Microsoft Entra ID로 보호되는 도구 및 서비스를 통해 공동 작업할 수 있습니다. 테넌트의 SharePoint 파일에 액세스하도록 조직 외부의 사용자를 초대하는 시나리오를 예로 들 수 있습니다. 일반적으로 B2B 사용자는 메일 주소를 userid로 사용합니다. 하지만 같은 주소를 홈 테넌트에서 userid로 사용할 수 있습니다. 기본적으로 Microsoft Entra ID에서는 사용자가 userid를 입력하면 홈 테넌트로 로그인됩니다.

사용자가 B2B 사용자로 로그인되게 하려면 애플리케이션에서 사용자가 게스트인 특정 테넌트 엔드포인트를 사용해야 합니다. 애플리케이션에서 https://login.microsoftonline.com/organizations/v2.0 엔드포인트를 사용할 경우 사용자가 액세스할 테넌트를 지정할 수 있지만 사용자에게는 해당 기능을 발견하기 어려울 수 있습니다.

다음 단계