Logto 在行動中:無縫整合 Apache Answer 來為你的用戶推出一個社群
演示如何利用 Logto 的第三方應用功能整合 Apache Answer,創建一個統一的社群平台讓用戶可以使用已有的帳戶無縫獲取支持。
打造一個出色的軟體產品是個重要的成就,但這真的只是旅程的開始。
任何應用的長期成功和演變都在於了解和參與用戶,包括收集反饋、識別痛點、回答問題和解決問題 —— 這是推動迭代和改進的關鍵循環。
在本篇文章中,我將:
- 解釋 Logto 的第三方應用(OIDC)功能是如何工作的。
- 展示如何使用 Logto 整合 Apache Answer 為用戶建立一個社群,讓他們可以提出問題、分享想法,並從你的團隊和其他用戶那裡獲得幫助。
使用 Logto 的亮點是用戶可以使用與你系統相同的帳戶登錄社群。這讓你可以輕鬆了解提問用戶的當前狀態,無需多次往返查詢他們在你軟體中的處境。
什麼是 Apache Answer
Apache Answer 是一個開源的問答平台,連接用戶與團隊。它創造了一個分享知識和共同解決問題的空間。該平台具備即時 Markdown 預覽、高級搜索以及內容投票系統。
該平台原生支持 OAuth 2.0 登錄,使其自然而然與現有的身份提供者如 Logto 兼容。用戶可以使用現有帳戶登錄,而不需專門為社群平台創建新憑證。
了解 Logto 的第三方應用功能
當我們希望用戶用他們的 Logto 帳戶登錄第三方應用時,Logto 充當你的應用的身份提供者(IdP)。
可以把它想像成是一個負責驗證你用戶身份的中央機構。當用戶登錄你的主應用時,它可能會重定向他們到 Logto 來處理認證過程(用戶名/密碼、社交登錄等)。一旦 Logto 成功驗證了用戶,它會告訴你的應用:「是的,這個用戶是合法的」,並提供一些關於他們的基本信息。
這個概念不僅適用於你的主要應用,Logto 也提供了一個強大的功能 —— 第三方應用。這個功能允許 Logto 不僅為你自己的應用擔任身份提供者角色,也為你希望用戶訪問的其他外部應用擔任身份提供者。
這是通過使用 OpenID Connect (OIDC) 實現的,這是一個建立在 OAuth 2.0 協議之上的標準身份層。簡單來說,OIDC 允許一個應用(例如 Apache Answer,被稱為依賴方或客戶端)從 IdP(Logto)請求和接收有關用戶身份的信息。
當你在 Logto 中為 Apache Answer 配置了一個 OIDC 應用時,你實際上就是在告訴 Logto:「如果 Apache Answer 發出請求時準備好為其認證用戶,如果 用戶同意,則安全地向 Answer 發送一些基本的用戶身份詳細信息。」這項功能是開啟你 Logto 認證應用和第三方工具如 Apache Answer 之間無縫單一登錄(SSO)的關鍵。
設置場景:YourApp + Logto + Apache Answer
在深入配置之前,讓我們先澄清一下我們場景中涉及的組件:
- YourApp: 這是你的主要網頁或移動應用, 用戶已經在這裡註冊和登錄。關鍵是,YourApp 已集成 Logto 作為認證。
- Logto: 你的中央 IAM 平台,擔任 IdP。你的用戶帳戶由 Logto 管理。
- Apache Answer: 你希望作為 YourApp 用戶社群中樞部署的開源問答平台。我們的目標是配置 Answer 使用 Logto 進行登錄,而不是其自己的本地用戶名/密碼系統。
實踐步驟:配置 Logto 和 Apache Answer
現在,讓我們開始實踐。該過程涉及對 Logto 和 Apache Answer 進行配置。
安裝 Apache Answer
按照 官方安裝指南 安裝 Apache Answer。最後,你可以通過預設的 http://localhost:9080
訪問它。
在 Logto 中創建一個 OIDC 應用
- 登入到你的 Logto 控制台。
- 導航到應用頁面。
- 點擊頁面右上角的 「創建應用」 按鈕(如果你沒有看到這個按鈕,請點擊框架列表底部的「查看全部」)。
- 選擇 「第三方應用」 類別,然後選擇 「OIDC」。
- 輸入應用名稱(例如,「Apache Answer 社群」)及說明(非必填)。
- 點擊 「創建」 完成創建。創建完成後,你將被重定向到應用詳細信息頁面。
- 在詳細信息頁面,將
http://localhost:9080/answer/api/v1/connector/redirect/basic
添加到 Redirect URI 欄位。 - 點擊 「保存」 以保存應用。
配置 Apache Answer 的權限
- 在應用詳細信息頁面,導航到 權限 標籤。
- 在 授權用戶數據的權限 下,你會看到一個訊息說「你還未設置任何授權用戶數據的權限。」
- 點擊 添加 按鈕,配置 Apache Answer 可以訪問的用戶信息。
- 選擇必要的範圍(
profile
和email
) 以允許 Apache Answer 在登錄時獲取基本用戶信息。 - 保存 你的權限設置。
在 Apache Answer 中配置 OAuth 登錄
- 使用管理員帳戶登錄到你的 Apache Answer。
- 訪問
http://localhost:9080/admin
下的 管理員 控制台。 - 導航到 插件 -> 已安裝插件 並啟用 OAuth2 Basic 插件。
- 導航到 OAuth2 Basic 插件頁面。
- 根據剛剛創建的 Logto 第三方應用填寫以下信息:
- Name: 連接器的名稱,將顯示在登錄頁面上。
- Client ID: 來自應用詳細信息頁面的「應用 ID」。
- Client Secret: 來自詳細信息頁面的「端點和憑證」部分的「應用密鑰」。
- Authorize URL: 來自詳細信息頁面的「端點和憑證」部分的「授權端點」。
- Token URL: 來自詳細信息頁面的「端點和憑證」部分的「令牌端點」。
- User JSON URL: 來自詳細信息頁面的「端點和憑證」部分的「用戶信息端點」。
- User ID JSON Path:
sub
。 - User Display Name JSON Path:
name
。 - User Username JSON Path:
username
。 - User Email JSON Path:
email
。 - User Avatar JSON Path:
picture
。 - User Email Verified JSON Path:
email_verified
。 - Scopes:
openid,profile,email
。
- 在 Apache Answer 中 保存 插件配置。
注意:務必包括 openid
範圍,這是 OIDC 標準所需,用於從用戶 JSON URL 獲取用戶信息。由於 Logto 的第三方應用基於 OIDC 實現,而 Apache Answer 的插件使用 OAuth 2.0,這一範圍是確保兩個系統之間正確認證流的必要條件。
檢查點:測試整合
配置好 Logto 和 Apache Answer 後,我們來看看無縫的用戶體驗:
- 訪問你的 Apache Answer,你會在登錄頁面上看到一個「Connect with Logto」按鈕。
-
點擊該按鈕,你將被重定向到 Logto 的登錄頁面。
-
點擊「Connect with Logto」按鈕後,你將被重定向到 Logto,並可使用你現有的帳戶登錄。隨後,你會看到一個授權頁面,要求允許將你的信息共享給 Apache Answer。
- 當你批准授權後,你將被重定向回到 Apache Answer,並看見自己已經登錄!
注意:Apache Answer 會檢查登錄用戶是否擁有已驗證的郵件。當用戶沒有郵件信息時,Apache Answer 將要求他們提供郵件以進行驗證。
綜合整合的優勢
為什麼要完成這些步驟呢?優勢顯著:
- 用戶體驗: 這是最明顯的好處。用戶無需創建或記住另一組憑證。他們使用已經信任的登錄方式,順利、無障礙地進入社群。這大大降低了參與的門檻。
- 開發效率: 你完全避免了在 Apache Answer 中構建和維護單獨的用戶驗證、註冊、密碼重置流程等的需求。你立即利用現有的 Logto 用戶基礎,讓你可以更快地推出社群。
- 安全性: 認證由 Logto(你專業的 IAM 供應商)委託處理,這很可能比在 Answer 中的自定義實現更好地處理安全相關的環節,如多因素驗證(MFA)、密碼策略和暴力破解保護。你依賴於成熟且經過良好驗證的 OIDC 標準。
- 產品價值與支持效率: 你立即添加了一個有價值的社群功能,而不會分裂你的用戶身份。如前所述,知道社群用戶與產品用戶是相同的使得你的支持團隊能夠提供更具背景和有效的幫助,從而增強用戶滿意度和參與度。
結論
整合第三方工具對於構建豐富的應用生態系統是必不可少的,但在這些工具中管理用戶身份可能是個主要的難題。我們已展示 Apache Answer 的例子,Logto 的第三方應用(OIDC)功能提供了一個強大而標準化的方法來彌合這一差距。
通過將 Logto 作為 Apache Answer 的中心身份提供者,你可以有效地**「一鍵」啟用**為現有用戶提供的專屬社群空間,為他們提供無縫的登錄體驗,並為團隊提供統一的用戶身份益處。
更令人興奮的是,這種模式不僅限於問答平台;它可以應用於分析儀表板、項目管理工具、內部工具及無數其他應用,使你能夠建立一致且友好的軟體生態系統。
敬請期待未來的文章,我們可能會探討使用 Logto 整合其他有用工具!