1. 程式人生 > 其它 >利用Microsoft Graph開發微軟的Exchange Calendar會議、Team

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

MicrosoftGraph是什麼?

Microsoft Graph 是 Microsoft 365 中通往資料和智慧的閘道器。 它提供統一的可程式設計模型,可用於訪問 Microsoft 365、Windows 10 和企業移動性 + 安全性中的海量資料。

這句話來自微軟的官網介紹,聽起來很拗口,簡單的說,就是微軟的API

在理解MicrosoftGraph之前,需要知道Microsoft365能做什麼?答案是,能做微軟提供的所有線上服務

這裡,除了常見的Web開發,還包括Network,Office,AD域,安全,物聯網,AI,域名等等。

整個系統,就像計算機“圖論”裡的一個“Graph”,把人,機器,日曆,任務,會議,檔案等連線在了一起。

這或許就是被叫做MicrosoftGraph而不叫MicrosoftAPI的原因。

2.註冊自己的App

MicrosoftGraph開發的第一步,就是要註冊自己的App,在微軟雲後臺裡,註冊App後,能夠獲取到2個重要的引數:

Application (clientid) ID和 Directory (tenantid) ID。

Application ID是系統識別每一個應用程式,而Directory ID是租戶的標識。(這2個引數非常重要,後面會說要獲取Token。)

3.增加金鑰

在獲取Token時,還需要傳遞金鑰,金鑰可以認為是ApplicationID的密碼,因為ApplicationID是固定的,而金鑰則允許管理員定期修改。

點選“NewClientSecret”就可以了,讓系統隨機生成金鑰。

4.獲取Token

Token令牌就像在公司裡“員工證”。有了Token以後,就可以讀取MicrosoftGraph提供的介面了(且慢,還要授權),

下面是一個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字串,其實字串裡包含想要的AccessToken令牌。

另外幾個引數,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請求下面網址時,MicrosoftGraph會先從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更多的許可權。

在APIpermissions裡,點選Addapermission,然後選擇對應的許可權,再點選“GrantAdmin consent” 授權

7.讀取Windows365裡的使用者日曆或者會議室日曆

在MicrosoftGraph裡,列出了大量介面,例如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封裝了各種驗證,直接提供簡單的類庫呼叫。獲取MicrosoftDriver只要一句程式碼即可。

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

  

當你熟悉了上面的操作後,讀取Microsoft 365Exchange的日曆,會議資訊,建立MicrosoftTeam視訊會議,獲取AD域裡使用者郵件等等都變的非常簡單。