为托管身份分配应用角色后,获取含Mail.Send的访问令牌失败
解决系统分配托管身份令牌缺失Mail.Send角色的问题
检查令牌请求受众
用DefaultAzureCredential获取令牌时,必须确保请求的受众是https://graph.microsoft.com/。受众不对的话,令牌里不会携带Graph相关权限。可以在获取令牌时明确指定受众参数来验证。确认应用角色分配对象
要保证应用角色是分配给函数应用的系统托管身份,而非你创建的那个应用注册本身,别混淆两个对象导致分配到错误主体。用Azure CLI再核对一遍:az role assignment list --assignee <托管身份的Object ID> --all查看结果里是否包含目标应用角色的条目。
等待权限传播延迟
Azure权限分配可能存在15-30分钟的传播延迟,哪怕门户显示已分配,令牌可能还未更新。可以等待一段时间后再尝试,或者重启函数应用触发身份刷新。解析令牌确认内容
用离线JWT解码工具解析获取到的令牌,检查roles声明里是否包含Mail.Send。如果确实没有,重新执行应用角色分配命令,确保参数正确:az ad app role assignment create --assignee <托管身份Object ID> --resource <应用注册的Object ID> --role <Mail.Send角色的ID>注意
--resource参数是你配置了Mail.Send权限的应用注册的Object ID,而非Graph的ID。核对应用注册权限配置
确认应用注册上的Microsoft GraphMail.Send权限是Application类型,且已经获得全局管理员同意。在应用注册的“API权限”页面查看状态是否为“已授予管理员同意”。
内容的提问来源于stack exchange,提问作者Nicole Ashley
相关产品推荐
相关产品推荐

