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

如何限制Azure企业应用仅访问已分配用户的邮件(机密客户端凭证流)

解决方法

首先明确:Azure AD的「Assignment required」设置仅控制用户能否登录该企业应用,对应用级权限(比如你使用的User.Read.All、Mail.Send/Mail.Read)的访问范围没有限制——这类权限一旦获得管理员同意,应用就拥有对整个租户内资源的访问权,所以你当前能发送邮件给域内任意用户是正常现象。

要实现仅操作已分配到企业应用的用户邮件,需要在应用逻辑中主动做权限校验,具体步骤如下:

1. 获取已分配到企业应用的用户列表

使用你的机密客户端令牌调用Graph API,查询对应企业应用(服务主体)的已分配用户:

GET https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalId}/appRoleAssignedTo

返回结果里,principalType为User的条目就是已分配的用户,提取这些用户的principalId(即用户ID)并保存。

2. 邮件操作前校验目标用户

每次调用users/{user}/sendMail或users/{user}/messages接口前,先检查目标用户的ID是否在第一步获取的已分配用户列表中:

  • 如果在列表内,允许执行邮件操作;
  • 如果不在,直接拒绝请求,无需调用Graph API。

3. 定期同步已分配用户列表

由于用户与企业应用的分配关系可能发生变化,建议定期(比如每小时/每天)重新调用appRoleAssignedTo接口更新本地的用户列表,确保校验的准确性。

额外提示

目前MS Graph API没有直接支持基于应用分配关系的权限过滤,因此必须通过应用逻辑实现该限制。另外,为了最小化权限风险:

  • 可将User.Read.All替换为User.ReadBasic.All(如果仅需获取用户基本信息);
  • 确保管理员仅授予应用必要的最小权限。

内容的提问来源于stack exchange,提问作者littlerat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:23:23