做者:陳希章 發表於 2017年12月27日git
這篇文章通過屢次修改,終於在今天晚上寫完了,演示用的範例代碼也終於跑通了。由於這個SSO的功能目前只是Preview的狀態,因此本篇文章嚴格參考了官方的文檔,而且對其中的重點環節作了提示,對最終效果作了說明。github
官方的文檔請參考 https://docs.microsoft.com/en-us/office/dev/add-ins/develop/sso-in-office-add-ins瀏覽器
實現Office Add-in 的單點登陸是要解決一個典型問題:已登錄到Office的用戶,可否直接利用他本身的身份去訪問到Microsoft Graph的資源,而無需再次登陸。app
請注意,目前這個功能是Preview的狀態。因此要進行測試的話,你必須是某個Office 365 Tenant的全局管理員。若是不具有這個條件,你將沒法完成這個實驗,但你能夠經過這個文章對單點登陸流程和效果有一個基本認識。工具
下圖是Office Add-in中進行SSO認證的標準流程。這裏面涉及到幾個部分測試
基本流程以下網站
我是徹底按照 這篇文章進行了實驗,而且已經作出來效果。下面我將有關的步驟,尤爲是一些要注意的步驟介紹一下。(該文檔的部分地方存在一些小問題,我已經提報給做者了)。調試
實驗環境。你須要安裝最新的Visual Studio 2017和Office 2016(版本1708或者更新)。code
克隆這個代碼庫 https://github.com/officedev/office-add-in-aspnet-sso。token
在***Completed***目錄中找到 Office-Add-in-ASPNET-SSO.sln
,雙擊打開這個解決方案。
此時編譯解決方案會報錯,請運行 Install-Package Microsoft.Identity.Client -IncludePrerelease
命令安裝一個包。再次編譯,請確保沒有任何錯誤。
在 https://apps.dev.microsoft.com/ 註冊一個應用程序,這個步驟比較重要,必定要嚴格按照說明操做。下面是我註冊的信息,請必定要確保保持一致。
將上圖中的Application ID和Application Secret信息記下來,而且將Application ID的信息替換掉這個地址中的佔位符:https://login.microsoftonline.com/common/adminconsent?client_id={application_ID}&state=12345 獲得 https://login.microsoftonline.com/common/adminconsent?client_id=f7e0154d-1258-42ef-9e89-9857889f4e01&state=12345。
目前來講,要測試這個功能,你必須擁有一個Office 365 Tenant的全局管理員身份。在瀏覽器中輸入上面這個地址,而後提供你的管理員身份,你會收到以下的提示,要你接受受權的請求。
點擊「Accept」(有時候可能要兩次)後,頁面會被重定向到下面的地址。請不要驚慌,由於當前咱們的Office Add-in網站沒有運行起來,因此確實會報告「沒法訪問此網站」。在這裏,只要將地址欄中的tenant這個查詢字符串的信息記下來便可(個人例子是:ca2af238-5e61-4608-8622-797a954c4d65
),後面要用到。
回到Visual Studio 2017裏面來,找到 Office-Add-in-ASPNET-SSO-WebAPI
這個項目中的Web.config文件,在appsettings裏面修改幾個設置信息。
在Office-Add-in-ASPNET-SSO
這個項目中,找到 Office-Add-in-ASPNET-SSOManifest
這個文件,在最底部,修改WebApplicationInfo這個節的信息以下:
選擇Office-Add-in-ASPNET-SSO
這個項目,在右鍵菜單中選擇「發佈」,而後新建一個配置文件:
而後點擊「打包外接程序」按鈕
輸入當前本地調試用的網址後點擊「完成」,你將獲得一個能夠用於部署的清單文件
利用清單文件加載該Add-in。這個Add-in是用於PowerPoint的,它的詳細代碼我這裏就不展開了,它實現了一個簡單的功能用來讀取當前用戶的OneDrive for Business中的文件列表信息。
個人實驗環境中,當前用戶的OneDrive for Business中有以下的文件:
請在Visual Studio中將「Office-Add-in-ASPNET-SSO-WebAPI」這個項目運行起來,而後經過PowerPoint Online建立一個演示文檔,在菜單中選擇「插入」=》「Office 加載項」,而後選擇「上載個人加載項」,選擇上一步驟中生成的XML文件。
而後你能夠在工具欄中看到一個新的按鈕,點擊以後能夠顯示一個任務面板
最後,激動人心的時刻終於要到了。點擊任務面板中的「Get My Files From OneDrive」按鈕,你將在任務面板的下方看到OneDrive for Business中的文件列表信息。
固然,不少時候,我也發現會遇到以下的錯誤。
本文對於最新的Office Add-in中實現單點登陸(SSO)的方案進行了講解,而且將配套的實例進行了測試。因爲當前這個功能仍是很是早期的階段,因此可能你在作實驗的時候,也會遇到這樣那樣的問題。若是遇到,能夠給我留言。我過一陣子會繼續關注一下這個功能的進展,給你們更新。