天天看點

飛書 + Lua 實作企業級組織架構登入認證

飛書 + Lua 實作企業級組織架構登入認證

飛書是位元組跳動旗下一款企業級協同辦公軟體,本文将介紹如何基于飛書開放平台的身份驗證能力,使用 lua 實作企業級組織架構的登入認證網關。

讓我們首先看一下飛書第三方網站免登的整體流程:

第一步: 網頁後端發現使用者未登入,請求身份驗證;

第二步: 使用者登入後,開放平台生成登入預授權碼,302跳轉至重定向位址;

第三步: 網頁後端調用擷取登入使用者身份校驗登入預授權碼合法性,擷取到使用者身份;

第四步: 如需其他使用者資訊,網頁後端可調用擷取使用者資訊(身份驗證)。

飛書 + Lua 實作企業級組織架構登入認證

擷取登入使用者資訊時無法擷取到使用者的部門資訊,故這裡需要使用登入使用者資訊中的 <code>open_id</code> 擷取使用者的詳細資訊,同時 <code>user_access_token</code> 也是來自于擷取到的登入使用者資訊。

我們使用 jwt 作為登入憑證,同時用于儲存使用者的 <code>open_id</code> 和 <code>department_ids</code>。

我們在使用者登入時擷取使用者的部門資訊,或者在使用者後續通路應用時解析登入憑證中的部門資訊,根據設定的部門白名單,判斷使用者是否擁有通路應用的權限。

同時支援 ip 黑名單和路由白名單配置。

本文就不贅述 openresty 的安裝了,可以參考我的另一篇文章《在 ubuntu 上使用源碼安裝 openresty》。

<code>app_id</code> 用于設定飛書企業自建應用的 <code>app id</code>

<code>app_secret</code> 用于設定飛書企業自建應用的 <code>app secret</code>

<code>callback_uri</code> 用于設定飛書網頁登入後的回調位址(需在飛書企業自建應用的安全設定中設定重定向 url)

<code>logout_uri</code> 用于設定登出位址

<code>app_domain</code> 用于設定通路域名(需和業務服務的通路域名一緻)

<code>jwt_secret</code> 用于設定 jwt secret

<code>ip_blacklist</code> 用于設定 ip 黑名單

<code>uri_whitelist</code> 用于設定位址白名單,例如首頁不需要登入認證

<code>department_whitelist</code> 用于設定部門白名單(字元串)

擷取部門基礎資訊

擷取部門組織架構資訊

以應用身份讀取通訊錄

擷取使用者組織架構資訊

擷取使用者基本資訊

本項目已完成且已在 github 上開源:k8scat/lua-resty-feishu-auth,希望大家可以動動手指點個 star,表示對本項目的肯定與支援!