练习 - 使用 MSAL 授权访问 Microsoft Graph API
在本练习中,你将为应用程序配置权限并使用 MSAL 从 Microsoft Graph (MS Graph) API 访问用户配置文件信息。
将 Microsoft Graph 权限添加到应用注册
受 Microsoft Entra ID 保护的 Web 服务定义了一组权限,用于访问该服务公开的 API 功能和数据。 应用程序在访问数据或代表用户执行操作之前,必须请求这些需要获得用户批准的权限。 可从 Azure 门户向应用注册分配这些 API 权限。 下面介绍为应用程序分配 Microsoft Graph API 权限的步骤。
在“应用注册”屏幕上,选择“API 权限”,添加应用程序所需的 API 访问权限。
运行应用程序
可以尝试在上一练习中运行的应用程序上进行图形 API 调用。
打开浏览器并导航到
http://localhost:8080/msal4j-servlet-graph/
。 如果你尚未登录,系统会将你重定向,以便你使用 Microsoft Entra ID 登录。 成功登录后,应会看到下图所示页面。选择“调用图”,调用 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 访问代码的详细信息。
在 ./src/main/resources/authentication.properties 文件中,
aad.scopes
的值设置为 User.Read 范围。范围指示 Microsoft Entra ID 应用程序正在请求的访问级别,并将其映射到应用注册中的权限。 根据请求的范围,Microsoft Entra ID 会在用户登录时向用户显示同意会话框。 如果用户同意一个或多个范围,该范围会被编码到所生成的
access_token
(在身份验证响应中返回)中。当用户导航到
/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();