在我寫這篇文章的時候,這個SSO機制還是在 Developer Preview 階段,可能在發布前還會有一些改進。不過我覺得這個功能很好,所以先和大家分享一下。
如果大家之前已經開發過Teams的tab應用,可能會發現如果你需要一個當前用戶的token十分繁瑣,這個SSO的設計就是用來解決這個問題的,目前只支持工作組織賬號(暫不支持Microsoft Account)。
我們先來看一下處理的流程:
- 在你的tab前端代碼里,調用
getAuthToken()
方法,這個方法會告知Teams客戶端,你的tab app想要一個token。 - 如果這個是當前用戶第一次,并且你的app需要用戶審核,那teams客戶端就會彈出一個審核的窗口。類似于下圖
?
- Teams客戶端會向Azure AD發送申請用戶token的請求。
- 如果一切順利,AzureAD就會把token返回給Teams客戶端
- Teams客戶端把token返回給你的tab應用,token作為
getAuthToken()
的返回對象。要注意,這是一個異步的調用 - 你的tab app拿到token后就可以對token進行解析獲取用戶的一些身份信息,下面是一個tab app的解析的代碼:https://github.com/ydogandjiev/taskmeow
parseTokenToUser(token) {// parse JWT token to objectvar base64Url = token.split(".")[1];var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");var parsedToken = JSON.parse(window.atob(base64));var nameParts = parsedToken.name.split(" ");return {family_name: nameParts.length > 1 ? nameParts[1] : "n/a",given_name: nameParts.length > 0 ? nameParts[0] : "n/a",upn: parsedToken.preferred_username,name: parsedToken.name};}
由于整個配置步驟較多,大家可以參考?官方文檔?一步步來做,并且可以參考這個?開源項目?的代碼,十分有用。
需要注意的是:目前這種方式獲取到的token只是用戶等級權限的token,并不能用來調用Graph API,如果需要用來調用Graph API的token,需要使用?基于網頁的AzureAD授權方式。如果你的認證中心不是AzureAD,那就要使用?網頁授權方式