不少企業都在使用企業微信進行組織機構管理,同時又使用了阿里雲的服務,咱們不但願單獨爲每一個員工建立一個阿里雲子帳號,要是可以直接使用企業微信登陸就行了。這時候如何統一用戶目錄和實現單點登陸就成了一個咱們須要思考的問題。html
阿里雲在本身的單點登陸管理(SSO)中介紹到,能夠使用 SAML 協議提供單點登陸管理,流程圖以下:java
阿里雲與企業進行用戶 SSO 時,阿里雲是服務提供商(SP),而企業自有的身份管理系統則是身份提供商(IdP)。經過用戶SSO,企業員工在登陸後,將以 RAM 用戶身份訪問阿里雲。python
暫時先不用管 SAML 是什麼,下文會詳細講到,這裏簡單理解爲一種用戶身份問答協議就好了。
當管理員在完成用戶 SSO 的相關配置後,企業員工 Alice 能夠經過上圖所示的方法登陸到阿里雲。git
總結一下重要的點:IdP (身份提供商),也即企業用戶,有一套本身的用戶目錄,至於這個用戶目錄具體是怎樣的,你是用數據庫存仍是 Excel 存,你是用帳號密碼登陸仍是支持第三方社會化登陸,阿里雲並不操心。重要的是你的用戶目錄須要和阿里雲 RAM 用戶身份創建一對一關係。具體到 SAML 協議,你須要把你的用戶目錄的用戶惟一字段做爲 NameID 傳給阿里雲,這樣阿里雲就可以知道該以哪一個 RAM 用戶身份登陸阿里雲了。github
因而咱們的問題就 Break Down 爲下面幾步:web
若是你對其中某一部分很瞭解,能夠跳過對應章節。數據庫
首先科普一下 SAML 是什麼:SAML 全稱是 Security Assertion Markup Language (中文直譯爲「安全斷言標記語言」),從字面意義咱們還看不出什麼頭緒。小程序
咱們從協議交互角度切入:SAML 認證流程通常都會牽涉到兩方:服務提供方(SP)和身份提供方(IdP),典型的 SP 有阿里雲、騰訊雲以及不少不少的 SaaS 服務;IdP 其實就是咱們企業本身,由於用戶目錄在咱們這裏。訪問 SP 服務的時候,SP 會向 IdP 發送一個 SAML Request(具體是什麼咱們暫時不關心),請求 IdP 判斷用戶身份。IdP 收到 SAML Request 後,能夠經過某種手段對用戶身份進行認證,若是已登陸,能夠直接返回用戶身份信息給 SP;若是未登陸,能夠彈出一個登陸框,用戶登陸以後再將用戶身份返回給 SP。SP 收到用戶信息以後,再在本身的數據庫裏面找出對應的用戶,而後以這個用戶的身份訪問 SP 服務。api
SAML 協議的具體實現過於複雜,不建議本身從零實現,能夠藉助已有開源庫實現,好比:瀏覽器
通常來講,若是你做爲 IdP ,須要將本身內部用戶目錄數據庫的字段和 SAML 字段對齊,並實現 metadata 、 SingleSignOnService 和 SingleLogoutService 接口,分別實現獲取 IdP 元信息、單點登陸和單點登出。具體代碼實現這裏就不詳細講了,感興趣的能夠用開源庫實現一下,或者你也能夠考慮使用咱們現成的 SAML 服務。
企業微信支持兩種身份認證方式:網頁受權登陸(指在企業微信 APP 內打開的網頁,不適用於普通的瀏覽器網頁)和掃碼登陸,這裏咱們主要講如何接入掃碼登陸。
BTW: 若是你對掃碼登陸原理感興趣,能夠看看咱們以前寫的如何 從零實現掃碼登陸系列文章。
企業微信掃碼登陸流程以下:用戶進入第三方網站,且這個網站支持使用企業微信登陸,用戶使用企業微信掃碼登陸以後,企業微信會將登陸受權碼返回給你,接着你就可使用這個受權碼換取用戶信息了。
首先你須要拼接一個微信掃碼登陸連接,以下圖所示:
https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=ww100000a5f2191&redirect_uri=http%3A%2F%2Fwww.oa.com&state=web_login@gyoss9&usertype=member
用戶贊成受權以後,會轉發登陸受權碼給上面填寫的 redirect_uri,你能夠用它來換取用戶信息:
POST https://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKEN
POST 請求 body 爲:
{ "auth_code":"xxxxx" }
其中 auth_code 就是登陸受權碼,PROVIDER_ACCESS_TOKEN 是服務商憑證,你能夠在這裏看到如何獲取服務商憑證。換取用戶信息以後,你能夠將其保持至本身的數據庫。
具體的細節就很少說了,還牽涉到配置 IP 白名單,添加可信任域名等,若是你感興趣,能夠看企業微信的開發文檔。固然,若是你不想本身實現,咱們也提供這個服務。
若是你實現好了 SAML 協議,你有個有一個接口能夠用於下載 IdP Metadata,須要將其上傳給阿里雲。
使用你的阿里雲帳號登陸阿里雲的控制檯。在你的用戶頭像上懸停鼠標,出現下拉菜單,點擊「訪問控制」。
進入左側菜單 -> 人員管理 -> 用戶,點擊「新建用戶」。
輸入用戶名稱、顯示名稱,勾選控制檯密碼登陸並點擊「確認」。本教程中輸入的登陸名稱是 authing,顯示名稱也是 authing。
點擊左側菜單 -> 人員管理 -> 用戶,在右側頁面的列表中能夠看到剛剛添加的用戶,記錄下用戶登陸名稱(xxx@xxx.onaliyun.com),隨後會用到。點擊對應用戶條目右側的「添加權限」。
在權限列表中選擇須要賦予該帳戶的權限,本教程選擇「AdministratorAccess」最高權限。點擊「肯定」。
進入左側菜單 -> SSO 管理,右側頁面點擊「用戶 SSO」選項卡,在下方 SSO 登陸設置處點擊「編輯」。
SSO 功能狀態選擇「開啓」。點擊「上傳文件」,上傳你的 SAML IdP Metadata。點擊「確認」。
上一步在阿里雲配置好了帳號,用戶名爲 xxx@xxx.onaliyun.com ,接下來須要將其映射到你的用戶目錄。方法很簡單,你只須要將對應企業微信登陸用戶的 NameID 設置成 xxx@xxx.onaliyun.com 便可。
這篇文章,咱們介紹瞭如何利用 SAML 協議將企業微信和阿里雲創建起聯繫。總結一下,咱們一共實現了三件事情:
事實上,企業微信登陸只是某種登陸手段,你也徹底能夠支持 GitHub 登陸、微博登陸、手機號驗證碼登陸、生物指紋登陸 ..... 任何你能想到的登陸方式均可以。
而上述這些東西,Authing 都支持,咱們有很是豐富的社會化登陸手段,除了企業微信,咱們還支持 GitHub、微信、微博、釘釘、QQ、支付寶、小程序等。
咱們還封裝了簡單易用的 SAML 協議,讓你能夠只須要填寫本身簡單的配置文件,就擁有一個完整的 SAML 協議實現以及一個美觀易用的登陸表單:
若是你不想關心具體的技術細節,徹底能夠直接使用 Authing 開箱即用的服務,將更多的精力集中到核心業務上。
歡迎體驗:https://authing.cn ,讓身份管理像水電同樣觸手可及。