利用Microsoft Graph開發微軟的Exchange Calendar會議、Team


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域里用戶郵件等等都變的非常簡單。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM