练习 - 使用 MSAL 授权访问 Microsoft Graph API

已完成

在本练习中,你将为应用程序配置权限并使用 MSAL 从 Microsoft Graph (MS Graph) API 访问用户配置文件信息。

将 Microsoft Graph 权限添加到应用注册

受 Microsoft Entra ID 保护的 Web 服务定义了一组权限,用于访问该服务公开的 API 功能和数据。 应用程序在访问数据或代表用户执行操作之前,必须请求这些需要获得用户批准的权限。 可从 Azure 门户向应用注册分配这些 API 权限。 下面介绍为应用程序分配 Microsoft Graph API 权限的步骤。

  1. 在“应用注册”屏幕上,选择“API 权限”,添加应用程序所需的 API 访问权限

    显示 Azure 门户上注册 Microsoft Entra ID 的应用的 API 权限窗格菜单的屏幕截图。

    • 选择“添加权限”。

    • 确保已选择“Microsoft API”选项卡。

    • 在“常用 Microsoft API”部分,选择“Microsoft Graph”,然后选择“委托的权限”

    • 在“委托的权限”部分向下滚动,选择列表中的“User.Read”。 此特定权限用于从 https://graph.microsoft.com/v1.0/me 终结点访问已登录用户的信息。

    • 选择“添加权限”。

      显示 Azure 门户上注册 Microsoft Entra ID 的应用的 API 权限窗格的屏幕截图。

运行应用程序

可以尝试在上一练习中运行的应用程序上进行图形 API 调用。

  1. 打开浏览器并导航到 http://localhost:8080/msal4j-servlet-graph/。 如果你尚未登录,系统会将你重定向,以便你使用 Microsoft Entra ID 登录。 成功登录后,应会看到下图所示页面。

    成功登录到示例应用程序后,页面上显示的调用图按钮的屏幕截图。

  2. 选择“调用图”,调用 Microsoft Graph 的 /me 终结点并查看显示的用户详细信息

Microsoft Graph 访问代码概述

可以在示例项目的 msal4j/callgraphwebapp/ 目录下的 servlet 类 CallGraphServlet.java 中找到用于访问 Microsoft Graph API 的代码。 它在应用程序中定义 /call_graph 终结点,该终结点对 Microsoft Graph API 的 https://graph.microsoft.com/v1.0/me 终结点进行授权调用,以检索已登录用户的配置文件信息。 以下是有关 Graph 访问代码的详细信息。

  1. ./src/main/resources/authentication.properties 文件中,aad.scopes 的值设置为 User.Read 范围。

    范围指示 Microsoft Entra ID 应用程序正在请求的访问级别,并将其映射到应用注册中的权限。 根据请求的范围,Microsoft Entra ID 会在用户登录时向用户显示同意会话框。 如果用户同意一个或多个范围,该范围会被编码到所生成的 access_token(在身份验证响应中返回)中。

  2. 当用户导航到 /call_graph 时,应用程序将创建 IGraphServiceClient 的实例(Microsoft Graph SDK Java),同时传递已登录用户的访问令牌。 从这里开始,Graph 客户端会将访问令牌放置在其请求的授权标头中。 然后,应用会要求 Graph 客户端调用 Microsoft Graph 的 /me 终结点,以生成当前已登录用户的详细信息。

    下面的代码是应用程序开发人员为访问 /me 终结点而编写的全部代码,前提是他们已经拥有 User.Read 范围的 Graph 服务有效访问令牌。

    //CallGraphServlet.java
    User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();