빠른 시작: Python Flask 웹앱에서 사용자 로그인 및 Microsoft Graph 호출
이 빠른 시작에서는 사용자를 인증하고 Microsoft Graph API를 호출하는 방법을 보여 주는 Python Flask 웹앱 샘플을 다운로드하여 실행합니다. Microsoft Entra 조직의 사용자는 애플리케이션에 로그인할 수 있습니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Microsoft Entra 테넌트. 자세한 내용은 Microsoft Entra 테넌트를 가져오는 방법을 참조하세요.
- Python 3+
1단계: 애플리케이션 등록
팁
이 문서의 단계는 시작하는 포털에 따라 조금씩 다를 수 있습니다.
Microsoft Entra 관리 센터에 애플리케이션을 등록하려면 다음 단계를 따릅니다.
- 최소한 클라우드 애플리케이션 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
- ID>애플리케이션>앱 등록으로 이동하고 신규 등록을 선택합니다.
- 애플리케이션의 이름을 입력합니다(예: python-webapp).
- 지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.
- 리디렉션 URI에서 플랫폼에 대한 웹을 선택합니다.
http://localhost:5000/getAToken
의 리디렉션 URI를 입력합니다. 나중에 이 값을 변경할 수 있습니다.- 등록을 선택합니다.
2단계: 클라이언트 암호 추가
샘플 앱은 클라이언트 비밀을 사용하여 토큰을 요청할 때 해당 ID를 증명합니다. 다음 단계에 따라 Python 웹앱에 대한 클라이언트 비밀을 만듭니다.
- 나중에 사용할 수 있도록 앱 개요 페이지에서 애플리케이션(클라이언트) ID 값을 기록해 둡니다.
- 관리에서 인증서 및 비밀을 선택하고 클라이언트 암호 섹션에서 새 클라이언트 암호를 선택합니다.
- 클라이언트 암호에 대한 설명을 입력하고 기본 만료를 그대로 두고 추가를 선택합니다.
- 클라이언트 암호의 값을 안전한 위치에 저장합니다. 이 값은 코드를 구성하는 데 필요하며 나중에 가져올 수 없습니다.
기밀 클라이언트 애플리케이션에 대한 자격 증명을 만들 때 Microsoft는 애플리케이션을 프로덕션 환경으로 이동하기 전에 클라이언트 암호 대신 인증서를 사용할 것을 권장합니다. 인증서를 사용하는 방법에 대한 자세한 내용은 다음 지침을 참조하세요.
3단계 - 범위 추가
이 앱은 사용자를 로그인시키므로 위임된 권한을 추가해야 합니다.
- 관리에서 API 권한>권한 추가를 선택합니다.
- Microsoft API 탭이 선택되어 있는지 확인합니다.
- 일반적으로 사용되는 Microsoft API 섹션에서 Microsoft Graph를 선택합니다.
- 위임된 권한 섹션에서 User.Read가 선택되었는지 확인합니다. 필요한 경우 검색 상자를 사용합니다.
- 권한 추가를 선택합니다.
4단계 - 샘플 앱 다운로드
Python 코드 샘플을 다운로드하거나 리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/ms-identity-docs-code-python/
5단계: 샘플 웹앱 구성
IDE에서 다운로드한 애플리케이션을 열고 샘플 앱의 루트 폴더로 이동합니다.
cd flask-web-app
.env.sample을 가이드로 사용하여 프로젝트의 루트 폴더에 .env 파일을 만듭니다.
# The following variables are required for the app to run. CLIENT_ID=<Enter_your_client_id> CLIENT_SECRET=<Enter_your_client_secret> AUTHORITY=<Enter_your_authority_url>
CLIENT_ID
의 값을 개요 페이지에서 사용할 수 있는 등록된 애플리케이션의 애플리케이션(클라이언트) ID로 설정합니다.CLIENT_SECRET
의 값을 등록된 애플리케이션의 인증서 및 비밀에서 만든 클라이언트 암호로 설정합니다.AUTHORITY
의 값을https://login.microsoftonline.com/<TENANT_GUID>
(으)로 설정합니다. 디렉터리(테넌트) ID는 앱 등록 개요 페이지에서 확인할 수 있습니다.
환경 변수는 app_config.py에서 참조되며 소스 제어에서 제외되도록 별도의 .env 파일에 보관됩니다. 제공된 .gitignore 파일은 .env 파일이 체크 인되는 것을 방지합니다.
6단계: 샘플 앱 실행
앱에 대한 가상 환경을 만듭니다.
py -m venv .venv .venv\scripts\activate
pip
를 사용하여 요구 사항을 설치합니다.pip install -r requirements.txt
명령줄에서 앱을 실행합니다. 앱이 이전에 구성한 리디렉션 URI와 동일한 포트에서 실행되고 있는지 확인합니다.
flask run --debug --host=localhost --port=5000
터미널에 표시되는 https URL(예: https://localhost:5000)을 복사하여 브라우저에 붙여넣습니다. 프라이빗 또는 Incognito 브라우저 세션을 사용하는 것이 좋습니다.
단계에 따라 Microsoft 계정에 로그인하는 데 필요한 세부 정보를 입력합니다. 로그인을 위해 이메일 주소와 암호를 입력하라는 메시지가 표시됩니다.
애플리케이션은 보여진 것처럼 사용자가 액세스 권한을 부여한 데이터에 대한 액세스 권한을 유지하고 로그인하여 프로필을 읽을 수 있는 권한을 요청합니다. 수락을 선택합니다.
- 애플리케이션에 성공적으로 로그인했음을 나타내는 다음 스크린샷이 나타납니다.
작동 방식
다음 다이어그램은 샘플 앱의 작동 방식을 보여 줍니다.
애플리케이션은
identity
패키지를 사용하여 Microsoft ID 플랫폼에서 액세스 토큰을 가져옵니다. 이 패키지는 웹앱에서 인증 및 권한 부여를 간소화하기 위해 Python용 MSAL(Microsoft 인증 라이브러리)을 기반으로 빌드됩니다.이전 단계에서 가져온 액세스 토큰은 Microsoft Graph API를 호출할 때 사용자를 인증하는 전달자 토큰으로 사용됩니다.
다음 단계
다음 여러 파트로 구성된 자습서 시리즈에서 사용자를 로그인시키고 보호된 웹 API를 호출하는 Python 웹 앱을 구축하여 자세히 알아보세요.