이 문서에서는 ADAL(Azure Active Directory 인증 라이브러리)을 사용하여 MSAL(Microsoft 인증 라이브러리)을 사용하는 앱을 마이그레이션하는 데 필요한 변경 사항을 강조 표시합니다.
MSAL에 대해 자세히 알아보고 Python용 Microsoft 인증 라이브러리 개요를 시작할 수 있습니다.
차이점 강조 표시
ADAL은 Azure Active Directory(Azure AD) v1.0 엔드포인트에서 작동합니다. Microsoft 인증 라이브러리(MSAL)는 이전에 Azure Active Directory v2.0 엔드포인트로 알려진 Microsoft ID 플랫폼과 함께 작동합니다. Microsoft ID 플랫폼은 Azure AD v1.0과 다른 점이 있습니다:
지원:
회사 및 학교 계정(Microsoft Entra ID 프로비전된 계정)
개인 계정(예: Outlook.com 또는 Hotmail.com)
Azure AD B2C 제품을 통해 자신의 이메일 또는 소셜 ID(예: LinkedIn, Facebook, Google)를 가져오는 고객
표준은 다음과 호환됩니다.
- OAuth v2.0
- OpenID Connect(OIDC)
MSAL에 대한 자세한 내용은 MSAL 개요를 참조하세요.
리소스가 아닌 범위
ADAL Python 리소스에 대한 토큰을 획득하지만 MSAL Python 범위에 대한 토큰을 획득합니다. MSAL Python API 화면에는 더 이상 리소스 매개 변수가 없습니다. 원하는 사용 권한 및 요청된 리소스를 선언하는 문자열 목록으로 범위를 제공해야 합니다. 범위의 몇 가지 예를 보려면 Microsoft Graph 범위를 참조하세요.
ADAL(v1.0 엔드포인트)에서 MSAL(Microsoft ID 플랫폼)으로 앱을 마이그레이션하는 데 도움이 되도록 리소스에 범위 접미사를 추가할 /.default 수 있습니다. 예를 들어 리소스 값의 https://graph.microsoft.com경우 해당하는 범위 값은 다음과 같습니다 https://graph.microsoft.com/.default. 리소스가 URL 형식이 아니지만 XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX 형식의 리소스 ID인 경우에도 XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/.default를 범위 값으로 계속 사용할 수 있습니다.
다양한 유형의 범위에 대한 자세한 내용은 Microsoft ID 플랫폼 권한 및 동의를 참조하고 v1.0 토큰 문서를 수락하는 Web API의 범위를 참조하세요.
오류 처리
Python ADAL은 예외 AdalError 를 사용하여 문제가 있음을 나타냅니다. Python MSAL은 일반적으로 오류 코드를 대신 사용합니다. 자세한 내용은 Python 오류 처리에 대한 MSAL을 참조하세요.
API 변경 사항
다음 표에는 ADAL for Python의 API와 이를 대체해 MSAL for Python에서 사용할 API가 나와 있습니다.
MSAL Python 대한 기존 새로 고침 토큰 마이그레이션
MSAL은 새로 고침 토큰의 개념을 추상화합니다. MSAL Python 기본적으로 메모리 내 토큰 캐시를 제공하므로 새로 고침 토큰을 저장, 조회 또는 업데이트할 필요가 없습니다. 또한 사용자는 일반적으로 사용자의 개입 없이 새로 고침 토큰을 업데이트할 수 있으므로 로그인 프롬프트가 더 적습니다. 토큰 캐시에 대한 자세한 내용은 Python 대한 MSAL의 사용자 지정 토큰 캐시 serialization을 참조하세요.
다음 코드는 다른 OAuth2 라이브러리에서 관리되는 새로 고침 토큰(ADAL Python 포함하되 제한되지 않음)을 마이그레이션하여 MSAL에서 Python 관리하는 데 도움이 됩니다. 이러한 새로 고침 토큰을 마이그레이션하는 한 가지 이유는 Python 위해 앱을 MSAL로 마이그레이션할 때 기존 사용자가 다시 로그인할 필요가 없도록 하기 위해서입니다.
새로 고침 토큰을 마이그레이션하는 방법은 Python MSAL을 사용하여 이전 새로 고침 토큰을 사용하여 새 액세스 토큰을 획득하는 것입니다. 새 새로 고침 토큰이 반환되면 Python용 MSAL은 이를 캐시에 저장합니다. MSAL Python 1.3.0이므로 이 목적을 위해 MSAL 내에 API를 제공합니다. MSAL Python 사용하여 새로 고침 토큰을 마이그레이션하는 완료된 샘플에서 따옴표로 묶은 다음 코드 조각을 참조하세요.
import msal
def get_preexisting_rt_and_their_scopes_from_elsewhere():
# Maybe you have an ADAL-powered app like this
# https://github.com/AzureAD/azure-activedirectory-library-for-python/blob/1.2.3/sample/device_code_sample.py#L72
# which uses a resource rather than a scope,
# you need to convert your v1 resource into v2 scopes
# See https://learn.microsoft.com/azure/active-directory/develop/migrate-python-adal-msal#scopes-not-resources
# You may be able to append "/.default" to your v1 resource to form a scope
# See https://learn.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#the-default-scope
# Or maybe you have an app already talking to the Microsoft identity platform,
# powered by some 3rd-party auth library, and persist its tokens somehow.
# Either way, you need to extract RTs from there, and return them like this.
return [
("old_rt_1", ["scope1", "scope2"]),
("old_rt_2", ["scope3", "scope4"]),
]
# We will migrate all the old RTs into a new app powered by MSAL
app = msal.PublicClientApplication(
"client_id", authority="...",
# token_cache=... # Default cache is in memory only.
# You can learn how to use SerializableTokenCache from
# https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache
)
# We choose a migration strategy of migrating all RTs in one loop
for old_rt, scopes in get_preexisting_rt_and_their_scopes_from_elsewhere():
result = app.acquire_token_by_refresh_token(old_rt, scopes)
if "error" in result:
print("Discarding unsuccessful RT. Error: ", json.dumps(result, indent=2))
print("Migration completed")