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

Python용 Microsoft 인증 라이브러리(MSAL) 라이브러리를 사용하면 Microsoft ID(Microsoft Entra ID, Microsoft 계정Microsoft Entra ID 계정)로 사용자 또는 앱이 로그인할 수 있도록 지원합니다. MSAL Python 사용하여 Microsoft Entra ID 토큰을 획득하여 Microsoft Graph, 기타 Microsoft API 또는 사용자 고유의 API와 같은 보호된 웹 API를 호출할 수 있습니다.

사전 요구 사항

패키지 설치

Python 패키지용 MSAL을 설치합니다. PyPI에서 MSAL Python 찾을 수 있습니다.

pip install msal

ID 개념

MSAL Python Microsoft ID 플랫폼 에코시스템의 일부입니다. MSAL Python 사용하여 애플리케이션 및 API를 효과적으로 보호하려면 다음 개념을 숙지하세요.

사용 시나리오

MSAL Python 사용하려면 Microsoft ID 플랫폼 애플리케이션을 등록합니다. 활성 구독이 있는 Azure 계정이 필요합니다. 계정이 없으면 무료 계정을 만드세요. 고객 테넌트 또는 인력 테넌트에 앱을 등록할 수 있습니다.

애플리케이션은 MSAL Python 사용하여 보호된 API에 액세스하기 위한 토큰을 획득할 수 있습니다. 다양한 앱 유형은 다른 인증 흐름을 사용하여 토큰을 획득합니다. 지원되는 앱 유형에는 데스크톱 애플리케이션, 웹 애플리케이션, 웹 API 및 브라우저가 없는 디바이스(예: IoT 디바이스)에서 실행되는 애플리케이션이 포함됩니다.

MSAL Python 애플리케이션은 다음과 같이 분류됩니다.

자세한 내용은 공용 클라이언트 및 기밀 클라이언트 앱에 대한 설명서와 Microsoft ID 플랫폼 다양한 앱 유형 및 해당 인증 흐름을 참조하세요.

애플리케이션이 퍼블릭 또는 기밀 클라이언트 애플리케이션인지를 결정한 후 MSAL Python 사용하여 다양한 시나리오에 대한 토큰을 획득할 수 있습니다.

기본 사용법

MSAL Python 사용하여 토큰을 획득하는 것은 3단계 패턴을 따릅니다. 다른 흐름에 대한 몇 가지 변형이 있을 것입니다. 작동 중인 샘플을 보려면 샘플을 다운로드하세요.

  1. MSAL은 공용 클라이언트와 기밀 클라이언트 애플리케이션 간의 깨끗한 분리를 사용합니다. 따라서 PublicClientApplication 인스턴스 또는 ConfidentialClientApplication 인스턴스를 생성하고 애플리케이션의 수명 주기 동안 재사용하세요. 예를 들어 공용 클라이언트 애플리케이션의 경우 초기화 코드는 다음과 같습니다.

    from msal import PublicClientApplication
    
    app = PublicClientApplication(
        "your_client_id",
        authority="https://login.microsoftonline.com/common")
    

    권한 값은 로그인하는 계정 유형 및 앱이 등록된 테넌트 종류에 따라 달라집니다. 예를 들어, 인력 테넌트(Microsoft Entra ID)에 프로비전된 회사 및 개인 Microsoft 계정에 모두 로그인하려면 https://login.microsoftonline.com/common을 사용합니다. 고객 테넌트에 프로비전된 고객 계정의 경우 권한은 https://<subdomain>.ciamlogin.com와 같은 형식이 됩니다. 자세한 내용은 토큰 발급자 설명서를 참조하세요.

  2. 먼저 캐시에서 토큰을 가져오려고 합니다. MSAL의 API 모델은 토큰 캐시를 활용하는 방법을 명시적으로 제어합니다. 캐싱 부분은 기술적으로 선택 사항이지만 애플리케이션에서 사용하는 것이 좋습니다. 캐시를 사용하면 추가 API 호출을 수행하지 않도록 하고 토큰 새로 고침을 자동으로 처리할 수 있습니다.

    # initialize result variable to hole the token response
    result = None 
    
    # We now check the cache to see
    # whether we already have some accounts that the end user already used to sign in before.
    accounts = app.get_accounts()
    if accounts:
        # If so, you could then somehow display these accounts and let end user choose
        print("Pick the account you want to use to proceed:")
        for a in accounts:
            print(a["username"])
        # Assuming the end user chose this one
        chosen = accounts[0]
        # Now let's try to find a token in cache for this account
        result = app.acquire_token_silent(["User.Read"], account=chosen)
    
  3. 캐시에 적합한 토큰이 없거나 이전 단계를 건너뛰도록 선택한 경우 Microsoft Entra ID 요청을 보내 토큰을 가져옵니다. 클라이언트 유형 및 시나리오에 따라 다른 방법이 있지만, 예제에서는 사용 acquire_token_interactive방법을 보여 줍니다. 그러면 사용자에게 자격 증명을 제공하라는 메시지가 표시됩니다.

    if not result:
        # So no suitable token exists in cache. Let's get a new one from Azure AD.
        result = app.acquire_token_interactive(scopes=["User.Read"])
    if "access_token" in result:
        print(result["access_token"])  # Yay!
    else:
        print(result.get("error"))
        print(result.get("error_description"))
        print(result.get("correlation_id"))  # You may need this when reporting a bug
    
  4. 코드를 msaltest.py 같은 Python 파일에 로컬로 저장합니다.

  5. 를 실행하여 코드를 실행합니다 python .\msalpytest.py. 다음 시각적 개체는 이 예제의 로그인 환경을 보여 줍니다.

    사용자에게 자신의 계정으로 로그인하라는 메시지를 표시하는 앱의 예

  6. 인증이 완료되고 브라우저를 닫으면 터미널에 인쇄된 액세스 토큰을 볼 수 있습니다.

강력한 엔터프라이즈 준비 애플리케이션에 대한 모범 사례

MSAL Python 사용하여 보호된 Web API에 대한 토큰을 획득할 수 있습니다. 또한 새로 고침 토큰을 직접 처리할 필요가 없습니다. 그러나 강력한 엔터프라이즈 지원 애플리케이션을 빌드하려면 좀 더 많은 작업을 수행해야 합니다. 예를 들어 다음을 수행할 수 있습니다.

  • 토큰을 획득할 때뿐만 아니라 보호된 Web API를 호출할 때도 예외를 처리합니다. 특히 테넌트 관리자가 MFA(Multi Factor Authentication)를 적용하도록 조건부 액세스 정책을 설정한 Microsoft Entra 테넌트에서 애플리케이션이 실행되는 경우 클레임 챌린지를 처리해야 합니다.

  • 애플리케이션 문제를 해결하고 사용자를 지원하기 위해 Logging을 활성화하는 것이 좋습니다. 이때 사용자의 개인정보를 존중하고 GDPR을 준수해야 합니다.

샘플

MSAL Python 시작하는 데 사용할 수 있는 몇 가지 샘플이 있습니다.

  • 라이브러리 리포지토리의 샘플입니다. 이러한 샘플은 MSAL Python 사용하여 구현하는 다양한 구성 및 인증 흐름을 보여 줍니다.
  • 설명서에 사용된 샘플이 있는 단일 리포지토리입니다. 이러한 샘플에는 처음부터 빌드하고 복제하는 데 도움이 되는 지원 설명서가 있습니다.

참고 자료

  • GitHub의 MSAL Python 라이브러리 리포지토리
  • GitHub의 MSAL Python 릴리스

참고하십시오