【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法
问题描述
在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等),但是在调用创建AAD用户之前,因为请求的Header中必须包含Authorization:Bearer {token}值。
在中国区获取Graph API的Authorization可以参考调用专用的API来获取身份验证的Token:
###post 请求: https://login.partner.microsoftonline.cn/<tenantID>/oauth2/token ###body 信息: grant_type: client_credentials #固定值 resource: https://microsoftgraph.chinacloudapi.cn/ #固定值 client_secret: AAD 密钥 client_id: AAD 客户端ID #固定值
PS: 除固定值外,其他值都需要在Azure门户的AAD所注册的应用中获取(如不知如何获取,可参考博文:【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization)
成功使用Postman获取到Access Token截图示例:
但是在成功的走出第一步后,接下来调用 API 创建User时,接连获取到如下的三个错误:
1){ "code": "InvalidAuthenticationToken", "message": "Signing key is invalid.", }
2){ "code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation.", }
3){ "code": "Request_BadRequest", "message": "The domain portion of the userPrincipalName property is invalid. You must use one of the verified domain names in your organization.", }
问题一:Signing key is invalid
错误截图:
分析Signing Key is invalid错误,是因为所获取的Token在请求时验证无效,但是Token明明是通过 https://login.partner.microsoftonline.cn/<tenantID>/oauth2/token 获取的。在检查在Users的API URL时,发现使用的为官网(https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http)中的graph.microsoft.com(Global Azure Graph endpoint),而它和Token的请求URL不是同一个Azure环境(中国区Azure)。所以这里需要修改users的API为: https:/ /microsoftgraph.chinacloudapi.cn/v1.0/users
PS: 在使用AAD User时,一定要非常留意所使用的Azure环境,根据环境决定所请求的Endpoint,这可以避免很多错误。
问题二:Insufficient privileges to complete the operation
错误截图:
出现“Insufficient privileges to complete the operation”报错的原因是Clinet (即在AAD中所注册的Application) 没有执行此Users API的权限,需要到门户中按照文档要求授予相应的权限才可以。
(Source: https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http#permissions)
授予Application的权限步骤有三:
1)进入AAD的Application 页面,选择“API 权限” ——> 点击“添加权限” ——> 选择 “Microsoft Graph”
2)选择应用程序权限,添加 "Microsoft Graph"的 User.ReadWrite.All、Directory.ReadWrite.All
3)完成第二步后,需要用管理员账号登录Azure,来”代表Microsoft授予管理员同意“操作
问题三:The domain portion of the userPrincipalName property is invalid
错误截图:
这个 "The domain portion of the userPrincipalName property is invalid".表明参数userPrincipalName的domain部分要和AAD中组织(tenant)名称中的名称一致。
contoso.onmicrosoft.com这个参数是官方文档的示例所用,并不是正确的一个组织域名。所以需要在AAD门户页面的概述中看到正确的域名:如:
参考资料
检查 Azure 中的终结点:https://docs.azure.cn/zh-cn/articles/guidance/developerdifferences?toc=%2fguides%2fdeveloper%2ftoc.json#check-endpoints-in-azure
创建用户:https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http#permissions
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?