使用 Microsoft Graph 授予管理员许可 API - Java
Grant Admin Consent using Microsoft Graph API - Java
我已经使用图表 API 创建了一个应用程序并且我已经为他们分配了权限 - 委托和应用程序...
ServicePrincipal servicePrincipal = graphClient.servicePrincipals(resSerPrinId)
.buildRequest()
.get();
List<AppRole> appRoles = servicePrincipal.appRoles;
List<PermissionScope> scopes = servicePrincipal.oauth2PermissionScopes;
List<ResourceAccess> raList = new ArrayList<ResourceAccess>();
for (AppRole appRole : appRoles) {
ResourceAccess access = new ResourceAccess();
access.id = appRole.id;
access.type = "Role";
raList.add(access);
}
System.out.println("Roles added...");
for (PermissionScope permissionScope : scopes) {
ResourceAccess access = new ResourceAccess();
access.id = permissionScope.id;
access.type = "Scope";
raList.add(access);
}
System.out.println("Scopes added...");
RequiredResourceAccess reqResAccess = new RequiredResourceAccess();
reqResAccess.resourceAccess = raList;
reqResAccess.resourceAppId = resSerPrinAppClientId;
List<RequiredResourceAccess> rraList = new ArrayList<RequiredResourceAccess>();
rraList.add(reqResAccess);
Application application = graphClient.applications(clientAppObjId)
.buildRequest()
.get();
application.requiredResourceAccess = rraList;
graphClient.applications(clientAppObjId)
.buildRequest()
.patch(application);
在上面的代码中,resSerPrinId 是资源服务主体 ID,它在清单中具有应用程序角色,在“公开 api”部分中具有范围...
所以我从该资源服务主体中提取 appRoles 和 oauth2Permission 并将它们发送给客户端服务主体...
在 UI 我看到权限没有授予...
是否可以使用一些图表 API 或手动加载这些权限然后授予他们管理员权限...或者我是否需要始终使用 UI 来做...?
所以我们基本上有两种类型的权限 - 角色(应用程序)/范围(委托)
因此,要向您的委派权限提供“授予管理员同意”,请使用以下代码段
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
OAuth2PermissionGrant oAuth2PermissionGrant = new OAuth2PermissionGrant();
oAuth2PermissionGrant.clientId = "clientId-value";
oAuth2PermissionGrant.consentType = "consentType-value";
oAuth2PermissionGrant.principalId = "principalId-value";
oAuth2PermissionGrant.resourceId = "resourceId-value";
oAuth2PermissionGrant.scope = "scope-value";
graphClient.oauth2PermissionGrants()
.buildRequest()
.post(oAuth2PermissionGrant);
这是 link 文档 - Read about oAuth2PermissionGrant here
现在要为应用程序权限提供“授予管理员同意”,请使用以下代码片段...
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
AppRoleAssignment appRoleAssignment = new AppRoleAssignment();
appRoleAssignment.principalId = UUID.fromString("33ad69f9-da99-4bed-acd0-3f24235cb296");
appRoleAssignment.resourceId = UUID.fromString("9028d19c-26a9-4809-8e3f-20ff73e2d75e");
appRoleAssignment.appRoleId = UUID.fromString("ef7437e6-4f94-4a0a-a110-a439eb2aa8f7");
graphClient.servicePrincipals("9028d19c-26a9-4809-8e3f-20ff73e2d75e").appRoleAssignedTo()
.buildRequest()
.post(appRoleAssignment);
这是文档的 link - Read more about AppRoleAssignment here
你必须在这里使用这两个坏男孩,这就完成了 - 只需使用正确的 ID(不要将客户端 ID 与客户端主体 ID 混淆)
基本上流程是 - 获取所有权限(两种类型都使用 Required Resource Access 加载 - 然后使用上面的代码向所有权限添加管理员授权。希望这有帮助。如果您需要更多帮助,请发表评论。
我已经使用图表 API 创建了一个应用程序并且我已经为他们分配了权限 - 委托和应用程序...
ServicePrincipal servicePrincipal = graphClient.servicePrincipals(resSerPrinId)
.buildRequest()
.get();
List<AppRole> appRoles = servicePrincipal.appRoles;
List<PermissionScope> scopes = servicePrincipal.oauth2PermissionScopes;
List<ResourceAccess> raList = new ArrayList<ResourceAccess>();
for (AppRole appRole : appRoles) {
ResourceAccess access = new ResourceAccess();
access.id = appRole.id;
access.type = "Role";
raList.add(access);
}
System.out.println("Roles added...");
for (PermissionScope permissionScope : scopes) {
ResourceAccess access = new ResourceAccess();
access.id = permissionScope.id;
access.type = "Scope";
raList.add(access);
}
System.out.println("Scopes added...");
RequiredResourceAccess reqResAccess = new RequiredResourceAccess();
reqResAccess.resourceAccess = raList;
reqResAccess.resourceAppId = resSerPrinAppClientId;
List<RequiredResourceAccess> rraList = new ArrayList<RequiredResourceAccess>();
rraList.add(reqResAccess);
Application application = graphClient.applications(clientAppObjId)
.buildRequest()
.get();
application.requiredResourceAccess = rraList;
graphClient.applications(clientAppObjId)
.buildRequest()
.patch(application);
在上面的代码中,resSerPrinId 是资源服务主体 ID,它在清单中具有应用程序角色,在“公开 api”部分中具有范围...
所以我从该资源服务主体中提取 appRoles 和 oauth2Permission 并将它们发送给客户端服务主体...
在 UI 我看到权限没有授予...
是否可以使用一些图表 API 或手动加载这些权限然后授予他们管理员权限...或者我是否需要始终使用 UI 来做...?
所以我们基本上有两种类型的权限 - 角色(应用程序)/范围(委托)
因此,要向您的委派权限提供“授予管理员同意”,请使用以下代码段
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
OAuth2PermissionGrant oAuth2PermissionGrant = new OAuth2PermissionGrant();
oAuth2PermissionGrant.clientId = "clientId-value";
oAuth2PermissionGrant.consentType = "consentType-value";
oAuth2PermissionGrant.principalId = "principalId-value";
oAuth2PermissionGrant.resourceId = "resourceId-value";
oAuth2PermissionGrant.scope = "scope-value";
graphClient.oauth2PermissionGrants()
.buildRequest()
.post(oAuth2PermissionGrant);
这是 link 文档 - Read about oAuth2PermissionGrant here
现在要为应用程序权限提供“授予管理员同意”,请使用以下代码片段...
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
AppRoleAssignment appRoleAssignment = new AppRoleAssignment();
appRoleAssignment.principalId = UUID.fromString("33ad69f9-da99-4bed-acd0-3f24235cb296");
appRoleAssignment.resourceId = UUID.fromString("9028d19c-26a9-4809-8e3f-20ff73e2d75e");
appRoleAssignment.appRoleId = UUID.fromString("ef7437e6-4f94-4a0a-a110-a439eb2aa8f7");
graphClient.servicePrincipals("9028d19c-26a9-4809-8e3f-20ff73e2d75e").appRoleAssignedTo()
.buildRequest()
.post(appRoleAssignment);
这是文档的 link - Read more about AppRoleAssignment here
你必须在这里使用这两个坏男孩,这就完成了 - 只需使用正确的 ID(不要将客户端 ID 与客户端主体 ID 混淆)
基本上流程是 - 获取所有权限(两种类型都使用 Required Resource Access 加载 - 然后使用上面的代码向所有权限添加管理员授权。希望这有帮助。如果您需要更多帮助,请发表评论。