教程:调用受保护的 API 并显示结果

上一教程中,你向应用程序添加了登录和注销体验。 现在可以基于这些功能来允许登录用户调用受保护的 Web API。 在本教程中,你将调用 Microsoft 图形 API 并显示已登录用户的配置文件信息。

在本教程中:

  • 添加代码以调用受保护的下游 API
  • 运行并测试应用程序

调用 API 并显示结果

若要调用受保护的 API,应首先通过调用 auth.get_token_for_user 以下内容来获取当前用户的访问令牌:

@app.route("/call_downstream_api")
def call_downstream_api():
    token = auth.get_token_for_user(app_config.SCOPE)
    if "error" in token:
        return redirect(url_for("login"))
    # Use access token to call downstream api
    api_result = requests.get(
        app_config.ENDPOINT,
        headers={'Authorization': 'Bearer ' + token['access_token']},
        timeout=30,
    ).json()
    return render_template('display.html', result=api_result)

当用户导航到 /call_downstream_api URL 路由时,Flask 会调用 call_downstream_api() 该函数,该函数会首先尝试使用 auth.get_token_for_user(app_config.SCOPE)该函数获取访问令牌。 如果令牌中存在身份验证问题或任何错误,请将用户重定向到登录页以重新进行身份验证。

如果应用成功获取访问令牌,则会使用 requests.get(...) 该方法向下游 API 发出 HTTP 请求。 在请求中,app_config.ENDPOINT 中指定了我们的下游 API URL。 还可以在 Authorization 请求标头的字段中传递访问令牌。

对下游 API(Microsoft图形 API)的成功请求返回存储在变量中的 api_result JSON 响应,并传递给 display.html 模板进行呈现。

添加代码以运行应用

若要运行应用,请在 app.py 文件的末尾添加以下代码片段。

if __name__ == "__main__":
    app.run()

测试应用程序

按照以下步骤在 Web 应用中测试登录、调用 API 和注销体验:

  1. 如果尚未,请将 .env.sample 文件中的占位符值替换为Microsoft Entra 应用注册详细信息(客户端 ID、客户端密码和颁发机构 URL)

  2. 为应用创建虚拟环境:

    • 对于 Windows,请运行以下命令:
    py -m venv .venv
    .venv\scripts\activate
    
    • 对于 macOS/Linux,请运行以下命令:
    python3 -m venv .venv
    source .venv/bin/activate
    
  3. 使用 pip 安装必备组件:

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

    flask run --host=localhost --port=5000
    
  5. 复制终端中显示的 https URL,例如, https://localhost:5000将其粘贴到浏览器中。 建议使用专用或隐身浏览器会话。

  6. 出现登录窗口后,请提供用于登录的帐户,然后选择“ 下一步” :

    显示登录屏幕的屏幕截图。

  7. 浏览器会将你重定向到一个页面,然后你可以输入帐户密码。 输入密码,然后选择“ 登录”。

    此时,登录流可能会因组织所需的安全信息而异,例如,使用验证器应用进行多重身份验证。

  8. 对于“保持登录状态”,可以选择“否”或“是”。

  9. 应用程序请求权限,以维持对您已授予访问权限的数据的访问、登录您的帐户和读取您的个人资料信息。 选择 “接受 ”以同意这些权限。

  10. 将显示以下屏幕截图,指示你已登录到应用程序:

    显示已登录用户的屏幕截图。

  11. 若要调用受保护的 API 并显示结果,请选择“ 调用下游 API”。 成功调用 Microsoft Graph API 将返回有关已登录用户的信息,如下所示:

    显示成功 API 调用结果的屏幕截图。

注销应用

  1. 选择 注销 以注销应用。
  2. 系统会提示你选择要从中注销的帐户。 选择用于登录的帐户。
  3. 此时会显示一条消息,指示你已注销。现在可以关闭浏览器窗口。

另请参阅

生成的应用使用 标识库,该库抽象化用于 Python 的Microsoft身份验证库(MSAL)的大多数详细信息。 有关如何在不同方案中使用 MSAL Python 的详细信息,请参阅 MSAL Python 文档