体验链接


https://uniheart.pa-ca.me/keycloak/login

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

背景

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

image.png

前一个版本

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

差异以及不兼容原因


理论上 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
image.png

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

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

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


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

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

集成的示例应用


集成步骤

部署 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 中添加关注公众号即登录插件

  • 登录你的 Keycloak admin console
    image.png
  • 创建你的领域,并在领域设置里打开身份提供者:
    image.png
  • 点击编辑“weixin”进行配置:
    image.png
    注意,这里有一个非必填项,customized-login-url,在这里也必须填写,否则就会走默认的开放平台的 OAuth 登录逻辑了。如果你不想自己开发展示带餐二维码,以及对用户扫码的感知逻辑,请一定要填写:https://wechat.pa-ca.me/mp-qr 这个开发好的地址。


公众号的配置


image.png只需要配置接口,不需要配置其他。这个接口是用来接收微信的消息的,如果你不想自己开发,可以使用我开发好的,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&albumid=1792107127465967619&scene=173&frommsgid=2247484524&fromitemidx=1&count=3&nolastread=1#wechat_redirect),仍然碰到一些配置上的问题。

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

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