快速入门:从 Python Flask Web 应用登录用户并调用 Microsoft Graph

在本快速入门中,将下载并运行 Python Flask Web 应用示例,其中演示如何对用户进行身份验证并调用 Microsoft Graph API。 Microsoft Entra 组织中的用户可以登录到该应用程序。

先决条件

步骤 1:注册应用程序

提示

本文中的步骤可能因开始使用的门户而略有不同。

按照以下步骤在 Microsoft Entra 管理中心内注册应用程序:

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心
  2. 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你希望在其中注册应用程序的租户。
  3. 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”。
  4. 输入应用程序的名称,例如 python-webapp
  5. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
  6. 在“重定向 URI”下,为平台选择“Web”。
  7. 输入 http://localhost:5000/getAToken 的重定向 URI。 稍后可以随时更改此值。
  8. 选择“注册”。

步骤 2:添加客户端密码

示例应用在请求令牌时使用客户端密码来证明其标识。 按照以下步骤为 Python Web 应用创建客户端密码:

  1. 在应用的“概述”页上,记下“应用程序(客户端) ID”值,供稍后使用 。
  2. 在“管理”下,选择“证书和机密”,然后在“客户端密码”部分,选择“新建客户端密码”
  3. 输入客户端密码的说明,保留默认的过期时间,然后选择“添加”。
  4. 客户端密码保存在安全位置。 需要此值来配置代码,且以后无法检索该值。

Microsoft 建议在将应用程序移动到生产环境之前,为机密客户端应用程序创建凭据时,使用证书而不是客户端密码。 若要详细了解如何使用证书,请参阅这些说明

步骤 3:添加范围

由于此应用要让用户登录,因此需要添加委托的权限:

  1. 在“管理”下,选择“API 权限”>“添加权限” 。
  2. 确保已选择“Microsoft API”选项卡。
  3. 在“常用 Microsoft API”部分,选择“Microsoft Graph”。
  4. 在“委托的权限”部分中,确保选择“User.ReadBasic.All”。 如有必要,请使用搜索框。
  5. 选择“添加权限”。

步骤 4:下载示例应用

下载 Python 代码示例或克隆存储库:

git clone https://github.com/Azure-Samples/ms-identity-docs-code-python/

步骤 5:配置示例应用

  1. 打开在 IDE 中下载的应用程序,并导航到示例应用的根文件夹。

    cd flask-web-app
    
  2. 使用 .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.partner.microsoftonline.cn/<TENANT_GUID>。 应用注册概述页上提供了“目录(租户) ID”。

    环境变量在 app_config.py 中引用,并保存在单独的 .env 文件中,以使其不受源代码管理。 提供的 .gitignore 文件会阻止签入 .env 文件。

步骤 6:运行示例应用

  1. 为应用创建一个虚拟环境:

    py -m venv .venv
    .venv\scripts\activate
    
  2. 使用 pip 安装要求:

    pip install -r requirements.txt
    
  3. 从命令行运行应用。 确保应用与之前配置的重定向 URI 在同一端口上运行。

    flask run --debug --host=localhost --port=5000
    
  4. 复制终端中显示的 https URL(例如 https://localhost:5000),并将其粘贴到浏览器中。 建议使用私密浏览器或无痕浏览器会话。

  5. 按照步骤操作并输入必要的详细信息以使用 Microsoft 帐户登录。 系统会要求你提供登录的电子邮件地址和密码。

  6. 该应用程序将请求权限,以保持访问你已授权访问的数据、登录和阅读配置文件的权限,如图所示。 选择“接受”。

关系图显示示例应用请求同意以使用所需权限。

  1. 随即显示以下屏幕截图,指示已成功登录到应用程序。

关系图显示示例应用如何成功登录用户。

工作原理

下图展示了示例应用的工作原理:

显示本快速入门生成的示例应用程序的工作原理的示意图。

  1. 该应用程序使用 identity从 Microsoft 标识平台获取访问令牌。 此包基于适用于 Python 的 Microsoft 身份验证库 (MSAL) 构建,可简化 Web 应用中的身份验证和授权。

  2. 上一步中获取的访问令牌充当持有者令牌,用于在调用 Microsoft Graph API 时对用户进行身份验证。

后续步骤

通过在以下多部分教程系列中构建用于登录用户和调用受保护的 Web API 的 Python Web 应用进行深入探索: