다음을 통해 공유


애플리케이션에서 지속적인 액세스 권한 평가를 사용하도록 설정된 API를 사용하는 방법

CAE(지속적인 액세스 평가)는 수명에 따라 토큰 만료에 의존하지 않고 중요한 이벤트정책 평가에 따라 액세스 토큰을 해지할 수 있는 Microsoft Entra 기능입니다.

위험 및 정책이 실시간으로 평가되므로 일부 리소스 API 토큰 수명은 최대 28시간까지 증가할 수 있습니다. 이러한 수명이 긴 토큰은 MSAL(Microsoft 인증 라이브러리)에서 사전에 새로 고쳐 애플리케이션의 복원력을 높입니다.

MSAL을 사용하지 않는 애플리케이션은 CAE를 사용하기 위해 클레임 챌린지, 클레임 요청 및 클라이언트 기능에 대한 지원을 추가할 수 있습니다.

구현 고려 사항

CAE를 사용하려면 앱 및 액세스하는 리소스 API 모두 CAE를 사용하도록 설정해야 합니다. 리소스 API가 CAE을 구현하고 애플리케이션에서 CAE를 처리할 수 있다고 선언하는 경우 앱에 해당 리소스에 대한 CAE 토큰이 제공됩니다. 이러한 이유로 앱 CAE 준비를 선언하는 경우 애플리케이션은 Microsoft ID 액세스 토큰을 수락하는 모든 리소스 API에 대한 CAE 클레임 챌린지를 처리해야 합니다.

그러나 CAE 지원 리소스를 지원하도록 코드를 준비해도 CAE를 지원하지 않는 API를 사용하는 기능이 제한되지는 않습니다. 앱이 CAE 응답을 올바르게 처리하지 않는 경우 기술적으로 유효하지만 CAE로 인해 해지된 토큰을 사용하여 API 호출을 반복적으로 다시 시도할 수 있습니다.

애플리케이션에서 CAE 처리

먼저 CAE로 인해 호출을 거부하는 리소스 API의 응답을 처리하는 코드를 추가합니다. CAE를 사용하면 API는 액세스 토큰이 해지되거나 API가 사용된 IP 주소의 변경 사항을 검색할 때 401 상태와 WWW-Authenticate 헤더를 반환합니다. 헤더에는 WWW-Authenticate 애플리케이션이 새 액세스 토큰을 획득하는 데 사용할 수 있는 클레임 챌린지가 포함되어 있습니다.

예시:

// Line breaks for legibility only

HTTP 401; Unauthorized

Bearer authorization_uri="https://login.windows.net/common/oauth2/authorize",
  error="insufficient_claims",
  claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwNDEwNjY1MSJ9fX0="

앱에서 다음을 확인합니다.

  • 401 상태를 반환하는 API 호출
  • 다음을 포함하는 헤더의 WWW-Authenticate 존재:
    • 값이 error 있는 매개 변수 insufficient_claims
    • claims 매개 변수

이러한 조건이 충족되면 앱은 MSAL.NET WwwAuthenticateParameters 클래스를 사용하여 클레임 챌린지를 추출하고 디코딩할 수 있습니다.

if (APIresponse.IsSuccessStatusCode)
{
    // ...
}
else
{
    if (APIresponse.StatusCode == System.Net.HttpStatusCode.Unauthorized
        && APIresponse.Headers.WwwAuthenticate.Any())
    {
        string claimChallenge = WwwAuthenticateParameters.GetClaimChallengeFromResponseHeaders(APIresponse.Headers);

그런 다음 앱은 클레임 챌린지를 사용하여 리소스에 대한 새 액세스 토큰을 획득합니다.

try
{
    authResult = await _clientApp.AcquireTokenSilent(scopes, firstAccount)
        .WithClaims(claimChallenge)
        .ExecuteAsync()
        .ConfigureAwait(false);
}
catch (MsalUiRequiredException)
{
    try
    {
        authResult = await _clientApp.AcquireTokenInteractive(scopes)
            .WithClaims(claimChallenge)
            .WithAccount(firstAccount)
            .ExecuteAsync()
            .ConfigureAwait(false);
    }
    // ...

애플리케이션이 CAE 사용 리소스에서 반환된 클레임 챌린지를 처리할 준비가 되면 앱이 CAE 준비 상태임을 Microsoft ID에 알릴 수 있습니다. MSAL 애플리케이션에서 이 작업을 수행하려면 클라이언트 기능을 사용하여 공용 클라이언트를 빌드합니다 "cp1".

_clientApp = PublicClientApplicationBuilder.Create(App.ClientId)
    .WithDefaultRedirectUri()
    .WithAuthority(authority)
    .WithClientCapabilities(new [] {"cp1"})
    .Build();

사용자를 로그인한 다음, Azure Portal를 사용해 사용자 세션을 취소하여 애플리케이션을 테스트할 수 있습니다. 다음에 앱에서 CAE 사용 API를 호출하면 사용자에게 다시 인증하라는 메시지가 표시됩니다.

샘플 코드