Keycloak 关注公众号即登录插件升级了!

哈德韦

共 3072字,需浏览 7分钟

 · 2021-09-10

体验链接


https://uniheart.pa-ca.me/keycloak/login (可以点击阅读原文,从原文中点击链接)


请忍受二维码出现的速度很慢,因为使用的是免费资源……


背景

今年 2 月份发表的一篇专栏《基于 keycloak 的关注公众号即登录功能的设计与实现》,居然有人默默地认真看了,还通过付费咨询频道,向我反映了这篇文章中的插件,在最新版本的 Keycloak 中使用时会报错。


30609d0b24129258e4eca4658b4b0219.webp


看来 Keycloak 是一个非常活跃的开源项目,因为我在 2020 年开发关注公众号即登录插件时,Keycloak 版本号还是 7.0.0,但是现在已经升级到 15.0.2 了。


新版

在周末,我升级了该插件,在最新版本的 Keycloak 15.0.2 中测试通过。相关 mvn 包的配置和资源信息在这里:https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages/225091?version=0.0.20


1b7f54712e61a52547a295d6e6487976.webp


前一个版本

在 Keycloak 7.0.0 中实测通过的插件版本是 0.0.6,其 mvn 包的配置以及资源信息在 https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages/225091?version=0.0.6

ad712067c75cc85949b52640a97ac085.webp


差异以及不兼容原因


理论上 Keycloak 升级不应该影响该插件的功能,但是该插件的实现上依赖了 Keycloak 的 BrokeredIdentityContext 中的一个 setCode API,但是该 API 在新版本的 Keycloak 中被删除了。因此这次的改动就是换用了一个 API (setContextData) 而已。

Keycloak 的这个破坏性改动,看提交描述是修复一个 Broker 状态参数,但是具体的 JIRA 卡:https://issues.redhat.com/browse/KEYCLOAK-14483,我还没有权限查看。这个提交详情见:https://github.com/keycloak/keycloak/commit/41dc94fead4c20560e0dd96c3efbd7bd10a484b6


db464ca5f0b9a6a67c87c5aa2c681a9b.webp


这两个方法的删除是最大的不兼容问题,其他的小问题在某些方法签名上的变化。

上面👆都是流水账,下面是比较重要的内容了!即如何通过配置的方法,实现一个你自己的关注微信公众号即登录的应用。


实现一个你自己的关注微信公众号即登录应用


如果你希望自己的应用集成关注公众号即登录应用,想了解如何开发,可以参考:《基于 Java Spring Security 的关注微信公众号即登录的设计与实现》。


如果你不想写代码,那么推荐你使用该插件进行集成。我已经集成了好几个应用了,这里详细讲解一下集成步骤。


集成的示例应用

  • https://uniheart.pa-ca.me/keycloak/login
    这是一个基于 eggjs 开发的 node 应用,可以通过关注测试公众号拿到相关的令牌信息

  • https://jeff-tian-gitlab-wq766wrh9r57-8929.githubpreview.dev/
    这是一个 gitlab-ee 应用,增加了关注公众号登录的功能。但是由于利用了 Github 的 Codespace,很可能你打开时已经处于关闭状态(503)。如果你很想体验,请联系我,我可以实时打开这个服务。集成步骤详见《
    在自托管 GitLab 实例中集成 Keycloak 登录》。

  • https://keycloak.jiwai.win/auth/realms/UniHeart/account/
    这是一个部署在 Heroku 上的 Keycloak 应用本身了

集成步骤


部署 Keycloak

Keycloak 是一个优秀的开源用户认证与授权管理系统,推荐你先部署它。无论你的应用是什么语言编写,都可以快速通过配置的方式和它集成,详细参看官方文档。


需要注意的是,部署时要把本插件( 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



7eb60265dc385438d697061ccea32ef0.webp

2. 创建你的领域,并在领域设置里打开身份提供者:



4a78cd3b7a86b4b518e07a3fc91939b8.webp


3. 点击编辑“weixin”进行配置:



1504123bb2b87ee995c54de88e00535f.webp
注意,这里有一个非必填项,customized-login-url,在这里也必须填写,否则就会走默认的开放平台的 OAuth 登录逻辑了。如果你不想自己开发展示带参二维码,以及对用户扫码的感知逻辑,请一定要填写:
https://wechat.pa-ca.me/mp-qr 这个开发好的地址。


公众号的配置


f822e2ee5d14535654879afc0979568c.webp


只需要配置接口,不需要配置其他。这个接口是用来接收微信的消息的,如果你不想自己开发,可以使用我开发好的,URL 是:https://uniheart-developer-edition.ap15.force.com/services/apexrest/callback/wechat。欢迎通过知乎付费咨询,或者微信打赏的方式向我索取 Token。


注意,对于个人订阅号,或者未认证的企业服务号,都是没有相关接口(获取带参二维码等)权限的,所以如果是个人测试的话,只能使用测试公众号,如本截图一样。





总结


这是一篇 Keycloak 集成的配置详解,因为陆续有人向我反映看了我的一系列 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),仍然碰到一些配置上的问题。


这里面有综合利用到各种不同的免费资源,因此体验一定不是最好的。如果有更好的建议(更大的羊毛可以薅),欢迎留言分享。


这里面涉及到的相关开发,全部以开源形式放在 GitHub 上,欢迎对其中不满意的地方,发 PR 改进。一共有好多个代码库,可以使用这个链接列出:https://github.com/Jeff-Tian?tab=repositories&q=keycloak&type=&language=&sort=


浏览 72
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报