Microsoft Graph是什么?

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

这句话来自微软的官网介绍,听起来很拗口,简单的说,就是微软的API。

在理解Microsoft Graph之前,你需要知道Microsoft365能做什么?答案是,能做微软提供的所有在线服务。

这里,除了常见的Web开发,还包括Network,Office,AD域,安全,物联网,AI,域名等等。

整个系统,就像计算机“图论”里的一个“Graph”,把 人,机器,日历,任务,会议,文件 等连接在了一起。

这或许就是被叫做Microsoft Graph而不叫Microsoft API的原因。

2.注册自己的App

Microsoft Graph开发的第一步,就是要注册自己的App,在微软云后台里,注册自己的App,能够获取到2个重要的参数:

Application (client id) ID和 Directory (tenant id) ID。

Application ID是系统识别每一个应用程序,而Directory ID是租户的标识。(这2个参数非常重要,后面会说要获取Token。)

3.增加密钥

在获取Token时,还需要传递密钥,密钥可以认为是ApplicationID的密码,因为ApplicationID是固定的,而密钥则允许管理员定期修改。

点击“New Client Secret”就可以了,让系统随机生成密钥。

4.获取Token

Token令牌就像你在公司里“员工证”。有了Token以后,你就可以读取Microsoft Graph提供的接口了(且慢,还要授权),

下面是一个POST示意网址,用来生成Token,

https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?client_id=11111111-1111-1111-1111-111111111111
&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F&response_mode=query
&scope=offline_access%20user.read%20mail.read&state=12345

简单分解一下上面网址,

首先,POST网址到 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize,然后带上client_id参数

{
"token_type": "Bearer",
"scope": "user.read%20Fmail.read",
"expires_in": 3600,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4..."
}

  

当成功后,系统会返回一个JSON字符串,其实字符串里包含你想要的Access Token令牌。

另外几个参数,例如 expires_in 表示token有效期为3600秒,每一次调用token,系统都会返回不同的token。

但是,如果频繁调用,有可能Microsoft有次数限制,因此,在获取token后,通常你要存储在本地,每次直接从本机上读取,

而不是每次都要到服务器上获取。

5.生成 Bearer token

在上面获取的token有一个token_type,也许后期会变,但是感觉变化可能性极低。什么是Bearer token?Bearer的中文翻译是持有人,其实Bearer token是什么鬼,

你也不用管那么多,反正就是“Bearer+空格+Token” 就生产了。在程序里,直接拼凑即可。

例如:

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

这个作为Request的Header的Authorization的值。

例如,你要获取公司里前5个人的列表,直接Get请求下面网址时,Microsoft Graph会先从Header里提取Authorization判断您的权限,然后返回结果。

https://graph.microsoft.com/v1.0/users?$top=5  

如果使用.NET基本代码如下:  

string token="Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...";
string url="https://graph.microsoft.com/v1.0/users?$top=5";
WebRequest request = (WebRequest)HttpWebRequest.Create(url);
request.Method = "Get"; request.Headers.Set("Authorization", token);

  

6.应用授权

默认,Token的权限非常低,他仅能读取个人信息,接下来要对API 授权,给与App更多的权限。

在 API permissions 里,点击 Add a permission,然后选择对应的权限,再点击“Grant Admin consent” 授权

7.读取Windows365里的用户日历或者会议室日历

在Microsoft Graph里,列出了大量接口,例如 List calendars - Microsoft Graph v1.0 | Microsoft Docs

在每一个接口里,都简单的表示请问方式和网址。GET表示此请求需要使用GET方式获取。POST 表示此请求需要以POST方式获取。

/me/calendars 表示请求的地址是 https://graph.microsoft.com/me/calendars

请求发出后,系统会返回JSON格式的内容,利用第三方插件,可以解析这些JSON字符串

HTTP/1.1 200 OK
Content-type: application/json {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#me/calendars",
"value": [
{
"@odata.id": "https://graph.microsoft.com/v1.0/users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/calendars('AAMkAGI2TGuLAAA=')",
"id": "AAMkAGI2TGuLAAA=",
"name": "Calendar",
"color": "auto",
"changeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+w==",
"canShare":true,
"canViewPrivateItems":true,
"hexColor": "",
"canEdit":true,
"allowedOnlineMeetingProviders": [
"teamsForBusiness"
], ]
}

  

8.使用微软的SDK-Microsoft Graph .NET Client Library

微软提供了Java/Asp.net/Php等各种语言的SKD,对于.NET而言, https://github.com/microsoftgraph/msgraph-sdk-dotnet 是.NET的SDK

这些SDK封装了各种验证,直接提供简单的类库调用。获取Microsoft Driver只要一句代码即可。

var drive = await graphClient.Me.Drive.Request().GetAsync();

  

当你熟悉了上面的操作后,读取Microsoft 365 Exchange的日历,会议信息, 创建 Microsoft Team视频会议, 获取AD域里用户邮件等等都变的非常简单。

利用Microsoft Graph开发微软的Exchange Calendar会议、Team的更多相关文章

  1. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  2. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

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

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

  4. Microsoft Graph Web应用程序极致开发体验

    作者:陈希章 重写于 2017年5月24日 前言 这篇文章最早写于2017年5月2日,当时的想法是从最简单的方式来写如何在一个ASP.NET MVC应用程序中集成Microsoft Graph,但实际 ...

  5. 利用Visual Studio 2013 开发微软云Windows Azure配置指南(针对中国大陆)

    微软云在中国是由“世纪互联”营运的,所以如果你用Visual Stuido 2003全通通用账户开发微软云,会有问题,这是他的不方便支持.好处是,因为是在大陆营运,所以速度比较快. (1)打开官网 h ...

  6. 掀起Azure AD的盖头来——深入理解Microsoft Graph应用程序和服务权限声明

    作者:陈希章 发表于 2017年7月12日 引子 这是一篇计划外的文章.我们都知道要进行Microsoft Graph的开发的话,需要进行应用程序注册.这个在此前我已经有专门的文章写过了.但这里存在一 ...

  7. Microsoft Graph API -----起题 Graph API

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

  8. Microsoft Graph 的 .NET 6 之旅

    这是一篇发布在dotnet 团队博客上由微软Graph首席软件工程师 Joao Paiva写的文章,原文地址: https://devblogs.microsoft.com/dotnet/micros ...

  9. 在PowerShell脚本中集成Microsoft Graph

    作者:陈希章 发表于2017年4月23日 我旗帜鲜明地表态,我很喜欢PowerShell,相比较于此前的Cmd Shell,它有一些重大的创新,例如基于.NET的类型系统,以及管道.模块的概念等等.那 ...

随机推荐

  1. jupyter notebook在代码块中多行注释方法

    Ctrl+\是pycharm等IDE内的使用方法,而不是jupyter中的,正确的方法如下: 按住alt后光标变为十字形,沿着行标向下拖,光标变得很长,这时 shift+3 即可注释多行 想要取消注释 ...

  2. 运行FreeSWITCH的命令行参数

    一般来说,FreeSWITCH 不需要任何命令行参数就可以启动,但在某些情况下,你需要以一些特殊的参数启动.在此,仅作简单介绍.如果你知道是什么意思,那么你就可以使用,如果不知道,多半你用不到. 使用 ...

  3. [Python]爬虫获取知乎某个问题下所有图片并去除水印

    获取URL 进入某个知乎问题的主页下,按F12打开开发者工具后查看network面板. network面板可以查看页面向服务器请求的资源.资源的大小.加载资源花费的时间以及哪些资源加载失败等信息.还可 ...

  4. 创建一个Orchard Core CMS 应用程序

    开始使用Orchard Core作为NuGet软件包 在本文中,我们将看到使用Orchard Core提供的NuGet包创建CMS Web应用程序是多么容易. 你可以在这里找到Chris Payne写 ...

  5. Linux系列(18) - 常用压缩命令(1)

    常用压缩格式 .zip .gz .bz2 .zip格式压缩/解压缩 命令格式 压缩 zip [压缩文件名] [源文件]:压缩文件 zip -r [压缩文件名] [源目录]:压缩目录 解压缩 unzip ...

  6. Jmeter系列(34)- Jmeter优化常识

    Jmeter UI页面是调试脚本的,运行脚本使用命令行运行:Windows使用batch,Linux使用shell Jmeter减少使用各类监听控件,吃内存.CPU:用后置处理去拿log文件,生成图表 ...

  7. css selector regexp css选择器 正则表达式 css 参考手册

    jQuery 选择元素  a.text-success, a.text-danger, a.text-primary, a.text-info $("a[class^=text-]" ...

  8. redis小结 1-2

    1.Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 c ...

  9. [转载]Windows 2008多用户同时远程登陆配置方法

    有些朋友需要在在使用Windows 2008远程登录功能时,进行多用户登录,那么就可以采用以下配置方法: 首先要启用远程桌面这一功能:右击"我的电脑"→ 属性 → 远程配置 → 远 ...

  10. node.js及npm安装&配置

    之前我们在文言文安装教程里写过node.js及npm的安装,这里我们详细写一下. 下载node.js node.js下载分为两种,官网nodejs.org,和国内官网nodejs.cn,国内的童鞋建议 ...