如何通过C#/PowerShell使用MSGraph获取AAD的用户与设备设置值?
所需AAD配置的MS Graph读取实现(C# 优先)
核心端点定位
你要读取的三类配置分属两类租户策略资源,不属于通用租户基础属性接口,读取失败的核心原因通常是端点定位错误,正确的匹配关系如下:
- 用户类设置项(「用户可注册应用」「限制对Azure AD管理门户的访问权限」):归属**授权策略(Authorization Policy)**资源,对应MS Graph端点为
GET /policies/authorizationPolicy- 「用户可注册应用」对应返回字段:
defaultUserRolePermissions.allowedToCreateApps,布尔值标记普通用户是否具备应用注册权限 - 「限制对Azure AD管理门户的访问权限」对应返回字段:
defaultUserRolePermissions.allowedToReadOtherUsers,当该值为false时,普通用户将被拦截无法访问AAD管理门户,与门户内开关行为完全一致
- 「用户可注册应用」对应返回字段:
- 设备类设置项(「用户可将设备加入Azure AD」):归属**设备注册策略(Device Registration Policy)**资源,对应MS Graph端点为
GET /policies/deviceRegistrationPolicy- 目标值对应返回字段:
userDeviceJoinRestrictions.allowedToJoinAzureAd,布尔值标记普通用户是否具备将自有设备加入AAD的权限
- 目标值对应返回字段:
C# 实现说明
基于MS Graph .NET SDK实现的核心流程如下:
- 先安装NuGet依赖:
Microsoft.Graph - 认证权限要求:使用你已掌握的令牌获取流程时,需为应用授予应用程序权限类型的
Policy.Read.All,完成管理员同意后即可覆盖所有三个配置的读取需求,无需额外申请高权限 - 核心调用代码:
// 基于已获取的有效访问令牌初始化Graph客户端 var graphClient = new GraphServiceClient( new BaseBearerTokenAuthenticationProvider(new TokenProvider(yourValidAadToken))); // 读取用户类两个配置值 var authorizationPolicy = await graphClient.Policies.AuthorizationPolicy.GetAsync(); bool userCanRegisterApp = authorizationPolicy!.DefaultUserRolePermissions!.AllowedToCreateApps!.Value; bool userCanAccessAadPortal = authorizationPolicy!.DefaultUserRolePermissions!.AllowedToReadOtherUsers!.Value; // 读取设备类配置值 var deviceRegPolicy = await graphClient.Policies.DeviceRegistrationPolicy.GetAsync(); bool userCanJoinAadDevice = deviceRegPolicy!.UserDeviceJoinRestrictions!.AllowedToJoinAzureAd!.Value;
常见踩坑提醒
- 不要尝试从
/organization、旧版/directorySetting等端点查找这些配置,这两类端点不存储上述租户策略值 - 避免使用已弃用的旧版Azure AD Graph(
graph.windows.net)接口读取,上述配置仅在商用版MS Graph(graph.microsoft.com)中提供稳定支持 - 如果调用返回403权限错误,优先核对权限类型:后台统计场景下使用委托类用户权限会因为没有交互登录上下文失败,必须使用应用程序权限
内容的提问来源于stack exchange,提问作者S Osborn
相关产品推荐
相关产品推荐

