You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:36:22