使用Microsoft Graph应用权限以任意用户身份发送邮件问题求助
问题根源
你在应用注册中配置的是应用级权限,但实际使用的authorization_code授权码流获取的是委派权限令牌,仅对生成授权码时登录的用户有效,配置的应用级权限并未生效,因此只能代该用户本人发信。
最优解决方案:使用客户端凭证流调用Microsoft Graph
无需为每个邮箱单独配置权限,直接支持以租户内任意启用邮件的对象(包括用户、通讯组、启用邮件的安全组等)作为发件人发信:
- 确认AAD应用配置
- 保留已配置的
Mail.Send应用权限,确认管理员已授予租户级同意,User.Read.All权限非发信必需可按需保留
- 保留已配置的
- 替换令牌获取方式
- 直接向令牌接口发送POST请求,使用客户端凭证流获取令牌,请求体格式如下:
{ "grant_type": "client_credentials", "client_id": "你的Azure应用ClientId", "client_secret": "你的Azure应用ClientSecret", "scope": "https://graph.microsoft.com/.default" }
- 直接向令牌接口发送POST请求,使用客户端凭证流获取令牌,请求体格式如下:
- 调用发信接口
- 仍使用原有发信地址
https://graph.microsoft.com/v1.0/users/{fromAddress}/sendMail发起请求,fromAddress填写任意租户内有效邮件地址即可正常发信,无需单独配置SendAs权限
- 仍使用原有发信地址
可选权限收敛配置
如果需要限制该应用仅能以特定地址发信,避免权限范围过大,可通过Exchange Online PowerShell配置应用访问策略:
- 运行命令:
New-ApplicationAccessPolicy -AppId <你的应用ClientId> -PolicyScopeGroupId <允许发信的地址/包含多个允许地址的组地址> -AccessRight RestrictAccess - 多地址授权可将所有允许发信的地址加入同一个启用邮件的安全组,直接以该组作为策略作用范围即可
内容的提问来源于stack exchange,提问作者Brendan Gooden
相关产品推荐
相关产品推荐

