인증이란?
경고
이 콘텐츠는 이전의 Azure AD v1.0 엔드포인트에 대한 것입니다. 새로운 프로젝트에는 Microsoft ID 플랫폼을 사용합니다.
인증이란 ID 및 액세스 제어에 사용할 보안 주체를 만들기 위한 기반을 제공하도록 당사자에게 합법적인 자격 증명을 할 수 있게 챌린지하는 작업입니다. 간단히 말해서 사용자 자신이 본인임을 증명하게 하는 프로세스입니다. Authentication(인증)은 종종 AuthN으로 축약됩니다.
권한 부여란 인증된 보안 주체에게 작업을 수행할 수 있게 사용 권한을 부여하는 작업입니다. 액세스가 허용된 데이터 및 해당 데이터로 할 수 있는 작업을 지정합니다. Authorization(권한 부여)는 종종 AuthZ로 축약됩니다.
개발자용 Azure AD(Azure Active Directory)(v1.0)는 빠르게 코딩을 시작하는 데 도움이 되는 업계 표준 프로토콜(예: OAuth 2.0 및 OpenID Connect) 및 다양한 플랫폼용 오픈 소스 라이브러리를 지원하여 ID를 서비스로 제공함으로써 애플리케이션 개발자를 위한 인증을 간소화합니다.
Azure AD 프로그래밍 모델의 기본 사용 사례가 두 가지 있습니다.
- OAuth 2.0 권한 부여 흐름 동안 - 리소스 소유자가 클라이언트 애플리케이션에 권한을 부여하여 클라이언트에서 리소스 소유자의 리소스에 액세스할 수 있도록 허용합니다.
- 클라이언트에서 리소스에 액세스하는 동안 - 리소스 서버에서 구현하는 대로 액세스 토큰에 있는 클레임 값을 기반으로 하여 액세스 제어를 결정합니다.
Azure AD의 인증 기본 사항
ID가 필요한 가장 기본적인 시나리오를 가정하겠습니다. 예를 들어 웹 브라우저 사용자가 웹 애플리케이션에 대한 인증을 받아야 합니다. 다음 다이어그램은 이 시나리오를 보여줍니다.
다이어그램에 나온 다양한 구성 요소에 대해 알아야 할 사항은 다음과 같습니다.
- Azure AD는 ID 공급자입니다. ID 공급자는 조직의 디렉터리에 존재하는 사용자 및 애플리케이션의 ID를 확인하고 해당 사용자 및 애플리케이션을 성공적으로 인증하면 보안 토큰을 발급할 책임이 있습니다.
- Azure AD(Azure Active Directory)로 인증을 아웃소싱하려는 애플리케이션은 Azure AD에 등록해야 합니다. Azure AD는 앱을 디렉터리에 등록하고 고유하게 식별합니다.
- 개발자는 오픈 소스 Azure AD 인증 라이브러리를 사용하여 프로토콜 세부 정보를 처리함으로써 인증을 쉽게 수행할 수 있습니다. 자세한 내용은 Microsoft ID 플랫폼 v2.0 인증 라이브러리 및 v1.0 인증 라이브러리를 참조하세요.
- 사용자가 인증되면 애플리케이션에서 해당 사용자의 보안 토큰에 대한 유효성을 검사하여 인증에 성공했는지 확인해야 합니다. 애플리케이션이 수행해야 하는 것을 보여주는 빠른 시작, 자습서 및 코드 샘플을 다양한 언어 및 프레임워크에서 찾을 수 있습니다.
- 신속하게 앱을 빌드하고 토큰 가져오기, 토큰 새로 고치기, 사용자 로그인, 사용자 정보 표시 등의 기능을 추가하려면 문서의 빠른 시작 섹션을 참조하세요.
- 액세스 토큰 가져오기와 이를 Microsoft Graph API 및 다른 API에 대한 호출에서 사용하기처럼 상위 인증 개발자 작업을 위한 시나리오 기반 프로시저, OpenID Connect를 사용하여 기존의 웹 브라우저 기반 앱으로 Microsoft에 로그인 구현 등을 자세히 알아보려면 문서의 자습서 섹션을 참조하세요.
- 코드 샘플을 다운로드하려면 GitHub로 이동하세요.
- 인증 프로세스에 대한 요청의 흐름 및 응답은 OAuth 2.0, OpenID Connect, WS-Federation 또는 SAML 2.0과 같이 사용하는 인증 프로토콜에 의해 결정됩니다. 프로토콜에 대한 자세한 내용은 문서의 개념 > 인증 프로토콜 섹션을 참조하세요.
위에 나온 예제 시나리오에서는 이러한 두 역할에 따라 앱을 분류할 수 있습니다.
- 안전하게 리소스에 액세스해야 하는 앱
- 리소스 자체의 역할을 수행하는 앱
각 흐름에서 토큰 및 코드를 내보내는 방법
클라이언트를 빌드하는 방법에 따라 Azure AD에서 지원되는 인증 흐름 중 하나(또는 여러 개)를 사용할 수 있습니다. 이러한 흐름은 다양한 토큰(id_token, 새로 고침 토큰, 액세스 토큰) 및 인증 코드를 생성하고 작동하는 데 다른 토큰을 요구할 수 있습니다. 이 차트에서는 다음 개요를 제공합니다.
흐름 | 필수 사항 | id_token | 액세스 토큰 | 새로 고침 토큰 | 인증 코드 |
---|---|---|---|---|---|
인증 코드 흐름 | x | x | x | x | |
암시적 흐름 | x | x | |||
하이브리드 OIDC 흐름 | x | x | |||
새로 고침 토큰 상환 | 새로 고침 토큰 | x | x | x | |
On-Behalf-Of 흐름 | 액세스 토큰 | x | x | x | |
클라이언트 자격 증명 | x(앱 전용) |
암시적 모드를 통해 발급된 토큰은 URL(여기서 response_mode
는 query
또는 fragment
)을 통해 브라우저에 다시 전달되기 때문에 길이 제한이 있습니다. 일부 브라우저는 브라우저 표시줄에 배치할 수 있는 URL의 크기에 제한이 있으며 너무 길면 실패할 수 있습니다. 따라서 이러한 토큰은 groups
또는 wids
클레임을 포함하지 않습니다.
이제 기본 사항을 간략히 살펴보았으므로 ID 앱 모델 및 API 이해, Azure AD에서 프로비전이 작동하는 방법 및 Azure AD에서 지원하는 일반적인 시나리오에 대한 자세한 정보 링크를 살펴보세요.
애플리케이션 모델
Azure AD는 두 가지 주요 기능을 충족하도록 설계된 특정 모델을 따르는 애플리케이션을 나타냅니다.
지원되는 인증 프로토콜에 따라 앱을 식별 - 모든 식별자, URL, 비밀 및 인증 시 필요한 관련 정보를 열거해야 합니다. 여기서 Azure AD는
- 런타임 시 인증을 지원하는 데 필요한 모든 데이터를 보유합니다.
- 앱이 액세스해야 하는 리소스 및 어떠한 상황에서 지정된 요청이 충족되어야 하는지 여부를 결정하기 위한 모든 데이터를 보유합니다.
- 앱 개발자의 테넌트 내 및 다른 Azure AD 테넌트에서 앱 프로비전을 구현하기 위해 인프라를 제공합니다.
토큰 요청 시간 동안 사용자 동의 처리 및 테넌트에서 앱의 동적 프로비전을 용이하게 함 - 여기서 Azure AD는
- 앱이 대신 리소스에 액세스하는 데 관해 사용자 및 관리자가 동적으로 권한을 부여하거나 동의를 거부할 수 있도록 설정합니다.
- 관리자가 궁극적으로 앱이 수행할 수 있는 작업, 특정 앱을 사용할 수 있는 사용자 및 디렉터리 리소스에 액세스하는 방식을 결정하도록 설정합니다.
Azure AD에서 애플리케이션 개체는 추상 엔터티로 애플리케이션을 설명합니다. 개발자는 애플리케이션을 사용하여 작업합니다. 배포 시 Azure AD는 디렉터리 또는 테넌트 내에서 애플리케이션의 구체적인 인스턴스를 나타내는 서비스 주체를 만들기 위한 청사진으로 지정된 애플리케이션 개체를 사용합니다. 특정 대상 디렉터리에서 앱이 실제로 수행할 수 있는 작업, 앱을 사용할 수 있는 대상, 앱이 액세스할 수 있는 리소스 등을 정의하는 서비스 주체입니다. Azure AD는 동의를 통해 애플리케이션 개체에서 서비스 주체를 만듭니다.
다음 다이어그램에는 동의를 통해 구동되는 간소화된 Azure AD 프로비전 흐름이 나와 있습니다. 두 개의 테넌트(A 및 B)가 있는데, 테넌트 A는 애플리케이션을 소유하고 있고, 테넌트 B는 서비스 주체를 통해 애플리케이션을 인스턴스화하고 있습니다.
이 프로비전 흐름에서
- 테넌트 B의 사용자가 앱에 로그인하려고 시도하면 권한 부여 엔드포인트에서 애플리케이션의 토큰을 요청합니다.
- 인증에 필요한 사용자 자격 증명을 획득하여 확인
- 테넌트 B에 대한 액세스 권한을 얻으려면 앱에 동의하라는 메시지가 사용자에게 표시됨
- Azure AD에서 테넌트 A의 애플리케이션 개체를 테넌트 B의 서비스 주체를 만들기 위한 청사진으로 사용
- 사용자가 요청된 토큰 수신
다른 테넌트(C, D 등)에서 원하는 횟수만큼 이 프로세스를 반복할 수 있습니다. 테넌트 A에서 앱(애플리케이션 개체)에 대한 청사진을 유지합니다. 앱에 동의한 다른 모든 테넌트의 사용자 및 관리자는 각 테넌트에서 해당하는 서비스 주체 개체를 통해 애플리케이션이 수행할 수 있는 작업에 대한 컨트롤을 유지합니다. 자세한 내용은 Microsoft ID 플랫폼의 애플리케이션 및 서비스 주체 개체를 참조하세요.
Azure AD 보안 토큰의 클레임
Azure AD에서 발급하는 보안 토큰(액세스 및 ID 토큰)에는 인증된 주체에 대한 클레임 또는 어설션 정보가 포함됩니다. 애플리케이션은 다음을 포함한 다양한 작업에 대한 클레임을 사용할 수 있습니다.
- 토큰 유효성 검사
- 주체의 디렉터리 테넌트 식별
- 사용자 정보 표시
- 주체의 권한 부여 확인
임의의 지정된 보안 토큰에 있는 클레임은 토큰 형식, 사용자 인증에 사용되는 자격 증명 유형, 애플리케이션 구성 등에 따라 다릅니다.
아래 표에서는 Azure AD에서 내보내는 각 클레임 유형에 대해 간략하게 설명합니다. 자세한 내용은 Azure AD에서 발급한 액세스 토큰 및 ID 토큰을 참조하세요.
클레임 | 설명 |
---|---|
애플리케이션 ID | 토큰을 사용 중인 애플리케이션을 식별합니다. |
사용자 | 토큰의 의도된 받는 사람 리소스를 식별합니다. |
애플리케이션 인증 컨텍스트 클래스 참조 | 클라이언트가 인증된 방법을 나타냅니다(공용 클라이언트 또는 기밀 클라이언트). |
인증 인스턴트 | 인증이 발생한 날짜 및 시간을 기록합니다. |
인증 방법 | 토큰의 주체가 인증된 방법을 나타냅니다(예: 암호, 인증서 등). |
이름 | Azure AD에서 설정된 사용자 이름을 제공합니다. |
그룹 | 사용자가 속한 Azure AD 그룹의 개체 ID를 포함합니다. |
ID 공급자 | 토큰의 주체를 인증한 ID 공급자를 기록합니다. |
발급 시간 | 토큰이 발급된 시간을 기록합니다. 종종 토큰 새로 고침에 사용됩니다. |
발급자 | 토큰을 내보낸 STS 및 Azure AD 테넌트를 식별합니다. |
성 | Azure AD에서 설정된 사용자 성을 제공합니다. |
이름 | 토큰의 주체를 식별하는, 사람이 인식할 수 있는 값을 제공합니다. |
개체 ID | Azure AD의 주체에 대한 변경 불가능한 고유 식별자를 포함합니다. |
역할 | 사용자에게 부여된 Azure AD 애플리케이션 역할의 이름을 포함합니다. |
범위 | 클라이언트 애플리케이션에 부여된 권한을 나타냅니다. |
제목 | 토큰에서 어설션하는 정보의 주체를 나타냅니다. |
테넌트 ID | 토큰을 발급한 디렉터리 테넌트에 대한 변경 불가능한 고유 식별자를 포함합니다. |
토큰 수명 | 토큰이 유효한 시간 간격을 정의합니다. |
사용자 계정 이름 | 주체의 사용자 계정 이름을 포함합니다. |
버전 | 토큰의 버전 번호를 포함합니다. |
다음 단계
- Microsoft ID 플랫폼에서 지원되는 애플리케이션 유형 및 시나리오에 대해 알아봅니다.