[python] Authlib를 사용하여 애플리케이션에 Azure AD 인증을 추가하는 방법은?

Azure AD는 클라우드 환경에서 신뢰할 수 있는 인증 및 사용자 관리 서비스를 제공하는 Microsoft의 Identity and Access Management(IAM) 서비스입니다. Authlib는 Python에서 인증 및 권한 부여를 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이번에는 Authlib를 사용하여 Python 애플리케이션에 Azure AD 인증을 추가하는 방법을 알아보겠습니다.

Authlib 설치하기

먼저, Authlib를 설치해야 합니다. 다음 명령을 사용하여 Authlib를 설치할 수 있습니다:

pip install authlib

Azure AD 애플리케이션 등록하기

Azure AD에 애플리케이션을 등록해야 합니다. 등록한 애플리케이션에서 인증 및 권한 부여를 관리할 수 있습니다. 다음 단계를 따라 Azure AD에 애플리케이션을 등록하세요:

  1. Azure Portal에 로그인하세요.
  2. Azure Active Directory 서비스로 이동합니다.
  3. “App Registrations”을 선택하고 “New Registration”을 클릭하세요.
  4. 애플리케이션에 이름을 지정하고, “Supported account types”을 선택합니다.
  5. Redirect URI를 입력합니다. 이 URI는 인증 후 리디렉션되는 애플리케이션의 엔드포인트입니다.
  6. 등록 후에는 애플리케이션의 “Application (client) ID”를 기억해 두세요. 이 값은 인증 흐름에서 사용됩니다.

Python 애플리케이션에 Azure AD 인증 추가하기

이제 Python 애플리케이션에 Azure AD 인증을 추가할 차례입니다. 다음 단계를 따라 진행하세요:

  1. Flask를 사용하여 간단한 Python 웹 애플리케이션을 설정합니다.
  2. Authlib의 OAuth.register를 사용하여 Azure AD의 인증 엔드포인트와 토큰 엔드포인트를 등록합니다.
     from authlib.integrations.flask_client import OAuth
    
     oauth = OAuth()
     oauth.register('azuread',
                    client_id='<YOUR_CLIENT_ID>',
                    client_secret='<YOUR_CLIENT_SECRET>',
                    server_metadata_url='https://login.microsoftonline.com/<YOUR_TENANT>/.well-known/openid-configuration',
                    scope='openid profile email',
                    client_kwargs={'scope': 'User.Read'})
    

    이 때 <YOUR_CLIENT_ID><YOUR_CLIENT_SECRET>에는 애플리케이션 등록 시 생성한 “Application (client) ID”와 client secret 값을 사용해야 합니다. <YOUR_TENANT>에는 Azure AD이름에 해당하는 값(e.g., common, organizations, consumers)을 입력합니다.

  3. 사용자가 인증 및 권한 부여를 받을 수 있는 엔드포인트를 설정합니다.
     from flask import Flask, url_for, redirect
    
     app = Flask(__name__)
    
     @app.route('/login')
     def login():
         redirect_uri = url_for('auth', _external=True)
         return oauth.azuread.authorize_redirect(redirect_uri)
    
     @app.route('/auth')
     def auth():
         token = oauth.azuread.authorize_access_token()
         # 토큰을 사용하여 사용자 정보를 가져올 수 있습니다.
         # ...
         return 'Authenticated Successfully!'
    

    login 함수는 사용자를 Azure AD 인증으로 리디렉션시키고, auth 함수에서는 인증 후 토큰을 가져올 수 있습니다.

  4. Flask 애플리케이션을 실행합니다.
     flask run
    

이제 애플리케이션에는 Azure AD 인증이 추가되었습니다. 사용자는 /login 엔드포인트를 통해 Azure AD 로그인 페이지로 이동하고, 인증 후 /auth 엔드포인트로 리디렉션됩니다. 이 때, 토큰을 사용하여 사용자 정보를 가져와서 필요한 작업을 수행할 수 있습니다.

더 자세한 내용은 Authlib 문서Azure AD 문서를 참고하세요.