问题描述

查看官方文档“ Get a user ” , 产生了一个操作示例的想法,在中国区Azure环境中,演示如何获取AAD User信息。

问题解答

使用Microsoft Graph API,演示如何获取AAD User信息,因参考文档是针对Global Azure,所以文档种的URL为:

// Global Azure Microsoft Graph API Host
GET https://graph.microsoft.com/v1.0/me

需要修改为

// 中国区Azure的Microsoft Graph API Host
GET https://microsoftgraph.chinacloudapi.cn/v1.0//me

第一步:使用 https://microsoftgraph.chinacloudapi.cn/v1.0/me 来查询自己的用户信息,失败!提示需要Access Token

那么:如何来获取Access Token呢?

第二步:使用az login 和az account access-token命令来获取正确的Authentication (Bearer .....)

1) 设置登录环境为中国区 Azure

2) az login 登录,在弹出框种输入Azure用户名及密码

3) 使用 az account access-token 生成 Access Token

##设置Azure 环境为 Azure China Cloud
az cloud set --name AzureChinaCloud ##登录
az login ## 生成 Access Token
az account get-access-token

当使用以上指令生成的 Access Token 放入 https://microsoftgraph.chinacloudapi.cn/v1.0/me 请求,继续错误。错误消息提示 Audience不对 [Access token validation failure. Invalid audience.] 

jwt.ms上去解析Access Token后,发现aud使用的是 "https://management.core.chinacloudapi.cn/", 而我们请求的URL 是 https://microsoftgraph.chinacloudapi.cn/

所以,需要在生成Access Token时,指定 aud, 正确命令为: az account get-access-token --resource 'https://microsoftgraph.chinacloudapi.cn/'

## 设置Azure 环境为 Azure China Cloud
az cloud set --name AzureChinaCloud ## 登录
az login #### 生成 Access Token, 使用默认resource (https://management.core.chinacloudapi.cn/) 作为 aud,
##az account get-access-token ## 修改resource为microsoft graph api
az account get-access-token --resource 'https://microsoftgraph.chinacloudapi.cn/'

第三步:生成正确的Access Token,访问 Microsoft Graph API 获取me信息,成功

第四步:接下来,通过User ID或者UserPrincipalName获取其他用户的信息,一个失误引发的400 Bad Request错误

思考中。。。 。。。

明明只是修改请求中的me为User ID,而且这个User ID就是一个真实用户的ID啊!

400 Bad Request, 是URL 不对吗?

仔细,仔细查看Get User接口文档,原来真是没有注意细节啊。

通过UserID或者User Principal Name的API URL是 https://microsoftgraph.chinacloudapi.cn/v1.0/users/<user id | user principal name>,  因为粗心,丢失了/users。

# 正确的
https://microsoftgraph.chinacloudapi.cn/v1.0/users/68b844af-*************************** VS # 错误的
https://microsoftgraph.chinacloudapi.cn/v1.0/68b844af-***************************

终于,大功告成。

附录:其他Graph API获取用户信息示例

1:获取全部用户信息

GET https://microsoftgraph.chinacloudapi.cn/v1.0/users

2:根据mail查找用户

GET https://microsoftgraph.chinacloudapi.cn/v1.0/users?$count=true&$filter=startswith(mail,'yourmailaddress')

参考资料

Microsoft Graph API Get a User :https://learn.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http

az account get-access-token : https://learn.microsoft.com/en-us/cli/azure/account?view=azure-cli-latest

JWT 解析: https://jwt.ms/

 

【Azure Developer】使用 Microsoft Graph API 获取 AAD User 操作示例的更多相关文章

  1. AAD Service Principal获取azure user list (Microsoft Graph API)

    本段代码是个通用性很强的sample code,不仅能够操作AAD本身,也能通过Azure Service Principal的授权来访问和控制Azure的订阅资源.(Azure某种程度上能看成是两个 ...

  2. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

  3. 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)

    Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...

  4. Microsoft Graph API -----起题 Graph API

    最近因为工作需要,接触学习使用了Microsoft Graph API.在看完Microsoft的Graph官方文档之后,也做了一些简单的案例,在Stack Overflow上做过一些回答.整体来说, ...

  5. 解决使用Microsoft Graph OAuth获取令牌时,没有refresh_token的问题

    今天在使用Microsoft Graph 的时候,发现按照官方文档,无论如何都不能获取refresh_token,其他都没问题,经过查询,发现是因为在第一步,获取code授权时,没有给离线权限(off ...

  6. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...

  7. 【Azure Developer】使用Microsoft Graph API创建用户时候遇见“401 : Unauthorized”“403 : Forbidden”

    问题描述 编写Java代码调用Mircrosoft Graph API创建用户时,分别遇见了"401 : Unauthorized"和"403 : Forbidden&q ...

  8. 【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据

    问题描述 使用Python SDK来获取Azure上的各种资源的Metrics的名称以及Metrics Data的示例 问题解答 通过 azure-monitor-query ,可以创建一个 metr ...

  9. Azure DevOps Server: 使用Rest Api获取拉取请求Pull Request中的变更文件清单

    需求: Azure DevOps Server 的拉取请求模块,为开发团队提供了强大而且灵活的代码评审功能.拉取请求中变更文件清单,对质量管理人员,是一个宝贵的材料.质量保障人员可以从代码清单中分析不 ...

  10. 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)

    问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...

随机推荐

  1. PHP实现JWT登录鉴权

    一.什么是JWT 1.简介 JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. 简单的说,JWT就是一种Token的编码算法,服务器端负责根据一个 ...

  2. tortoiseGit配置和git常用命令

    tortoiseGit配置:https://blog.csdn.net/hjwdz2015/article/details/90487554 常用命令 一.git config --global us ...

  3. swagger 兼容 docker 转发 配置

    app.UseSwagger(c => { c.PreSerializeFilters.Add((swagger, httpReq) => { string swagger_index_u ...

  4. ASP.NET WEBAPI oken验证

    看了下网上关于.net webAPI 的案例全是坑 验证成功了不被微信服务器接收 微信客服有找不到,提问也没人回 自己测试好几个小时 终于发现返回结果只要个string 双引号都不用加 public ...

  5. .Netcore webApi 注入socket 与客户端交互

    模拟服务端 private string TcpServiceControl(string value) { // 1.按照模拟工具上看 先new一个tcp服务 Socket serverSocket ...

  6. vue项目 - 自定义数字输入指令 | 限制自定义小数位输入

    1.在main.js中直接加入代码: import Vue from 'vue' Vue.directive("input-limit", { bind(el, binding) ...

  7. 读取远程服务器linux指定目录下文本内容(工具类)

    package com.aa.dataadmin.common.utils; import cn.hutool.extra.ssh.JschUtil; import com.jcraft.jsch.C ...

  8. 关于前端JS的一些常用方法和知识

    关于前端数据存储目前只解释有三种:cookie.localStorage.sessionStorage cookie解释:只针对当前session(会话)有效,关闭标签页即失效使用: 1 var ck ...

  9. WinHex恢复分区

    情景再现:可能在某一天,打开电脑时发现只剩C盘,剩下的盘找不到了,那么要如何恢复呢? 创建虚拟硬盘方便我们做实验 右键计算机 -> 管理 -> 磁盘管理右键 -> 创建VHD虚拟硬盘 ...

  10. 如何使用Mutex确保并发程序的正确性

    1. 简介 本文的主要内容是介绍Go中Mutex并发原语.包含Mutex的基本使用,使用的注意事项以及一些实践建议. 2. 基本使用 2.1 基本定义 Mutex是Go语言中的一种同步原语,全称为Mu ...