我在之前的一篇博客里面講了合規性對于我們Teams app是非常重要的,因為office365平臺就是面向全世界用戶的,我們開發的teams app一旦發布后,立刻就會有各國各地區的用戶來進行安裝使用,所以符合用戶所在地區的要求是非常重要的。
很多讀者來信問合規性這么難做,而且不同地區的要求可能是相互沖突的,有沒有什么好的方法或者是平臺來方便開發者呢。
實際上大家正在使用的Azure就是一個非常好的平臺,他自己本身已經符合了各個地區的合規性要求,見下圖:
微軟白皮書
當我們把我們開發的teams app也部署到azure平臺上,實際上已經站在了巨人的肩膀上,已經符合了一部分的地區要求了。
對于數據保存地問題,現在全球的各個商業軟件平臺越來越傾向于就地存儲,比如如果這個用戶是一個歐盟的用戶,那數據就保存在歐盟的Azure機房里,如果用戶是中國用戶,那數據就保存在中國。Azure目前已經涵蓋了全世界大部分區域,所以我們可以讓我們teams app的用戶根據用戶所處租戶的區域,把數據進行保存。
當我們把數據保存到不同區域,但是對于Teams來說,我們還是要暴露出一個統一的接入點。這時候可以使用Azure的front door服務,這個服務是一個global服務,它目前全球由90個節點組成。我們可以使用類似于下面的這個infrastructure架構。
把Azure FrontDoor的url配置到teams bot service里面,然后在不同區域部署符合不同區域合規性要求的服務,FrontDoor把這些區域都聯合在一起。
FrontDoor服務非常好用,如果你還沒有用過,記得嘗試一下。它幫我們解決了很多全球部署里會遇到的各種問題。
到這里,大家可能會問,我們的teams app如何來判斷當前用戶的租戶的地區或者國家呢?我們可以使用Graph API的一個接口來實現:
GET /organization
這個接口返回的json格式如下:
{"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#organization","value": [{"id": "dcd219dd-1111-2222-3333-4a33a796be35","city": "redmond","country": null,"countryLetterCode": "US","createdDateTime": "2017-07-29T02:16:17Z","displayName": "Contoso","marketingNotificationEmails": [],"onPremisesLastSyncDateTime": null,"onPremisesSyncEnabled": null,"postalCode": "98052","preferredLanguage": "en","privacyProfile": null,"state": "WA","street": "1 microsoft way",……}]
}
可以看到countryLetterCode
是一個可以拿來判斷的屬性,如果需要再細致一些,可以使用state
屬性。
要實現Teams App的全球合規性實際上工作量不小,但是有了azure平臺后,事半功倍