【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
【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法的更多相关文章
- AAD Service Principal获取azure user list (Microsoft Graph API)
本段代码是个通用性很强的sample code,不仅能够操作AAD本身,也能通过Azure Service Principal的授权来访问和控制Azure的订阅资源.(Azure某种程度上能看成是两个 ...
- 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...
- Microsoft Graph API -----起题 Graph API
最近因为工作需要,接触学习使用了Microsoft Graph API.在看完Microsoft的Graph官方文档之后,也做了一些简单的案例,在Stack Overflow上做过一些回答.整体来说, ...
- Oracle使用外部表批量创建用户
整体思路:通过使用外部表将用户名导入Oracle的表中,然后通过PL/SQL遍历数据表,批量创建用户. 具体步骤如下: 1.在安装数据库的服务器的C盘根目录创建一个User List.txt文件,内容 ...
- [工具] 分布式系统下批量创建用户及分发公钥打通ssh通道的脚本
在分布式系统下偶尔会有这样的需求,要增加一个服务时,需要在集群的所有节点上创建同一个用户,然后打通ssh通道,再分发软件包.配置.执行命令.启动服务... 这个问题的根源是如何集中配置和管理系统,专业 ...
- salt进程查看插件&salt批量创建用户
接受key 剔除主机 启动 salt-minion-d 软件包的安装 salt '*' state.sls init.env-init test=true salt批量创建用户: ...
- SERVER 2012 R2 core域环境下批量创建用户
Write by xiaoyang 转载请注明出处 步骤一:创建域 基本配置 1. 输入命令进入配置 2. 输入8进入网络配置 3. 选择要配置的网 ...
- windows批量创建用户
一.建立用户的命令行语法: 建立用户:net user 用户名 密码 /add (如:net user test 123 /add) 提升权限:net localgro ...
- shell脚本实例-实现监控tcp的链接状态另一种方式批量创建用户
Array实现TCP的链接状态 #!/usr/bin/bash declare -A status type=`ss -an | grep :80|awk '{print $2}'` for i in ...
随机推荐
- windows创建签名文件pfx
https://stackoverflow.com/questions/84847/how-do-i-create-a-self-signed-certificate-for-code-signing ...
- Benjio0-Curriculum Learning 2009
Curriculum Learning 2009 核心思想: 相比于随机选取训练样本对模型进行训练,使用由易到难的样本(更加复杂,包含更多信息)训练模型可以取得更好的训练效果. 由于这种训练模式类似于 ...
- 使用docker搭建sonarqube
sonarqube是一款代码质量检查工具,使用sonar扫描我们写过的代码,可以有助于检查出代码的bug.规范性和健壮性,有助于提高我们的代码质量. 一.安装docker 安装完成之后,命令行输入 d ...
- 【wp】2021MAR-DASCTF_逆向
昨天打完的MAR DASCTF,来复个盘~ 不过就re做了3/4然后有事提前开溜了hhh,拿了drinkSomeTea和replace的三血心满意足(蜜汁三血执念. 感觉这回的出题人好喜欢TEA啊(正 ...
- [图论]最优布线问题:kruskal
最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...
- python基础(十二):if分支表达式
有时候,我们需要依照某种条件,再决定要不要做某个操作.在Python中,if语句能够帮助我们检查程序的当前状态,告诉计算机接下来该做什么. 条件表达式 每个if后面都跟着一个True或False的表达 ...
- Python基础(二十一):面向对象“类”第四课——魔法方法
先划一下重点: 6个魔法方法: 动态操作属性的4个函数: 魔法方法 魔法方法的简单介绍 魔法方法的命名规则:方法名(前后各有2个下划线). 通常情况下,不会主动去调用魔法方法,而是在满足一定的条件下, ...
- CentOS 7.6部署Vue + SrpingBoot + MySQL单体项目
对于独立的项目(前端.后台单体服务.数据库),部署到新服务器上时,常常需要繁琐的配置与环境安装,这里介绍Centos 7.6下如何搭建基于Docker的环境,以及如何使用docker部署一套Vue + ...
- Lua OpenResty容器化(考古历程)
原文地址:Lua OpenResty容器化(考古历程) 背景 公司有几个"远古时期"的项目,一直都相对较为稳定,但是项目每天总会在一些时段,请求每分钟QPS到达峰值800K左右,导 ...
- Fiddler使用 断点 模拟返回 AutoResponder Mock 模拟数据 相关学习记录
断点 测试中有时需要改变发出去的请求信息,需要用到打断点的方法.断点包含两种方式: before response:在request请求的时候,未到达服务器之前,一般用来修改请求参数 after re ...