【继续更新】尝试在 Keycloak 里打通整个微信生态
共 2698字,需浏览 6分钟
·
2023-08-30 12:58
同名知乎专栏“哈德韦”(更好的阅读体验,点击阅读原文直达)
继上次《【重磅更新】关注微信公众号即登录插件升级支持 Keycloak 22!》之后,今天继续增加了在 Keycloak 里使用微信开发平台扫码登录的功能。最早基于 Keycloak 实现了关注公众号即登录的场景,一是该方案具有一定的商业价值,二是对于个人来说,可以使用测试公众号,在粉丝数少于 100 人的情况下,实现扫码登录。
最近该 Keycloak 微信插件得到知友的支持,通过提供的企业级微信公众号,打通了 Keycloak 的手机端微信登录。今天增加的使用微信开放平台的桌面网页扫码登录,虽然很常见,但是对企业资质要求更严格了。好在有知友的大力支持,暂时也是打通状态(由于开放平台的限制,只能配置一个回调域名,因此后面可能要被收回)。
总结一下目前 Keycloak 微信插件的功能:
关注微信公众号即登录
这是最早开发的一个功能,适用于桌面端网页。用户选择微信登录,会展示一个带参二维码(可以展示在非微信的网页里)。用户扫码后,如果是非粉丝,只需要点击关注即登录。而如果是老粉丝,扫完即登录。体验链接:https://keycloak.jiwai.win/realms/UniHeart/account/。
有企业认证的服务号,就可以实现该功能。注意上述链接中使用了我个人的测试公众号,只能支持 100 个用户。
手机端微信登录
手机端的微信登录,仍然是使用了公众号的能力。所以只要有一个企业认证的服务号,就可以同时实现桌面端和手机端的微信登录。体验链接:https://keycloak.jiwai.win/realms/UniHeart/account/。
利用微信开放平台的桌面网页微信登录
体验链接:https://keycloak.jiwai.win/realms/Brickverse/account/#/,注意,这是另一个域了,因为 UniHeart 域已经配置了关注微信公众号即登录,所以开了一个新域用来展示开放平台的微信登录功能。要使用这个功能,需要企业在微信开放平台里注册网站应用,这是除了公众号认证之外,又需要额外维护的一个微信资源,尽管每年额外的 300 元的认证费并不贵,但是一年一次,挺烦的。
要使用微信登录的能力,还得确保接口状态是已获得。总之,比开发关注公众号即登录的前置条件更繁琐,但是具体到写代码时,由于是标准的 OIDC 协议,可以无脑对接,相对关注公众号即登录少一些挑战。
配置项
一共有 4 个配置项,小程序的留待以后再说。前 3 个配置分别对应上面的 3 个功能。
温馨提示
对于第一次使用微信登录 Keycloak 的用户,会被要求补充邮箱,这是由于 Keycloak 的默认设置,对用户都会要求有 Email 字段。如果希望不要用户补充邮箱,可以从域配置中禁用,具体的做法是在 Authentication 的 first broker login 里 Disable Review Profile 选项。
之所以是从 first broker login 里改,而不是从 registration 里改,是因为 Keycloak 在配置第三方 identity provider 时,First Login flow 默认选的是 first broker login。如果改成了 registration,应该就是要在注册那里改。关于 first broker login,可以从《[首次代理登录流程 - Jeff Tian的文章 - 知乎 ](https://zhuanlan.zhihu.com/p/474133251) 》了解更多详情。
如何保证不同端的同一账号被正确识别?
如果同一个用户分别使用桌面端网页微信登录和手机端网页登录,在 Keycloak 里会分别创建出两个不同的用户吗?
这取决于是否能够拿到该用户在同一个开放平台下的 unionid。微信开放平台的 unionid 对于公众号和网站应用,对同一人分配的都是同一个。但是公众号下的 openid 和网站应用下的 openid,肯定是不同的。
对于企业来说,可以将公众号和网站应用绑定在同一个开放平台账号下,从而保证它们的 unionid 是和用户一一对应的。
对于我的 Keycloak 实例,https://keycloak.jiwai.win 来说,则不能保证。原因是混用了个人,以及不同的企业(甚至会随时变化)的微信资源。
最新版本
目前的最新版本链接:https://github.com/Jeff-Tian/keycloak-services-social-weixin/releases/tag/0.4.4
源代码,以及 jar 文件,都可以从上面的链接里找到。如果要通过 maven 的方式引用,可以添加如下内容到 pom.xml 的依赖项里:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services-social-weixin</artifactId>
<version>0.4.4</version>
</dependency>
然后执行 mvn install
即可。
使用方法
将 jar 文件复制到 Keycloak 的 /opt/keycloak/providers/
目录里即可。https://keycloak.jiwai.win 就是这样用的,源代码见:https://github.com/jeff-tian/keycloak-heroku
如果有收获,请帮忙点赞点在看!
领取微信备用金 | 领取哈德韦表情包 |