Java环境下如何通过MSAL撤销Azure AD B2C应用的API权限
Azure AD B2C 应用API权限撤销实现(Java + Microsoft Graph SDK)
你之前的代码分别对应两类API权限的授予:oauth2PermissionGrants 对应委派权限,appRoleAssignments 对应应用程序权限,两类权限的撤销逻辑独立,具体实现如下:
1. 撤销委派权限
委派权限的授权记录是oauth2PermissionGrants集合下的独立实体,撤销时先定位到目标授权记录,执行删除即可。如果仅需移除单个权限而非清空该客户端对资源的所有委派授权,可直接更新授权记录的scope字段,无需删除整条记录。
// 替换为实际参数:clientSpId为B2C应用对应的服务主体ID,resourceSpId为授权目标API对应的服务主体ID String clientSpId = "你的B2C应用服务主体ID"; String resourceSpId = "目标API服务主体ID"; // 筛选匹配的授权记录 IOAuth2PermissionGrantCollectionPage grantPage = graphClient.oauth2PermissionGrants() .buildRequest() .filter(String.format("clientId eq '%s' and resourceId eq '%s'", clientSpId, resourceSpId)) .get(); for (OAuth2PermissionGrant grant : grantPage.getCurrentPage()) { // 仅移除单个权限场景:修改grant.scopes字段,移除不需要的权限值后调用patch更新即可,无需走删除逻辑 // grant.scopes = "保留的权限1 保留的权限2"; // graphClient.oauth2PermissionGrants(grant.id).buildRequest().patch(grant); // 撤销该客户端对资源的所有委派授权 graphClient.oauth2PermissionGrants(grant.id) .buildRequest() .delete(); }
2. 撤销应用程序权限
应用权限的授权记录绑定在服务主体的appRoleAssignments集合下,撤销时直接删除对应ID的角色分配记录即可。
// 替换为实际参数:principalId为授权对应的服务主体ID,和你之前授予权限时传入的principalId一致 String principalId = "应用服务主体ID"; String resourceSpId = "目标API服务主体ID"; String targetAppRoleId = "要撤销的应用权限ID"; // 不知道分配记录ID时,先筛选匹配的角色分配记录 IAppRoleAssignmentCollectionPage assignmentPage = graphClient.servicePrincipals(principalId) .appRoleAssignments() .buildRequest() .filter(String.format("resourceId eq '%s' and appRoleId eq %s", resourceSpId, targetAppRoleId)) .get(); for (AppRoleAssignment assignment : assignmentPage.getCurrentPage()) { graphClient.servicePrincipals(principalId) .appRoleAssignments(assignment.id) .buildRequest() .delete(); } // 如果已经知道appRoleAssignment的ID,可以直接删除,无需先查询 // graphClient.servicePrincipals(principalId) // .appRoleAssignments("已知的分配记录ID") // .buildRequest() // .delete();
注意事项
- 调用删除/更新接口前,确保你的Graph客户端已经拿到足够的权限:操作委派授权需要
OAuth2PermissionGrant.ReadWrite.All权限,操作应用角色分配需要AppRoleAssignment.ReadWrite.All权限 - Azure AD B2C租户下的接口逻辑和普通Azure AD租户完全一致,只要Graph客户端持有的是B2C租户签发的有效令牌即可正常调用
- 权限撤销操作存在最多1分钟的生效延迟,属于平台正常行为
内容的提问来源于stack exchange,提问作者CYLong
相关产品推荐
相关产品推荐

