使用组和组声明保护 Java Spring Boot 应用
本文演示了一个 Java Spring Boot Web 应用,该应用使用 适用于 Java 的 Microsoft Entra ID Spring Boot Starter 客户端库进行身份验证、授权和令牌获取。 该应用使用 OpenID Connect 协议登录用户,并会根据 Microsoft Entra ID 安全组成员身份来限制对页面的访问。
下图显示了应用的拓扑结构:
客户端应用会使用适用于 Java 的 Microsoft Entra ID Spring Boot Starter 客户端库登录 Microsoft Entra ID 租户中的用户,并从 Microsoft Entra ID 获取 ID 令牌。
ID 令牌包含组声明。 应用程序会将声明加载到已登录用户的 Spring GrantedAuthorities
列表中。 这些值决定了用户有权访问哪些页面。
有关涵盖此场景的视频,请观看使用应用角色、安全组、范围和目录角色在应用程序中实现授权。
先决条件
- JDK 版本 15。 本示例是在使用 Java 15 的系统上开发的,但可能与其他版本兼容。
- Maven 3
- 建议在 Visual Studio Code 中运行此示例时使用适用于 Visual Studio Code 的 Java 扩展包。
- Microsoft Entra ID 租户。 有关详细信息,请参阅快速入门:设置租户。
- Microsoft Entra ID 租户中的用户帐户。 本示例不适用于 Microsoft 个人帐户。 因此,如果使用个人帐户登录 Azure 门户,并且目录中没有用户帐户,则现在就需要创建一个。
- 命名为
AdminGroup
和UserGroup
的两个安全组,其中包含要签名和测试此示例的一个或多个用户。 或者,也可以将用户添加到租户中现有的两个安全组中。 如果选择使用现有组,则务必要修改示例配置,以使用现有安全组的名称和对象 ID。 - Visual Studio Code
- Azure Tools for Visual Studio Code
建议
- 熟悉一下 Spring Framework。
- 熟悉一下 Linux/OSX 终端。
- 用于检查令牌的 jwt.ms。
- 用于监控网络活动和故障排除的 Fiddler。
- 关注 Microsoft Entra ID 博客,了解最新进展情况。
设置示例
以下各部分将介绍如何设置示例应用程序。
克隆或下载示例存储库
要克隆示例,请打开 Bash 窗口并使用以下命令:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups
或者,导航到 ms-identity-msal-java-samples 存储库,然后将其作为 .zip 文件下载并提取到硬盘驱动器。
重要
为避免 Windows 系统对文件路径长度的限制,请将存储库克隆提取到硬盘驱动器根目录附近。
使用 Microsoft Entra ID 租户注册示例应用程序
此示例中有一个项目。 以下各部分将介绍如何使用 Azure 门户注册应用。
选择要在其中创建应用程序的 Microsoft Entra ID 租户
要选择租户,请按以下步骤操作:
登录到 Azure 门户。
如果帐户存在于多个 Microsoft Entra ID 租户中,请在 Azure 门户的角落里选择配置文件,然后选择“切换目录”,将会话更改为所需的 Microsoft Entra ID 租户。
注册应用 (java-spring-webapp-groups)
要注册应用,请按照以下步骤操作:
导航到 Azure 门户,然后选择 Microsoft Entra ID。
在导航窗格中选择“应用注册”,然后选择“新注册”。
在出现的“注册应用程序”页面中,输入以下应用程序注册的信息:
- 在“名称”部分中,输入一个有意义的应用名称,以便向应用用户显示,例如 。
java-spring-webapp-groups
- 在“支持的帐户类型”下,选择“仅此组织目录中的帐户”。
- 在“重定向 URI(可选)”部分的组合框中选择“Web”,然后输入以下重定向 URI:。
http://localhost:8080/login/oauth2/code/
- 在“名称”部分中,输入一个有意义的应用名称,以便向应用用户显示,例如 。
选择“注册”以创建应用程序。
在应用的注册页面上,找到并复制“应用程序(客户端) ID”值,以供稍后使用。 可以在应用程序的一个或多个配置文件中使用此值。
在应用的注册页面上,选择导航窗格中的“证书和机密”,打开可生成机密和上传证书的页面。
在“客户端密码”部分中,选择“新建客户端密码”。
键入描述,例如“应用机密”。
从可用期限中选择一个:“6 个月”、“12 个月”或“自定义”。
选择 添加 。 此时将显示生成的值。
复制并保存生成的值,以供在之后的步骤中使用。 代码的配置文件需要使用此值。 此值不会再显示,也无法通过任何其他方式获取。 因此,在导航到任何其他屏幕或窗格之前,请务必从 Azure 门户保存该值。
在应用程序的注册页面上,选择导航窗格中的“API 权限”,以便打开可添加应用程序所需 API 访问权限的页面。
选择“添加权限”。
确保已选择“Microsoft API”选项卡。
在“常用 Microsoft API”部分,选择“Microsoft Graph”。
在“委托的权限”部分中,从列表中选择 GroupMember.Read.All。 如有必要,请使用搜索框。 如果出现超额情况,则需要此权限才能通过 Graph 获取组成员身份。
选择按钮为
GroupMember.Read.All
授予管理员同意。选择“添加权限”。
创建安全组
要创建安全组,请执行以下步骤:
导航到 Azure 门户,然后选择 Microsoft Entra ID。
在导航窗格中选择“组”。
在“组”窗格中,选择“新建组”,然后提供以下信息:
- 对于“组类型”,请选择“安全性”。
- 对于“组名称”,请输入“AdminGroup”。
- 对于“组说明”,请输入“管理员安全组”。
- 添加要在本示例中使用和测试的“组所有者”和“组成员”。
- 选择创建。
在“组”窗格中,选择“新建组”,然后提供以下信息:
- 对于“组类型”,请选择“安全性”。
- 对于“组名称”,请输入“UserGroup”。
- 对于“组说明”,请输入“用户安全组”。
- 添加要在本示例中使用和测试的“组所有者”和“组成员”。
- 选择创建。
有关详细信息,请参阅管理 Microsoft Entra 组和组成员身份。
配置安全组
关于如何进一步配置应用以接收组声明,可以选择以下选项:
接收已登录用户在 Microsoft Entra ID 租户中分配的所有组,包括嵌套组。 有关详细信息,请参阅配置应用程序以接收已登录用户分配给的所有组(包括嵌套组)部分。
从一系列经过筛选的组中接收组声明值,应用程序已被编程为可以使用它们。 有关详细信息,请参阅配置应用程序以便从用户可能分配给的已筛选组中接收组声明值部分。 Microsoft Entra ID 免费版中没有此选项。
注意
要获取内部部署组的 samAccountName
或 On Premises Group Security Identifier
而不是组 ID,请参阅使用 Microsoft Entra ID 为应用程序配置组声明中的使用从 Active Directory 同步的组特性的先决条件部分。
配置应用程序以接收已登录用户分配给的所有组(包括嵌套组)
要配置应用,请执行以下步骤:
在应用的注册页面上,选择导航窗格中的“令牌配置”即可打开该页面,你可以在其中配置声明,用于向应用程序颁发令牌。
选择“添加组声明”,以便打开“编辑组声明”屏幕。
选择“安全组”或“所有组(包括分发列表,但不包括分配给应用程序的组)”。 同时选择这两个选项会抵消“安全组”选项的效果。
在“ID”部分下,选择“组 ID”。 选择此选项后,Microsoft Entra ID 将在用户登录后应用程序收到的 ID 令牌的组声明中发送用户分配给的组的对象 ID。
配置应用程序以便从用户可能分配给的已筛选组中接收组声明值
在下列情况时,此选项非常有用:
- 应用程序对登录用户可能被分配到的一组选定组感兴趣。
- 应用不会对该用户在租户中分配到的每个安全组都感兴趣。
此选项可帮助应用程序避免超额问题。
要在应用中启用此选项,请执行以下步骤:
在应用的注册页面上,选择导航窗格中的“令牌配置”即可打开该页面,你可以在其中配置声明,用于向应用程序颁发令牌。
选择“添加组声明”,以便打开“编辑组声明”屏幕。
选择“分配给应用程序的组”,并且不要选择任何其他选项。 如果选择更多选项,如“安全组”或“所有组(包括分发列表,但不包括分配给应用程序的组)”,这些选项会抵消“分配给应用程序的组”选项的效果。
在“ID”部分下,选择“组 ID”。 选择此选项后,Microsoft Entra ID 将在用户登录后应用程序收到的 ID 令牌的组声明中发送用户分配给的组的对象 ID。
如果使用“公开 API”选项来公开 Web API,则还可以在“访问”部分下选择“组 ID”选项。 选择此选项后,Microsoft Entra ID 将在向 API 客户端应用程序颁发的访问令牌的组声明中发送用户分配给的组的对象 ID。
在应用的注册页面上,选择导航窗格中的“概述”,以便打开应用程序概览屏幕。
在“本地目录中的托管应用程序”中选择带有应用程序名称的超链接。 此字段标题可能会被截断 - 例如,托管的应用程序...。选择此链接后,将会导航到“企业应用程序概述”页面,该页面与创建的租户中应用程序的服务委托相关联。 可以使用浏览器的后退按钮返回应用程序注册页面。
在导航窗格中选择“用户和组”,以便打开为应用程序分配用户和组的页面。
选择“添加用户”。
从结果屏幕上选择“用户和组”。
选择要分配给此应用程序的组。
选择“选择”以完成组选择。
选择“分配”以完成组分配过程。
现在,当登录应用的用户是一个或多个已分配组的成员时,应用程序就会在组声明中收到这些选定的组。
在导航窗格中选择“属性”,以便打开列出应用程序基本属性的页面。 将“需要进行用户分配?”标志设置为“是”。
重要
在将“需要进行用户分配?”设置为“是”时,Microsoft Entra ID 将检查只有在“用户和组”窗格中分配给应用程序的用户才能登录应用。 可以直接分配用户,也可以通过分配用户所属的安全组来分配。
配置代码示例以使用应用注册和安全组 (java-spring-webapp-groups)
按照以下步骤来配置应用:
注意
在以下步骤中,ClientID
与 Application ID
或 AppId
相同。
在 IDE 中打开项目。
打开 src\main\resources\application.yml 文件。
找到占位符
Enter_Your_Tenant_ID_Here
,用你的 Microsoft Entra 租户 ID 替换现有值。找到占位符
Enter_Your_Client_ID_Here
,然后用从 Azure 门户复制的clientId
应用的应用程序 ID 或java-spring-webapp-groups
替换现有值。找到占位符
Enter_Your_Client_Secret_Here
,然后用从 Azure 门户复制的创建java-spring-webapp-groups
时保存的值替换现有值。找到占位符
Enter_Your_Admin_Group_ID_Here
,然后用objectId
的 值替换现有值。找到占位符
Enter_Your_User_Group_ID_Here
,然后用objectId
的 值替换现有值。打开 src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java 文件。
找到占位符
Enter_Your_Admin_Group_ID_Here
,然后用objectId
的 值替换现有值。找到占位符
Enter_Your_User_Group_ID_Here
,然后用objectId
的 值替换现有值。
运行示例
以下各部分将展示如何将示例部署到 Azure 容器应用。
先决条件
- 一个 Azure 帐户。 如果没有帐户,请创建一个免费帐户。 你需要
Contributor
或Owner
Azure 订阅上的权限才能继续。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。 - Azure CLI。
- Azure 容器应用 CLI 扩展,版本
0.3.47
或更高。 要安装最新版本,请使用az extension add --name containerapp --upgrade --allow-preview
命令。 - Java 开发工具包,版本 17 或更高。
- Maven。
准备 Spring 项目
使用以下步骤来准备项目:
使用以下 Maven 命令生成项目:
mvn clean verify
使用以下命令在本地运行示例项目:
mvn spring-boot:run
安装
要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
为了确保运行最新版本的 CLI,请运行升级命令。
az upgrade
接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行 az containerapp
命令时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
注意
从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true
安装容器应用扩展。
az extension add --name containerapp --upgrade --allow-preview true
现在已安装当前扩展或模块,接下来请注册 Microsoft.App
和 Microsoft.OperationalInsights
命名空间。
注意
Azure 容器应用资源已从 Microsoft.Web
命名空间迁移到 Microsoft.App
命名空间。 有关详细信息,请参阅 2022 年 3 月从 Microsoft.Web 到 Microsoft.App 的命名空间迁移。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
创建 Azure 容器应用环境
完成 Azure CLI 安装后,接下来可以定义要在本文中使用的环境变量。
在 bash shell 中定义以下变量。
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
创建资源组。
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
使用自动生成的日志分析工作区创建环境。
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
显示容器应用环境的默认域。 记下此域,以便在后面的部分中使用。
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
准备部署应用程序
将应用程序部署到 Azure 容器应用时,重定向 URL 会更改为 Azure 容器应用中已部署应用程序实例的重定向 URL。 使用以下步骤更改 application.yml 文件中的这些设置:
导航到应用程序的 src\main\resources\application.yml 文件,并将
post-logout-redirect-uri
的值更改为已部署应用的域名,如下例所示。 请务必用实际值替换<API_NAME>
和<default-domain-of-container-app-environment>
。 例如,使用上一步中 Azure 容器应用环境的默认域和应用名称ms-identity-api
,将使用https://ms-identity-api.<default-domain>
作为post-logout-redirect-uri
的值。post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
保存此文件后,使用以下命令重新生成应用:
mvn clean package
重要
应用程序的 application.yml 文件当前在 client-secret
参数中保存了客户机密的值。 在此文件中保留此值并非良好做法。 如果将文件提交到 Git 存储库,则也可能面临风险。 有关建议的方法,请参阅管理 Azure 容器应用中的机密。
更新 Microsoft Entra ID 应用注册
由于重定向 URI 会更改为在 Azure 容器应用上部署的应用,因此还需要更改 Microsoft Entra ID 应用注册中的重定向 URI。 要进行此更改,请使用以下步骤:
导航到面向开发人员的 Microsoft 标识平台应用注册页。
使用搜索框搜索应用注册,例如
java-servlet-webapp-authentication
。选择应用名称,打开应用注册。
从菜单中选择“身份验证”。
在 Web - 重定向 URI 部分中,选择“添加 URI”。
填写应用程序的 URI,附加
/login/oauth2/code/
- 例如https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
。选择“保存”。
部署应用
将 JAR 包部署到 Azure 容器应用。
注意
如有必要,可以在 Java 生成环境变量中指定 JDK 版本。 有关详细信息,请参阅 在 Azure 容器应用中为 Java 生成环境变量。
现在,可以使用 CLI 命令 az containerapp up
部署 WAR 文件。
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
注意
默认的 JDK 版本为 17。 如果需要更改 JDK 版本以与应用程序兼容,可以使用 --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
参数来调整版本号。
有关生成环境变量的详细信息,请参阅 在 Azure 容器应用中为 Java 生成环境变量。
验证应用
在此示例中,containerapp up
命令包含 --query properties.configuration.ingress.fqdn
参数,该参数会返回完全限定的域名 (FQDN),也称为应用的 URL。 按以下步骤检查应用程序的日志,以调查任何部署问题:
从“部署”部分的“输出”页面访问输出应用程序 URL。
在 Azure 容器应用实例“概述”页面的导航窗格中,选择“日志”以检查应用的日志。
探索示例
按照以下步骤来探索示例:
- 注意屏幕中央显示的登录或退出状态。
- 选择角落里的上下文相关按钮。 首次运行应用时,此按钮显示“登录”。 或者,选择“令牌详细信息”、“仅限管理员”或“普通用户”。 由于这些页面受保护并需要身份验证,因此你会被自动重定向到登录页面。
- 在下一页上,按照说明使用 Microsoft Entra ID 租户中的帐户登录。
- 在同意屏幕上,请注意正在请求的范围。
- 成功完成登录流后,你将被重定向到主页(显示“登录状态”)或其他页面之一,这取决于哪个按钮触发了你的登录流。
- 请注意,上下文相关按钮现在显示“注销”并显示你的用户名。
- 如果是在主页上,请选择“ID 令牌详细信息”,以便查看 ID 令牌的一些已解码声明,包括组。
- 选择“仅限管理员”以查看 。
/admin_only
只有属于AdminGroup
安全组的用户才能查看此页面。 否则,系统将显示授权失败消息。 - 选择“常规用户”以查看 页面。
/regular_user
只有属于UserGroup
安全组的用户才能查看此页面。 否则,系统将显示授权失败消息。 - 使用角落的按钮注销。状态页面会显示新的状态。
关于代码
此示例演示了如何使用适用于 Java 的 Microsoft Entra ID Spring Boot Starter 客户端库将用户登录到 Microsoft Entra ID 租户。 此示例还使用了 Spring Oauth2 Client 和 Spring Web Boot Starter。 此示例使用从 Microsoft Entra ID 获取的 ID 令牌中的声明来显示已登录用户的详细信息,并通过使用组声明授权来限制对某些页面的访问。
目录
下表列出了示例项目文件夹的内容:
文件/文件夹 | 说明 |
---|---|
pom.xml | 应用程序依赖项。 |
src/main/resources/templates/ | 适用于 UI 的 Thymeleaf 模板。 |
src/main/resources/application.yml | 应用程序和 Microsoft Entra ID Boot Starter 库配置。 |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | 此目录包含主应用程序入口点、控制器和配置类。 |
.../MsIdentitySpringBootWebappApplication.java | 主类。 |
.../SampleController.java | 带有终结点映射的控制器。 |
.../SecurityConfig.java | 安全配置 - 例如,哪些路由需要身份验证。 |
.../Utilities.java | 实用工具类 - 例如,筛选器 ID 令牌声明。 |
CHANGELOG.md | 示例更改的列表。 |
CONTRIBUTING.md | 参与示例的指南。 |
许可证 | 示例的许可证。 |
ID 令牌声明
为了提取令牌详细信息,应用在请求映射中使用了 Spring Security 的 AuthenticationPrincipal
和 OidcUser
对象,如下例所示。 有关此应用如何使用 ID 令牌声明的全部详情,请参阅示例控制器。
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
处理 ID 令牌中的组声明
令牌的组声明包括已登录用户被分配到的组名称,如下例所示:
{
...
"groups": [
"xyz-id-xyz",
"xyz-id-xyz",]
...
}
访问组名的常用方法已在 ID 令牌声明部分中进行了说明。
Microsoft Entra ID Boot Starter v3.5 及更高版本会自动解析组声明,并将每个组添加到登录用户的 Authorities
。 此配置让开发人员能够使用 PrePost
方法来使用带有 Spring hasAuthority
条件注释的组。 例如,可以在 @PreAuthorize
中查找演示的以下 条件:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
// restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
// restrict to users who belong to any of UserGroup or AdminGroup
}
以下代码获取给定用户的颁发机构的完整列表:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
登录和注销链接
对于登录,应用会向 Microsoft Entra ID Spring Boot Starter Java 客户端库自动配置的 Microsoft Entra ID 登录终结点发出请求,如下例所示:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
对于注销,应用会向 logout
终结点发出 POST 请求,如下例所示:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
依赖于身份验证的 UI 元素
该应用在 UI 模板页面中设置了一些简单的逻辑,用于根据用户是否通过身份验证来确定要显示的内容,如下面使用 Spring Security Thymeleaf 标签的示例所示:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
使用 AADWebSecurityConfigurerAdapter 保护路由
默认情况下,应用会保护“ID 令牌详细信息”、“仅限管理员”和“普通用户”页面,因此只有已登录的用户才能访问这些页面。 应用会使用 app.protect.authenticated
application.yml 文件中的 属性来配置这些路由。 要配置应用的特定需求,可以在其中一个类中扩展 AADWebSecurityConfigurationAdapter
。 例如,请参阅此应用程序的 SecurityConfig 类,如以下代码所示:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
组超额声明
为确保令牌大小不超过 HTTP 标头大小限制,Microsoft 身份识别平台限制了组声明中包含的对象 ID 数量。
SAML 令牌的超额限制为 150 个,JWT 令牌为 200 个,单页应用程序为 6 个。 如果用户加入的组超过了超额限制,则 Microsoft 身份识别平台不会在令牌中的组声明中发出组 ID。 但是,它会在令牌中包含超额声明,该声明指示应用程序查询 Microsoft Graph API 以检索用户的组成员身份。
Microsoft Entra ID Boot Starter v3.5 及更高版本会自动解析组声明,并将每个组添加到登录用户的 Authorities
。 启动器会自动处理组超额情况。
注意
强烈建议尽可能使用组筛选功能,以避免出现组超额的情况。 有关详细信息,请参阅配置应用程序以便从用户可能分配给的已筛选组中接收组声明值部分。
创建超额方案进行测试
可以使用 AppCreationScripts 文件夹中提供的 BulkCreateGroups.ps1 文件来创建大量组并为其分配用户。 此文件有助于在开发过程中测试超额情况。 记得更改 objectId
脚本中提供的用户 。
处理超额需要调用 Microsoft Graph 来读取已登录用户的组会员身份,因此你的应用程序需要拥有 User.Read 和 GroupMember.Read.All 权限才能成功执行 getMemberGroups 函数。
重要
对于超额情况,请确保已为客户端和服务应用的 Microsoft Graph API 的 Admin Consent
范围授予 GroupMember.Read.All
。 有关详细信息,请参阅本文前面的应用注册步骤。
更新 Microsoft Entra ID 应用注册 (java-spring-webapp-groups)
要更新应用注册,请执行以下步骤:
导航回到 Azure 门户。
在导航窗格中,选择“Azure Active Directory”,然后选择“应用注册(预览)”。
在出现的屏幕中,选择
java-spring-webapp-groups
应用程序。在应用的注册页面中,从菜单中选择“身份验证”。
在“重定向 URI”部分中,更新回复 URL 以匹配 Azure 部署的站点 URL,例如 。
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
重要
如果您的应用程序正在使用内存存储,那么当您的网站处于非活动状态时,Azure 应用服务会将其关闭,并且应用程序保留的任何记录都会被清空。 此外,如果增加网站的实例数,请求就会在实例之间分配。 因此,应用记录在每个实例中都不一样。
详细信息
- Microsoft 标识平台文档
- Microsoft 身份验证库 (MSAL) 的概述
- 快速入门:将应用程序注册到 Microsoft 标识平台
- 快速入门:配置客户端应用程序以访问 Web API
- 了解 Microsoft Entra ID 应用程序同意体验
- 了解用户同意和管理员同意
- Azure Active Directory 中的应用程序对象和服务主体对象
- 国家云
- MSAL 代码示例
有关 OAuth 2.0 协议如何在此方案和其他方案中工作的详细信息,请参阅 Microsoft Entra ID 的身份验证方案。