Microsoft ID 플랫폼 앱 형식 및 인증 흐름

Microsoft ID 플랫폼은 다양한 종류의 최신 애플리케이션 아키텍처에 대한 인증을 지원합니다. 모든 아키텍처는 OAuth 2.0 또는 OpenID Connect 업계 표준 프로토콜을 기반으로 합니다. Microsoft ID 플랫폼용 인증 라이브러리를 사용하여 애플리케이션에서 ID를 인증하고 토큰을 획득하여 보호된 API에 액세스합니다.

이 문서에서는 인증 흐름 및 이러한 흐름이 사용되는 애플리케이션 시나리오에 대해 설명합니다.

애플리케이션 범주

보안 토큰은 다음을 포함한 여러 형식의 애플리케이션에서 얻을 수 있습니다.

  • 웹앱
  • 모바일 앱
  • 데스크톱 앱
  • Web API

브라우저를 포함하지 않거나 IoT(사물 인터넷)에서 실행되고 있는 디바이스에서 실행되는 앱에서 토큰을 가져올 수도 있습니다.

다음 섹션에서는 애플리케이션의 범주에 대해 설명합니다.

보호된 리소스 및 클라이언트 애플리케이션

인증 시나리오에는 두 가지 작업이 포함됩니다.

  • 보호된 웹 API에 대한 보안 토큰 획득: Microsoft에서 개발하고 지원하는 MSAL(Microsoft 인증 라이브러리)을 사용하는 것이 좋습니다.
  • 웹 API 또는 웹앱 보호: 이러한 리소스를 보호할 때 한 가지 과제는 보안 토큰의 유효성을 검사하는 것입니다. 일부 플랫폼의 경우 Microsoft에서 미들웨어 라이브러리를 제공합니다.

사용자 포함 또는 사용자 없음

대부분의 인증 시나리오에서는 로그인한 사용자를 대신하여 토큰을 획득합니다.

사용자 포함 시나리오

그러나 디먼 앱도 있습니다. 이러한 시나리오에서는 애플리케이션이 사용자 없이 스스로 토큰을 획득합니다.

디먼 앱이 있는 시나리오

단일 페이지, 퍼블릭 클라이언트 및 기밀 클라이언트 애플리케이션

보안 토큰은 여러 유형의 애플리케이션에서 획득할 수 있습니다. 이러한 애플리케이션은 다음과 같은 세 가지 범주로 구분되는 경향이 있습니다. 각 라이브러리는 서로 다른 라이브러리와 개체에 사용됩니다.

  • 단일 페이지 애플리케이션: SPA라고도 하는 이 앱은 브라우저에서 실행되는 JavaScript 또는 TypeScript 앱이 토큰을 획득하는 웹앱입니다. 대부분의 최신 앱에는 기본적으로 JavaScript로 작성된 단일 페이지 애플리케이션이 프런트 엔드에 위치합니다. 애플리케이션은 종종 Angular, React 또는 Vue와 같은 프레임워크를 사용합니다. MSAL.js는 단일 페이지 애플리케이션을 지원하는 유일한 Microsoft 인증 라이브러리입니다.

  • 퍼블릭 클라이언트 애플리케이션: 이 범주의 입은 다음 유형과 같이 항상 로그인 사용자입니다.

    • 로그인한 사용자를 대신하여 웹 API를 호출하는 데스크톱 앱
    • Mobile Apps
    • 브라우저가 없는 디바이스에서 실행되는 앱(예: IoT에서 실행되는 앱)
  • 기밀 클라이언트 애플리케이션:이 범주의 앱은 다음과 같습니다.

    • 웹 API를 호출하는 웹앱
    • 웹 API를 호출하는 웹 API
    • 디먼 앱(Linux 디먼 또는 Windows 서비스와 같은 콘솔 서비스로 구현된 경우에도 해당)

로그인 대상 그룹

사용 가능한 인증 흐름은 로그인 대상 그룹에 따라 달라집니다. 일부 흐름은 회사 또는 학교 계정에서만 사용할 수 있습니다. 다른 흐름은 회사/학교 계정과 개인 Microsoft 계정 모두에 사용할 수 있습니다.

자세한 내용은 지원되는 계정 유형을 참조하세요.

애플리케이션 형식

Microsoft ID 플랫폼은 다음 앱 아키텍처에 대한 인증을 지원합니다.

  • 단일 페이지 앱
  • 웹앱
  • Web API
  • Mobile Apps
  • 네이티브 앱
  • 디먼 앱
  • 서버 쪽 앱

애플리케이션은 다양한 인증 흐름을 사용하여 사용자를 로그인하고, 토큰을 가져와서 보호된 API를 호출합니다.

단일 페이지 애플리케이션

많은 최신 웹앱이 클라이언트 쪽 단일 페이지 애플리케이션으로 빌드됩니다. 이러한 애플리케이션은 JavaScript 또는 Angular, Vue, React 같은 프레임워크를 사용합니다. 이러한 애플리케이션은 웹 브라우저에서 실행됩니다.

단일 페이지 애플리케이션은 인증 특성 측면에서 기존의 서버 쪽 웹앱과 다릅니다. Microsoft ID 플랫폼을 사용하면 단일 페이지 애플리케이션에서 사용자를 로그인하고 토큰을 가져와서 백 엔드 서비스 또는 웹 API에 액세스할 수 있습니다. Microsoft ID 플랫폼은 JavaScript 애플리케이션에 대한 두 가지 권한 부여 유형을 제공합니다.

MSAL.js(2.x) MSAL.js(1.x)
단일 페이지 애플리케이션 인증 단일 페이지 애플리케이션 암시적

사용자를 로그인하는 웹앱

사용자를 로그인하는 웹앱

사용자를 로그인하는 웹앱을 보호하려면

  • .NET에서 개발하는 경우 ASP.NET OpenID Connect 미들웨어에서 ASP.NET 또는 ASP.NET Core를 사용합니다. 리소스를 보호하려면 보안 토큰의 유효성을 검사해야 하며, 이 작업은 MSAL 라이브러리가 아닌 .NET용 IdentityModel 확장을 통해 수행됩니다.

  • Node.js에서 개발하는 경우 MSAL 노드를 사용합니다.

자세한 내용은 사용자를 로그인하는 웹앱을 참조하세요.

사용자를 로그인하고 사용자를 대신하여 웹 API를 호출하는 웹앱

웹 API를 호출하는 웹앱

웹앱에서 사용자를 대신하여 웹 API를 호출하려면 권한 부여 코드 흐름을 사용하여 획득한 토큰을 토큰 캐시에 저장합니다. 필요한 경우 MSAL은 토큰을 새로 고치고, 컨트롤러는 캐시에서 토큰을 자동으로 가져옵니다.

자세한 내용은 웹 API를 호출하는 웹앱을 참조하세요.

로그인한 사용자를 대신하여 웹 API를 호출하는 데스크톱 앱

데스크톱 앱에서 사용자를 로그인하는 웹 API를 호출하려면 MSAL의 대화형 토큰 획득 메서드를 사용합니다. 이러한 대화형 메서드를 사용하면 로그인 UI 환경을 제어할 수 있습니다. MSAL은 이 상호 작용에 웹 브라우저를 사용합니다.

웹 API를 호출하는 데스크톱 앱

Windows 도메인이나 Microsoft Entra ID로 조인된 컴퓨터의 Windows 호스트된 애플리케이션에 대한 또 다른 가능성이 있습니다. 이러한 애플리케이션은 Windows 통합 인증을 사용하여 토큰을 자동으로 가져올 수 있습니다.

브라우저 없이 디바이스에서 실행되는 애플리케이션은 여전히 사용자를 대신하여 API를 호출할 수 있습니다. 인증하려면 사용자가 웹 브라우저를 사용하는 다른 디바이스에 로그인해야 합니다. 이 시나리오에서는 디바이스 코드 흐름을 사용해야 합니다.

디바이스 코드 흐름

이를 사용하지 않는 것이 좋지만, 사용자 이름/암호 흐름은 퍼블릭 클라이언트 애플리케이션에서 사용할 수 있습니다. 이 흐름은 여전히 DevOps와 같은 일부 시나리오에서 필요합니다.

사용자 이름/암호 흐름을 사용하면 애플리케이션이 제한됩니다. 예를 들어, 애플리케이션은 다단계 인증이나 Microsoft Entra ID의 조건부 액세스 도구를 사용해야 하는 사용자를 로그인할 수 없습니다. 또한 애플리케이션에서 Single Sign-On의 이점을 누릴 수 없습니다. 사용자 이름/암호 흐름을 사용하는 인증은 최신 인증 원칙에 위반되며, 레거시 용도로만 제공됩니다.

데스크톱 앱에서 토큰 캐시를 영구적으로 유지하려면 토큰 캐시 직렬화를 사용자 지정할 수 있습니다. 이중 토큰 캐시 직렬화를 구현하면 이전 버전 및 이후 버전과 호환되는 토큰 캐시를 사용할 수 있습니다.

자세한 내용은 웹 API를 호출하는 데스크톱 앱을 참조하세요.

대화형 사용자를 대신하여 웹 API를 호출하는 모바일 앱

데스크톱 앱과 비슷하게 모바일 앱도 MSAL의 대화형 토큰 획득 메서드를 호출하여 웹 API를 호출하기 위한 토큰을 획득합니다.

웹 API를 호출하는 모바일 앱

MSAL iOS 및 MSAL Android는 기본적으로 시스템 웹 브라우저를 사용합니다. 그러나 포함된 웹 보기를 대신 사용하도록 지시할 수 있습니다. UWP(유니버설 Windows 플랫폼), iOS, Android 중 어떤 모바일 플랫폼이냐에 따라 각기 다른 특이점이 있습니다.

디바이스 ID 또는 디바이스 등록과 관련된 조건부 액세스가 포함된 일부 시나리오에서는 broker를 디바이스에 설치해야 합니다. broker의 예로는 Android의 Microsoft 회사 포털과 Android 및 iOS의 Microsoft Authenticator가 있습니다. MSAL은 이제 broker와 상호 작용할 수 있습니다. Broker에 대한 자세한 내용은 Android 및 iOS에서 Broker 활용을 참조하세요.

자세한 내용은 웹 API를 호출하는 모바일 앱을 참조하세요.

참고 항목

Xamarin에서 MSAL.iOS, MSAL.Android 또는 MSAL.NET을 사용하는 모바일 앱에는 앱 보호 정책이 적용될 수 있습니다. 예를 들어 정책을 사용하면 사용자가 보호된 텍스트를 복사하지 못할 수 있습니다. 모바일 앱은 Intune에서 관리하고, Intune에서 관리형 앱으로 인식합니다. 자세한 내용은 Microsoft Intune App SDK 개요를 참조하세요.

Intune App SDK는 MSAL 라이브러리와 별개이며 자체적으로 Microsoft Entra ID와 상호 작용합니다.

보호된 웹 API

Microsoft ID 플랫폼 엔드포인트를 사용하여 앱의 RESTful API와 같은 웹 서비스를 보호할 수 있습니다. 보호된 웹 API는 액세스 토큰을 통해 호출됩니다. 토큰은 API의 데이터를 보호하고 들어오는 요청을 인증하는 데 도움이 됩니다. 웹 API 호출자는 액세스 토큰을 HTTP 요청의 인증 헤더에 추가합니다.

ASP.NET 또는 ASP.NET Core 웹 API를 보호하려면 액세스 토큰의 유효성을 검사합니다. 이 유효성 검사를 위해 ASP.NET JWT 미들웨어를 사용합니다. 유효성 검사는 MSAL.NET이 아니라 .NET용 IdentityModel 확장 라이브러리에서 수행합니다.

자세한 내용은 보호된 웹 API를 참조하세요.

사용자를 대신하여 다른 웹 API를 호출하는 웹 API

보호된 웹 API가 사용자를 대신하여 다른 웹 API를 호출하려면 앱에서 다운스트림 웹 API에 대한 토큰을 가져와야 합니다. 이러한 호출을 '서비스 간' 호출이라고도 합니다. 다른 웹 API를 호출하는 웹 API는 사용자 지정 캐시 직렬화를 제공해야 합니다.

다른 웹 API를 호출하는 웹 API

자세한 내용은 웹 API를 호출하는 웹 API를 참조하세요.

디먼 이름으로 웹 API를 호출하는 디먼 앱

장기 실행 프로세스가 있거나 사용자 상호 작용 없이 작동하는 앱에도 보안 웹 API에 액세스할 수 있는 방법이 필요합니다. 이러한 앱은 앱의 ID를 사용하여 인증하고 토큰을 가져올 수 있습니다. 앱은 클라이언트 비밀 또는 인증서를 사용하여 해당 ID를 증명합니다.

MSAL의 클라이언트 자격 증명 획득 메서드를 사용하여 호출 앱에 대한 토큰을 획득하는 이러한 디먼 앱을 작성할 수 있습니다. 이러한 방법을 사용하려면 Microsoft Entra ID의 앱 등록에 추가하는 클라이언트 암호가 필요합니다. 그런 다음, 앱에서 이 비밀을 호출된 디먼과 공유합니다. 이러한 비밀의 예로는 애플리케이션 암호, 인증서 어설션, 클라이언트 어설션이 있습니다.

다른 앱 및 API에서 호출하는 디먼 앱

자세한 내용은 웹 API를 호출하는 디먼 애플리케이션을 참조하세요.

시나리오 및 지원되는 인증 흐름

인증 흐름을 사용하여 토큰을 요청하는 애플리케이션 시나리오를 구현합니다. 애플리케이션 시나리오와 인증 흐름 간에는 일대일 매핑이 없습니다.

토큰 획득과 관련된 시나리오는 OAuth 2.0 인증 흐름에도 적용됩니다. 자세한 내용은 Microsoft ID 플랫폼의 OAuth 2.0 및 OpenID Connect 프로토콜을 참조하세요.

시나리오 자세한 시나리오 연습 OAuth 2.0 흐름 및 권한 부여 대상
권한 부여 코드가 있는 단일 페이지 앱 단일 페이지 앱 PKCE가 있는 권한 부여 코드 회사 또는 학교 계정, 개인 계정 및 Azure AD B2C(Azure Active Directory B2C)
암시적이 있는 단일 페이지 앱 단일 페이지 앱 암시적 회사 또는 학교 계정, 개인 계정 및 Azure AD B2C(Azure Active Directory B2C)
사용자가 로그인하는 웹앱 사용자가 로그인하는 웹앱 인증 코드 회사/학교 계정, 개인 계정 및 Azure AD B2C
Web API를 호출하는 웹앱 Web API를 호출하는 웹앱 인증 코드 회사/학교 계정, 개인 계정 및 Azure AD B2C
웹 API를 호출하는 데스크톱 앱 웹 API를 호출하는 데스크톱 앱 대화형(PKCE가 있는 권한 부여 코드 사용) 회사/학교 계정, 개인 계정 및 Azure AD B2C
Windows 통합 인증 회사 또는 학교 계정
리소스 소유자 암호 회사/학교 계정 및 Azure AD B2C
브라우저 없는 애플리케이션 디바이스 코드 회사/학교 계정, 개인 계정(Azure AD B2C 제외)
웹 API를 호출하는 모바일 앱 웹 API를 호출하는 모바일 앱 대화형(PKCE가 있는 권한 부여 코드 사용) 회사/학교 계정, 개인 계정 및 Azure AD B2C
리소스 소유자 암호 회사/학교 계정 및 Azure AD B2C
웹 API를 호출하는 디먼 앱 웹 API를 호출하는 디먼 앱 클라이언트 자격 증명 사용자가 없으며 Microsoft Entra 조직에서만 사용되는 앱 전용 권한입니다.
웹 API를 호출하는 웹 API 웹 API를 호출하는 웹 API On-Behalf-Of 회사/학교 계정 및 개인 계정

시나리오 및 지원되는 플랫폼과 언어

Microsoft 인증 라이브러리에서 지원하는 여러 플랫폼은 다음과 같습니다.

  • .NET
  • .NET Framework
  • Java
  • JavaScript
  • macOS
  • 네이티브 Android
  • 네이티브 iOS
  • Node.js
  • Python
  • Windows 10/UWP
  • Xamarin.iOS
  • Xamarin.Android

다양한 언어를 사용하여 애플리케이션을 빌드할 수도 있습니다.

다음 표의 Windows 열에서 .NET을 멘션 때마다 .NET Framework도 가능합니다. 복잡한 표가 되지 않도록 후자는 생략되었습니다.

시나리오 Windows Linux Mac iOS Android
단일 페이지 앱
단일 페이지 앱 인증
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js MSAL.js MSAL.js
MSAL.js
단일 페이지 앱
단일 페이지 앱 암시적
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js MSAL.js MSAL.js
MSAL.js
사용자가 로그인하는 웹앱
사용자를 로그인하는 웹앱
ASP.NET Core
ASP.NET Core MSAL 노드
MSAL 노드
ASP.NET Core
ASP.NET Core MSAL 노드
MSAL 노드
ASP.NET Core
ASP.NET Core MSAL 노드
MSAL 노드
Web API를 호출하는 웹앱

Web API를 호출하는 웹앱
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 노드
MSAL 노드
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 노드
MSAL 노드
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 노드
MSAL 노드
웹 API를 호출하는 데스크톱 앱

웹 API를 호출하는 데스크톱 앱디바이스 코드 흐름
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python
MSAL 노드
MSAL 노드
iOS /Objective C 또는 swift MSAL.objc
웹 API를 호출하는 모바일 앱
웹 API를 호출하는 모바일 앱
UWP MSAL.NET Xamarin MSAL.NET iOS /Objective C 또는 swift MSAL.objc Android MSAL.Android
디먼 앱
디먼 앱
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NET MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
웹 API를 호출하는 웹 API

웹 API를 호출하는 웹 API
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NET
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드
.NET
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 노드
MSAL 노드

자세한 내용은 Microsoft ID 플랫폼 인증 라이브러리를 참조하세요.

다음 단계

인증에 대한 자세한 내용은 다음을 참조하세요.