Keycloak 關注公眾號即登錄插件升級了!
體驗鏈接
https://uniheart.pa-ca.me/keycloak/login?(可以點擊閱讀原文,從原文中點擊鏈接)
請忍受二維碼出現(xiàn)的速度很慢,因為使用的是免費資源……
背景
今年 2 月份發(fā)表的一篇專欄《基于 keycloak 的關注公眾號即登錄功能的設計與實現(xiàn)》,居然有人默默地認真看了,還通過付費咨詢頻道,向我反映了這篇文章中的插件,在最新版本的 Keycloak 中使用時會報錯。

看來 Keycloak 是一個非?;钴S的開源項目,因為我在 2020 年開發(fā)關注公眾號即登錄插件時,Keycloak 版本號還是 7.0.0,但是現(xiàn)在已經升級到 15.0.2 了。
新版
在周末,我升級了該插件,在最新版本的 Keycloak 15.0.2 中測試通過。相關 mvn 包的配置和資源信息在這里:https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages/225091?version=0.0.20。

前一個版本
在 Keycloak 7.0.0 中實測通過的插件版本是 0.0.6,其 mvn 包的配置以及資源信息在 https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages/225091?version=0.0.6。

差異以及不兼容原因
理論上 Keycloak 升級不應該影響該插件的功能,但是該插件的實現(xiàn)上依賴了 Keycloak 的 BrokeredIdentityContext 中的一個 setCode API,但是該 API 在新版本的 Keycloak 中被刪除了。因此這次的改動就是換用了一個 API (setContextData) 而已。
Keycloak 的這個破壞性改動,看提交描述是修復一個 Broker 狀態(tài)參數(shù),但是具體的 JIRA 卡:https://issues.redhat.com/browse/KEYCLOAK-14483,我還沒有權限查看。這個提交詳情見:https://github.com/keycloak/keycloak/commit/41dc94fead4c20560e0dd96c3efbd7bd10a484b6。

這兩個方法的刪除是最大的不兼容問題,其他的小問題在某些方法簽名上的變化。
上面??都是流水賬,下面是比較重要的內容了!即如何通過配置的方法,實現(xiàn)一個你自己的關注微信公眾號即登錄的應用。
實現(xiàn)一個你自己的關注微信公眾號即登錄應用
如果你希望自己的應用集成關注公眾號即登錄應用,想了解如何開發(fā),可以參考:《基于 Java Spring Security 的關注微信公眾號即登錄的設計與實現(xiàn)》。
如果你不想寫代碼,那么推薦你使用該插件進行集成。我已經集成了好幾個應用了,這里詳細講解一下集成步驟。
集成的示例應用
https://uniheart.pa-ca.me/keycloak/login
這是一個基于 eggjs 開發(fā)的 node 應用,可以通過關注測試公眾號拿到相關的令牌信息https://jeff-tian-gitlab-wq766wrh9r57-8929.githubpreview.dev/
這是一個 gitlab-ee 應用,增加了關注公眾號登錄的功能。但是由于利用了 Github 的 Codespace,很可能你打開時已經處于關閉狀態(tài)(503)。如果你很想體驗,請聯(lián)系我,我可以實時打開這個服務。集成步驟詳見《在自托管 GitLab 實例中集成 Keycloak 登錄》。https://keycloak.jiwai.win/auth/realms/UniHeart/account/
這是一個部署在 Heroku 上的 Keycloak 應用本身了
集成步驟
部署 Keycloak
Keycloak 是一個優(yōu)秀的開源用戶認證與授權管理系統(tǒng),推薦你先部署它。無論你的應用是什么語言編寫,都可以快速通過配置的方式和它集成,詳細參看官方文檔。
需要注意的是,部署時要把本插件( https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages/225091?version=0.0.20 )的 jar 包拷貝到 Keycloak 的 /opt/jboss/keycloak/providers/ 目錄下,然后需要把配置頁面的兩個 html 文件拷貝到 /opt/jboss/keycloak/themes/base/admin/resources/partials 目錄。
具體可以參考:https://github.com/Jeff-Tian/keycloak-heroku/blob/master/Dockerfile 這個 Dockerfile 文件。
在 keycloak 中添加關注公眾號即登錄插件
1. 登錄你的 Keycloak admin console

2.?創(chuàng)建你的領域,并在領域設置里打開身份提供者:

3.?點擊編輯“weixin”進行配置:

注意,這里有一個非必填項,customized-login-url,在這里也必須填寫,否則就會走默認的開放平臺的 OAuth 登錄邏輯了。如果你不想自己開發(fā)展示帶參二維碼,以及對用戶掃碼的感知邏輯,請一定要填寫:https://wechat.pa-ca.me/mp-qr 這個開發(fā)好的地址。
公眾號的配置

只需要配置接口,不需要配置其他。這個接口是用來接收微信的消息的,如果你不想自己開發(fā),可以使用我開發(fā)好的,URL 是:https://uniheart-developer-edition.ap15.force.com/services/apexrest/callback/wechat。歡迎通過知乎付費咨詢,或者微信打賞的方式向我索取 Token。
注意,對于個人訂閱號,或者未認證的企業(yè)服務號,都是沒有相關接口(獲取帶參二維碼等)權限的,所以如果是個人測試的話,只能使用測試公眾號,如本截圖一樣。
總結
這是一篇 Keycloak 集成的配置詳解,因為陸續(xù)有人向我反映看了我的一系列 Keycloak 文章后(https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxNTk3ODgxNA==&action=getalbum&album_id=1792107127465967619&scene=173&from_msgid=2247484524&from_itemidx=1&count=3&nolastread=1#wechat_redirect),仍然碰到一些配置上的問題。
這里面有綜合利用到各種不同的免費資源,因此體驗一定不是最好的。如果有更好的建議(更大的羊毛可以薅),歡迎留言分享。
這里面涉及到的相關開發(fā),全部以開源形式放在 GitHub 上,歡迎對其中不滿意的地方,發(fā) PR 改進。一共有好多個代碼庫,可以使用這個鏈接列出:https://github.com/Jeff-Tian?tab=repositories&q=keycloak&type=&language=&sort=
