在上一教程中,你向应用程序添加了登录和注销体验。 现在可以基于这些功能来允许登录用户调用受保护的 Web API。 在本教程中,你将调用 Microsoft 图形 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 和注销体验:
如果尚未,请将 .env.sample 文件中的占位符值替换为Microsoft Entra 应用注册详细信息(客户端 ID、客户端密码和颁发机构 URL)
为应用创建虚拟环境:
- 对于 Windows,请运行以下命令:
py -m venv .venv .venv\scripts\activate
- 对于 macOS/Linux,请运行以下命令:
python3 -m venv .venv source .venv/bin/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 文档。