练习 - 使用 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 访问权限。

    • 选择“+ 添加权限”按钮。

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

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

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

    • 单击底部的“添加权限”按钮。

    Screenshot showing the API permissions blade of an app registered with Microsoft Entra ID on Azure portal.

运行应用程序

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

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

    Screenshot showing the button to call graph displayed on the page after successfully signing in to sample application.

  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();