在本教程中,你将从 Python Flask Web 应用调用 Microsoft 图形 API。 在上一教程中,你向应用程序添加了登录和注销体验。 用户登录后,应用将获取访问令牌以调用Microsoft图形 API。
在本教程中,你将:
- 更新现有的 Python Flask Web 应用以获取访问令牌
- 使用访问令牌调用 Microsoft 图形接口 API。
完成教程中的步骤 :使用 Microsoft 标识平台向 Python Flask Web 应用添加登录。
在此示例中,我们将调用 Microsoft 图形 API 来获取已登录用户的个人资料信息。 如果您的应用位于员工租户中,那么在登录时,用户需要同意应用访问 Microsoft Graph API 所需的权限。 然后,应用使用访问令牌调用 API 并显示结果。
在 .env 文件中,添加我们调用的终结点以及调用 Microsoft 图形 API 所需的范围:
SCOPE=User.Read
ENDPOINT=https://microsoftgraph.chinacloudapi.cn/v1.0/me
通过更新 app_config.py 文件来读取应用中的新配置。
# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")
将 API 终结点传递到主页。 这样,你就可以调用你的终结点。 更新
/
路由,使其与下列代码片段一致:@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", api_endpoint=os.getenv("ENDPOINT") # added this line )
调用受保护的Microsoft图形 API,如以下代码片段所示。 我们传递了我们的应用需要使用的范围列表。 如果存在范围,上下文将包含访问令牌。 访问令牌用于调用下游 API。 将此代码添加到 app.py 文件:
@app.route("/call_api") @auth.login_required(scopes=os.getenv("SCOPE", "").split()) def call_downstream_api(*, context): api_result = requests.get( # Use access token to call a web api os.getenv("ENDPOINT"), headers={'Authorization': 'Bearer ' + context['access_token']}, timeout=30, ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?" return render_template('display.html', title="API Response", result=api_result)
如果应用成功获取访问令牌,则会使用
requests.get(...)
该方法向下游 API 发出 HTTP 请求。 在请求中,我们在app_config.ENDPOINT
中指定了下游 API URL,并在请求标头的Authorization
字段中传递访问令牌。对下游 API(Microsoft图形 API)的成功请求返回存储在变量中的
api_result
JSON 响应,并传递给display.html
模板进行呈现。
在模板文件夹中创建名为 display.html 的文件。 此页面显示调用 Microsoft Graph 终结点的结果。 将以下代码添加到 display.html 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>{{title}}</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</body>
</html>
在终端中,运行以下命令:
python3 -m flask run --debug --host=localhost --port=3000
可以使用所选端口。 此端口应类似于之前注册的重定向 URI 的端口。
打开浏览器,然后转到
http://localhost:3000
。 你会看到一个登录页。按照以下步骤使用 Microsoft 帐户登录。 系统会要求你提供登录的电子邮件地址和密码。
如果应用程序需要任何权限,将会显示同意屏幕。 应用程序将请求权限,以维持对你允许访问的数据的访问权限,并将你登录。 选择 接受。 如果未定义作用域,则不会显示此屏幕。
选择主页上的 “调用 API ”链接。 应用调用 Microsoft 图形 API 以获取已登录用户的个人资料信息。 应用显示对 API 的调用结果。
选择 注销 以注销应用。 系统会提示你选择要从中注销的帐户。 选择用于登录的帐户。
ms_identity_python抽象化 MSAL 库的详细信息。 有关详细信息,请参阅 MSAL Python 文档。 此参考资料可帮助你了解如何使用 MSAL Python 初始化应用和获取令牌。