Azure App Service 인증에서 OAuth 토큰 작업

이 문서에서는 기본 제공되는 App Service의 인증 및 승인을 사용하면서 OAuth 토큰으로 작업하는 방법을 보여 줍니다.

앱 코드에서 토큰 검색

서버 코드에서 공급자별 토큰은 쉽게 액세스할 수 있도록 요청 헤더에 주입됩니다. 다음 표에 가능한 토큰 헤더 이름이 나와 있습니다.

공급자 헤더 이름
Microsoft Entra ID X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Facebook 토큰 X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
X-MS-TOKEN-FACEBOOK-EXPIRES-ON
Google X-MS-TOKEN-GOOGLE-ID-TOKEN
X-MS-TOKEN-GOOGLE-ACCESS-TOKEN
X-MS-TOKEN-GOOGLE-EXPIRES-ON
X-MS-TOKEN-GOOGLE-REFRESH-TOKEN
Twitter X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

참고 항목

다른 언어 프레임워크는 이러한 헤더를 소문자 또는 제목 대/소문자와 같은 다양한 형식으로 앱 코드에 표시할 수 있습니다.

클라이언트 코드(예: 모바일 앱 또는 브라우저 내 JavaScript)에서 HTTP GET 요청을 /.auth/me에 전송합니다( 토큰 저장소는 반드시 사용하도록 설정되어 있어야 함). 반환된 JSON에는 공급자별 토큰이 있습니다.

참고 항목

액세스 토큰은 공급자 리소스에 액세스하기 위한 것이므로 클라이언트 암호를 사용하여 공급자를 구성하는 경우에만 표시됩니다. 새로 고침 토큰을 가져오는 방법을 알아보려면 액세스 토큰 새로 고침을 참조하세요.

인증 토큰 새로 고침

세션 토큰이 아닌 공급자의 액세스 토큰이 만료되면 사용자를 다시 인증해야 해당 토큰을 다시 사용할 수 있습니다. 애플리케이션의 /.auth/refresh 엔드포인트에 대한 GET 호출을 수행하면 토큰 만료를 방지할 수 있습니다. 호출되면 App Service에서는 인증된 사용자를 위한 토큰 저장소의 액세스 토큰을 자동으로 새로 고칩니다. 이후에 앱 코드에서 토큰을 요청하면 새로 고쳐진 토큰을 가져옵니다. 단, 토큰 새로 고침을 실행하기 위해서는 토큰 저장소에 사용자 공급자에 대한 토큰 새로 고침이 포함되어야 합니다. 새로 고침 토큰을 얻는 방법은 각 공급자에서 제공하는 문서에 나와 있으며, 다음 목록은 간단한 요약입니다.

  • Google: access_type=offline 쿼리 문자열 매개 변수를 /.auth/login/google API 호출에 추가합니다. 자세한 내용은 Google 새로 고침 토큰을 참조하세요.

  • Facebook: 새로 고침 토큰을 제공하지 않습니다. 수명이 긴 토큰은 60일 후에 만료됩니다(액세스 토큰의 Facebook 만료 및 확장 참조).

  • Twitter: 액세스 토큰이 만료되지 않습니다(Twitter OAuth FAQ 참조).

  • Microsoft: https://resources.azure.com에서 다음 단계를 수행합니다.

    1. 페이지의 위쪽에서 읽기/쓰기를 선택합니다.

    2. 왼쪽 브라우저에서 subscriptions><subscription_name>>resourceGroups><resource_group_name>>providers>Microsoft.Web>sites><app_name>>config>authsettingsV2로 이동합니다.

    3. 편집을 클릭합니다.

    4. 다음 속성을 수정합니다.

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. 배치를 클릭합니다.

    참고 항목

    새로 고침 토큰을 제공하는 범위는 offline_access입니다. 자습서: Azure App Service에서 엔드투엔드 사용자 인증 및 권한 부여에서 사용 방법을 참조하세요. 다른 범위는 이미 App Service에서 기본적으로 요청합니다. 이러한 기본 범위에 대한 자세한 내용은 OpenID Connect 범위를 참조하세요.

공급자가 구성되면 토큰 저장소에서 새로 고침 토큰 및 액세스 토큰에 대한 만료 시간 찾을 수 있습니다.

언제든지 액세스 토큰을 새로 고치려면 아무 언어에서나 /.auth/refresh를 호출하면 됩니다. 다음 코드 조각은 jQuery를 사용하여 JavaScript 클라이언트에서 액세스 토큰을 새로 고칩니다.

function refreshTokens() {
  let refreshUrl = "/.auth/refresh";
  $.ajax(refreshUrl) .done(function() {
    console.log("Token refresh completed successfully.");
  }) .fail(function() {
    console.log("Token refresh failed. See application logs for details.");
  });
}

사용자가 사용자 앱에 부여된 사용 권한을 취소하는 경우 /.auth/me에 대한 호출이 403 Forbidden 응답과 함께 실패할 수도 있습니다. 오류를 진단하려면 세부 정보에 대한 애플리케이션 로그를 확인합니다.

세션 토큰 만료 유예 기간 연장

인증된 세션은 8시간 후에 만료됩니다. 인증된 세션이 만료된 후에는 기본적으로 72시간의 유예 기간이 있습니다. 이 유예 기간 내에는 사용자를 다시 인증하지 않고 App Service를 통해 세션 토큰을 새로 고칠 수 있습니다. 세션 쿠키가 무효화되는 경우에는 /.auth/refresh만 호출하면 토큰 만료를 직접 추적할 필요가 없습니다. 72시간의 유예 기간이 지나면 사용자는 다시 로그인하여 유효한 세션 토큰을 가져와야 합니다.

72시간이 충분치 않은 경우 이 만료 기간을 확장할 수 있습니다. 오랜 기간 동안 만료를 연장하면 중요한 보안 결과가 발생할 수 있습니다(예: 인증 토큰이 유출되거나 도난당하는 경우). 따라서 기본 72시간으로 유지하거나 확장 기간을 가장 작은 값으로 설정해야 합니다.

기본 만료 기간을 확장하려면 Cloud Shell에서 다음 명령을 실행합니다.

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

참고 항목

유예 기간은 ID 공급자의 토큰이 아닌 App Service 인증된 세션에만 적용됩니다. 만료된 공급자 토큰에 대한 유예 기간은 없습니다.

다음 단계