개발하는 클라이언트 애플리케이션에서 인증 및 권한 부여의 복원력 향상

Microsoft ID 플랫폼 및 Microsoft Entra ID를 사용하여 사용자를 로그인하고 해당 사용자를 대신하여 작업을 수행하는 클라이언트 애플리케이션에 복원력을 빌드하는 방법을 알아봅니다.

MSAL(Microsoft 인증 라이브러리) 사용

MSAL(Microsoft 인증 라이브러리)은 Microsoft ID 플랫폼의 일부입니다. MSAL은 토큰을 획득, 관리, 캐시 및 새로 고칩니다. 복원력을 위한 모범 사례를 사용합니다. MSAL은 개발자가 안전한 솔루션을 만들 수 있도록 도와줍니다.

자세히 보기:

MSAL은 토큰을 캐시하고 자동 토큰 획득 패턴을 사용합니다. MSAL은 기본적으로 UWP(유니버설 Windows 플랫폼), iOS 및 Android와 같은 보안 스토리지를 제공하는 운영 체제에서 토큰 캐시를 직렬화합니다. 다음을 사용할 때 직렬화 동작을 사용자 지정합니다.

  • Microsoft.Identity.Web
  • MSAL.NET
  • Java용 MSAL
  • Python용 MSAL

자세히 보기:

MSAL을 사용하는 경우 토큰 캐싱, 새로 고침 및 자동 획득이 지원됩니다. 간단한 패턴을 사용하여 인증을 위한 토큰을 얻습니다. 많은 언어를 지원합니다. Microsoft ID 플랫폼 코드 샘플에서 코드 샘플을 찾아보세요.

try
{
    result = await app.AcquireTokenSilent(scopes, account).ExecuteAsync();
}
catch(MsalUiRequiredException ex)
{
    result = await app.AcquireToken(scopes).WithClaims(ex.Claims).ExecuteAsync()
}

MSAL은 토큰을 새로 고칠 수 있습니다. Microsoft ID 플랫폼이 수명이 긴 토큰을 발급하면 클라이언트에 정보를 보내 토큰을 새로 고칠 수 있습니다(refresh_in). 이전 토큰이 유효한 동안 앱이 실행되지만 다른 토큰을 획득하려면 더 오래 걸립니다.

MSAL 릴리스

인증은 앱 보안의 일부이므로 개발자는 최신 MSAL 릴리스를 사용하는 프로세스를 빌드하는 것이 좋습니다. 개발 중인 라이브러리에 이 사례를 사용하고 앱 복원력을 개선합니다.

최신 버전 및 릴리스 정보 찾기:

토큰 처리에 복원력 있는 패턴

MSAL을 사용하지 않는 경우 토큰 처리에 탄력적 패턴을 사용합니다. MSAL 라이브러리는 모범 사례를 구현합니다.

일반적으로 최신 인증을 사용하는 애플리케이션은 엔드포인트를 호출하여 사용자를 인증하는 토큰을 검색하거나 보호된 API를 호출하도록 애플리케이션에 권한을 부여합니다. MSAL은 인증을 처리하고 패턴을 구현하여 복원력을 개선시킵니다. MSAL을 사용하지 않는 경우 모범 사례를 위해 이 섹션의 지침을 사용합니다. 그렇지 않으면 MSAL은 모범 사례를 자동으로 구현합니다.

토큰 캐시

앱이 Microsoft ID 플랫폼에서 토큰을 정확하게 캐시하도록 합니다. 앱이 토큰을 받은 후 토큰이 포함된 HTTP 응답에는 캐시 기간 및 재사용 시기를 나타내는 expires_in 속성이 있습니다. 애플리케이션이 API 액세스 토큰을 디코딩하려고 시도하지 않는지 확인합니다.

애플리케이션을 실행하는 디바이스의 토큰 캐시를 통해 Microsoft ID 플랫폼 호출하는 앱의 다이어그램입니다.

캐시된 토큰은 앱과 Microsoft ID 플랫폼 간의 불필요한 트래픽을 방지합니다. 이 시나리오는 토큰 획득 호출을 줄임으로써 앱이 토큰 획득 실패에 덜 취약하도록 만듭니다. 캐시된 토큰은 앱이 토큰 획득을 덜 자주 차단하기 때문에 애플리케이션 성능을 개선시킵니다. 사용자는 토큰 수명 동안 애플리케이션에 로그인한 상태를 유지합니다.

토큰 직렬화 및 유지

앱 인스턴스 간에 토큰을 유지하기 위해 앱이 토큰 캐시를 안전하게 직렬화하는지 확인합니다. 수명 동안 토큰을 재사용합니다. 새로 고침 토큰과 액세스 토큰은 여러 시간 동안 발급됩니다. 이 시간 동안 사용자는 애플리케이션을 여러 번 시작할 수 있습니다. 앱이 시작되면 유효한 액세스 또는 새로 고침 토큰을 찾는지 확인합니다. 이렇게 하면 앱 복원력과 성능이 향상됩니다.

자세히 보기:

영구 토큰 스토리지에 사용자-소유자 또는 프로세스 ID와 관련하여 액세스 제어 및 암호화가 있는지 확인합니다. 다양한 운영 체제에는 자격 증명 스토리지 기능이 있습니다.

토큰 자동 획득

사용자를 인증하거나 API 호출 권한을 검색하려면 Microsoft ID 플랫폼에서 여러 단계를 거쳐야 합니다. 예를 들어, 처음으로 로그인하는 사용자는 자격 증명을 입력하고 다단계 인증을 수행합니다. 각 단계는 서비스를 제공하는 리소스에 영향을 미칩니다. 종속성이 가장 적은 최상의 사용자 환경은 자동 토큰 획득입니다.

사용자 인증 또는 권한 부여를 완료하는 데 도움이 되는 Microsoft ID 플랫폼 서비스의 다이어그램

자동 토큰 획득은 앱 토큰 캐시의 유효한 토큰으로 시작됩니다. 유효한 토큰이 없는 경우 앱은 사용 가능한 새로 고침 토큰과 토큰 엔드포인트를 사용하여 토큰을 획득하려고 시도합니다. 두 옵션을 모두 사용할 수 없는 경우 앱은 prompt=none 매개 변수를 사용하여 토큰을 획득합니다. 이 작업은 권한 부여 엔드포인트를 사용하지만 사용자에게 UI가 표시되지 않습니다. 가능한 경우 Microsoft ID 플랫폼은 사용자 상호 작용 없이 앱에 토큰을 제공합니다. 어떤 방법으로도 토큰이 생성되지 않으면 사용자가 수동으로 다시 인증합니다.

참고 항목

일반적으로 앱이 '로그인' 및 '동의'와 같은 프롬프트를 사용하지 않도록 합니다. 이러한 프롬프트는 상호 작용이 필요하지 않을 때 사용자 상호 작용을 강제합니다.

응답 코드 처리

다음 섹션을 사용하여 응답 코드에 대해 알아봅니다.

HTTP 429 응답 코드

복원력에 영향을 미치는 오류 응답이 있습니다. 애플리케이션이 HTTP 429 응답 코드인 너무 많은 요청을 수신하면 Microsoft ID 플랫폼에서 요청을 제한합니다. 앱이 너무 많은 요청을 하면 앱이 토큰을 받지 못하도록 제한됩니다. Retry-After 응답 필드 시간이 완료되기 전에 앱이 토큰 획득을 시도하도록 허용하지 마세요. 종종 429 응답은 애플리케이션이 토큰을 올바르게 캐싱하고 재사용하지 않음을 나타냅니다. 애플리케이션에서 토큰이 캐시되고 재사용되는 방식을 확인합니다.

HTTP 5x 응답 코드

애플리케이션이 HTTP 5x 응답 코드를 수신하는 경우 앱은 빠른 다시 시도 루프에 들어가지 않아야 합니다. 429 응답에 대해 동일한 처리를 사용합니다. Retry-After 헤더가 표시되지 않으면 응답 후 최소 5초 후에 첫 번째 다시 시도로 지수 백오프 다시 시도를 구현합니다.

요청 시간이 초과되면 즉각적인 다시 시도는 권장되지 않습니다. 응답 후 5초 이상이 지났을 때 다시 시도하여 지수 백오프 재시도를 구현합니다.

많은 애플리케이션과 API는 권한 부여를 위해 사용자 정보가 필요합니다. 사용 가능한 방법에는 장점과 단점이 있습니다.

토큰

ID 토큰 및 액세스 토큰에는 정보를 제공하는 표준 클레임이 있습니다. 필요한 정보가 토큰에 있는 경우 다른 네트워크 호출을 방지하기 때문에 가장 효율적인 기술은 토큰 클레임입니다. 네트워크 호출이 적을수록 복원력이 향상됩니다.

자세히 보기:

참고 항목

일부 애플리케이션은 UserInfo 엔드포인트를 호출하여 인증된 사용자에 대한 클레임을 검색합니다. ID 토큰의 정보는 UserInfo 엔드포인트 정보의 상위 집합입니다. UserInfo 엔드포인트를 호출하는 대신 ID 토큰을 사용하도록 앱을 사용 설정합니다.

그룹과 같은 선택적 클레임으로 표준 토큰 클레임을 보강합니다. 애플리케이션 그룹 옵션에는 애플리케이션에 할당된 그룹이 포함됩니다. 모두 또는 보안 그룹 옵션에는 토큰에 그룹을 추가할 수 있는 동일한 테넌트에 있는 앱의 그룹이 포함됩니다. 토큰 팽창을 유발하고 그룹을 가져오기 위해 더 많은 호출을 요구함으로써 토큰에서 그룹 요청의 효율성을 무효화할 수 있으므로 효과를 평가합니다.

자세히 보기:

고객이 포털 또는 API를 사용하여 관리하는 앱 역할을 사용하고 포함하는 것이 좋습니다. 사용자 및 그룹에 역할을 할당하여 액세스를 제어합니다. 토큰이 발급되면 할당된 역할은 토큰 역할 클레임에 있습니다. 토큰에서 파생된 정보는 더 많은 API 호출을 방지합니다.

애플리케이션에서 앱 역할을 추가하고 토큰에서 수신을 참조하세요.

테넌트 정보를 기반으로 클레임을 추가합니다. 예를 들어, 확장에는 엔터프라이즈별 사용자 ID가 있습니다.

디렉터리의 정보를 토큰에 추가하는 것이 효율적이며 종속성을 줄여 복원력을 높입니다. 토큰을 획득할 수 없기 때문에 복원력 문제는 해결하지 않습니다. 애플리케이션의 기본 시나리오에 대한 선택적 클레임을 추가합니다. 앱에 관리 기능에 대한 정보가 필요한 경우 애플리케이션은 필요에 따라 해당 정보를 가져올 수 있습니다.

Microsoft Graph

Microsoft Graph에는 생산성 패턴, ID 및 보안에 대한 Microsoft 365 데이터에 액세스할 수 있는 통합 API 엔드포인트가 있습니다. Microsoft Graph를 사용하는 애플리케이션은 권한 부여를 위해 Microsoft 365 정보를 사용할 수 있습니다.

앱에서 Microsoft 365에 액세스하려면 하나의 토큰이 필요합니다. 이는 여러 토큰이 필요한 Microsoft Exchange 또는 Microsoft SharePoint와 같은 이전 Microsoft 365 구성 요소용 API보다 더 탄력적입니다.

Microsoft Graph API를 사용하는 경우 Microsoft Graph에 액세스하는 복원력 있는 애플리케이션 빌드를 간소화하는 Microsoft Graph SDK를 사용합니다.

Microsoft Graph SDK 개요를 참조하세요.

권한 부여를 위해 일부 Microsoft Graph 호출 대신 토큰 클레임을 사용하는 것이 좋습니다. 그룹, 앱 역할 및 토큰의 선택적 클레임을 요청합니다. 권한 부여를 위한 Microsoft Graph에는 Microsoft ID 플랫폼 및 Microsoft Graph에 의존하는 더 많은 네트워크 호출이 필요합니다. 그러나 애플리케이션이 Microsoft Graph를 데이터 레이어로 사용하는 경우 권한 부여를 위한 Microsoft Graph가 더 이상 위험하지 않습니다.

모바일 디바이스에서 broker 인증 사용

모바일 디바이스에서 Microsoft Authenticator와 같은 인증 브로커는 복원력을 개선시킵니다. 인증 브로커는 사용자 및 디바이스에 대한 클레임과 함께 PRT(기본 새로 고침 토큰)를 사용합니다. 디바이스에서 다른 애플리케이션에 액세스하려면 인증 토큰에 PRT를 사용합니다. PRT가 애플리케이션 액세스를 요청하면 Microsoft Entra ID는 해당 디바이스 및 MFA 클레임을 신뢰합니다. 이렇게 하면 디바이스 인증 단계가 줄어들어 복원력이 향상됩니다. 사용자는 동일한 디바이스에서 여러 MFA 프롬프트로 질문을 받지 않습니다.

주 새로 고침 토큰이란?을 참조하세요.

애플리케이션을 실행하는 디바이스에서 토큰 캐시 및 토큰 저장소 및 인증 브로커를 통해 Microsoft ID 플랫폼 호출하는 앱의 다이어그램.

MSAL은 브로커 인증을 지원합니다. 자세히 보기:

지속적인 액세스 평가

CAE(지속적인 액세스 권한 평가)는 수명이 긴 토큰으로 애플리케이션 보안 및 복원력을 높입니다. CAE를 사용하면 짧은 토큰 수명이 아닌 중요한 이벤트 및 정책 평가를 기반으로 액세스 토큰이 해지됩니다. 일부 리소스 API의 경우 위험 및 정책이 실시간으로 평가되기 때문에 CAE는 토큰 수명을 최대 28시간까지 늘립니다. MSAL은 수명이 긴 토큰을 새로 고칩니다.

자세히 보기:

리소스 API를 개발하는 경우 공유 신호 – 보안 웹후크 프레임워크를 보려면 openid.net으로 이동합니다.

다음 단계