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