创建委托管理员关系:获取Microsoft Graph统一角色roleDefinitionId
如何获取Azure AD统一管理角色的roleDefinitionId并实现自动转换
一、直接使用固定的角色ID(推荐)
Azure AD的统一管理角色ID是全局固定的,不会随租户变化,你可以直接在代码中预定义角色名称与ID的映射表,无需调用API。常用角色对应关系如下:
- 全局管理员(Global admin):
62e90394-69f5-4237-9190-012177145e10 - 用户管理员(User administrator):
fe930be7-5e62-47db-91af-98c3a49a38b1 - 计费管理员(Billing administrator):
b0f54661-2d74-4c50-afa3-1ec803f12efe - 服务管理员(Service administrator):
d936f2d0-98a6-420d-9607-45412663957b - 密码管理员(Password administrator):
9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3
二、编程方式动态获取所有角色ID
如果需要支持全量管理角色,可通过Microsoft Graph API调用获取租户的所有统一角色及其ID:
调用接口
发送GET请求到:
https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions
权限要求
需要拥有RoleManagement.Read.Directory权限(委托权限或应用权限均可)。
三、PHP实现角色名称转ID的方案
方案1:预定义映射表(高效)
在前端HTML表单中提供角色选择下拉框:
<select name="selectedRole"> <option value="Global admin">全局管理员</option> <option value="User administrator">用户管理员</option> <!-- 按需添加其他角色 --> </select>
后端PHP直接通过映射数组转换:
// 预定义角色名称与ID的映射 $roleIdMap = [ 'Global admin' => '62e90394-69f5-4237-9190-012177145e10', 'User administrator' => 'fe930be7-5e62-47db-91af-98c3a49a38b1', // 补充更多角色 ]; // 获取表单提交的角色名称 $selectedRoleName = $_POST['selectedRole'] ?? ''; // 匹配对应的roleDefinitionId $roleDefinitionId = $roleIdMap[$selectedRoleName] ?? '';
方案2:动态获取并匹配
如果需要自动同步最新角色,可先调用Graph API获取角色列表并缓存(角色不会频繁变动),再进行匹配:
// 假设已获取有效的Microsoft Graph访问令牌 $accessToken = 'YOUR_ACCESS_TOKEN'; // 调用Graph API获取角色列表 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer {$accessToken}", "Content-Type: application/json" ]); $response = curl_exec($ch); curl_close($ch); // 解析响应并构建映射数组 $roleData = json_decode($response, true); $roleIdMap = []; foreach ($roleData['value'] as $role) { $roleIdMap[$role['displayName']] = $role['id']; } // 根据表单提交的角色名称获取ID $selectedRoleName = $_POST['selectedRole'] ?? ''; $roleDefinitionId = $roleIdMap[$selectedRoleName] ?? '';
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

