教程:调用受保护的 API 并显示结果
在上一教程中,你向应用程序添加了登录和注销体验。 现在可以基于这些功能进行构建,使登录用户能够调用受保护的 Web API。 为达到本教程的目的,你将调用 Microsoft Graph 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 请求。 在该请求中,我们的下游 API URL 在 app_config.ENDPOINT
中指定。 还可以在请求标头的 Authorization
字段中传递访问令牌。
对下游 API (Microsoft Graph API) 的成功请求会返回存储在 api_result
变量中的 JSON 响应,并将其传递给 display.html
模板进行呈现。
添加代码以运行应用
要运行应用,请在 app.py 文件的末尾添加以下代码片段。
if __name__ == "__main__":
app.run()
测试应用
按照以下步骤在 Web 应用中测试登录、调用 API 和注销体验:
(如果还未执行)将 .env.sample 文件中的占位符值替换为 Microsoft Entra 应用注册详细信息(客户端 ID、客户端密码和颁发机构 URL)
为应用创建一个虚拟环境:
py -m venv .venv .venv\scripts\activate
使用
pip
安装要求:pip install -r requirements.txt
从命令行运行应用。 确保应用与之前配置的重定向 URI 在同一端口上运行。
flask run --host=localhost --port=5000
复制终端中显示的 https URL(例如 https://localhost:5000),并将其粘贴到浏览器中。 建议使用私密浏览器或无痕浏览器会话。
显示登录窗口后,提供用于登录的帐户,然后选择“下一步”:
浏览器将重定向以让你提供帐户密码。 输入密码,然后选择“登录”。
此时,因组织所需安全信息的差异,登录流可能会有所不同,例如可能使用验证器应用进行多重身份验证。
对于“保持登录状态”,可以选择“否”或“是”。
该应用程序将请求权限,以保持访问你已授权访问的数据、登录和阅读配置文件的权限。 选择“接受”来同意这些权限。
随即显示以下屏幕截图,指示已登录到应用程序:
要调用受保护的 API 并显示结果,选择“调用下游 API”。 成功调用 Microsoft Graph API 后会返回有关已登录用户的信息,如下所示:
从应用退出登录
- 选择“退出登录”,从应用退出登录。
- 系统将提示你选取要退出登录的帐户。 选择用于登录的帐户。
- 此时会显示一条消息,指示你已退出登录。现在可以关闭浏览器窗口。
另请参阅
生成的应用使用标识库,该库抽象化了适用于 Python 的 Microsoft 身份验证库 (MSAL) 的大部分详细信息。 有关如何在不同方案中使用 MSAL Python 的详细信息,请参阅 MSAL Python 文档。