快速入门:从 Python Flask Web 应用登录用户并调用 Microsoft Graph
在本快速入门中,将下载并运行 Python Flask Web 应用示例,其中演示如何对用户进行身份验证并调用 Microsoft Graph API。 Microsoft Entra 组织中的用户可以登录到该应用程序。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 一个 Microsoft Entra 租户。 有关详细信息,请参阅如何获取 Microsoft Entra 租户。
- Python 3+
步骤 1:注册应用程序
提示
本文中的步骤可能因开始使用的门户而略有不同。
按照以下步骤在 Microsoft Entra 管理中心内注册应用程序:
- 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心。
- 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你希望在其中注册应用程序的租户。
- 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”。
- 输入应用程序的名称,例如 python-webapp。
- 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
- 在“重定向 URI”下,为平台选择“Web”。
- 输入
http://localhost:5000/getAToken
的重定向 URI。 稍后可以随时更改此值。 - 选择“注册”。
步骤 2:添加客户端密码
示例应用在请求令牌时使用客户端密码来证明其标识。 按照以下步骤为 Python Web 应用创建客户端密码:
- 在应用的“概述”页上,记下“应用程序(客户端) ID”值,供稍后使用 。
- 在“管理”下,选择“证书和机密”,然后在“客户端密码”部分,选择“新建客户端密码”。
- 输入客户端密码的说明,保留默认的过期时间,然后选择“添加”。
- 将客户端密码的值保存在安全位置。 需要此值来配置代码,且以后无法检索该值。
Microsoft 建议在将应用程序移动到生产环境之前,为机密客户端应用程序创建凭据时,使用证书而不是客户端密码。 若要详细了解如何使用证书,请参阅这些说明。
步骤 3:添加范围
由于此应用要让用户登录,因此需要添加委托的权限:
- 在“管理”下,选择“API 权限”>“添加权限” 。
- 确保已选择“Microsoft API”选项卡。
- 在“常用 Microsoft API”部分,选择“Microsoft Graph”。
- 在“委托的权限”部分中,确保选择“User.ReadBasic.All”。 如有必要,请使用搜索框。
- 选择“添加权限”。
步骤 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),并将其粘贴到浏览器中。 建议使用私密浏览器或无痕浏览器会话。
按照步骤操作并输入必要的详细信息以使用 Microsoft 帐户登录。 系统会要求你提供登录的电子邮件地址和密码。
该应用程序将请求权限,以保持访问你已授权访问的数据、登录和阅读配置文件的权限,如图所示。 选择“接受”。
- 随即显示以下屏幕截图,指示已成功登录到应用程序。
工作原理
下图展示了示例应用的工作原理:
该应用程序使用
identity
包从 Microsoft 标识平台获取访问令牌。 此包基于适用于 Python 的 Microsoft 身份验证库 (MSAL) 构建,可简化 Web 应用中的身份验证和授权。上一步中获取的访问令牌充当持有者令牌,用于在调用 Microsoft Graph API 时对用户进行身份验证。
后续步骤
通过在以下多部分教程系列中构建用于登录用户和调用受保护的 Web API 的 Python Web 应用进行深入探索: