继上次《【重磅更新】关注微信公众号即登录插件升级支持 Keycloak 22! - Jeff Tian的文章 - 知乎 》之后,今天继续增加了在 Keycloak 里使用微信开发平台扫码登录的功能。最早基于 Keycloak 实现了关注公众号即登录的场景,一是该方案具有一定的商业价值,二是对于个人来说,可以使用测试公众号,在粉丝数少于 100 人的情况下,实现扫码登录。
最近该 Keycloak 微信插件得到知友的支持,通过提供的企业级微信公众号,打通了 Keycloak 的手机端微信登录。今天增加的使用微信开放平台的桌面网页扫码登录,虽然很常见,但是对企业资质要求更严格了。好在有知友的大力支持,暂时也是打通状态(由于开放平台的限制,只能配置一个回调域名,因此后面可能要被收回)。
image.png

总结一下目前 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 元的认证费并不贵,但是一年一次,挺烦的。
image.png
要使用微信登录的能力,还得确保接口状态是已获得。总之,比开发关注公众号即登录的前置条件更繁琐,但是具体到写代码时,由于是标准的 OIDC 协议,可以无脑对接,相对关注公众号即登录少一些挑战。
image.png

配置项

一共有 4 个配置项,小程序的留待以后再说。前 3 个配置分别对应上面的 3 个功能。
image.png

温馨提示

对于第一次使用微信登录 Keycloak 的用户,会被要求补充邮箱,这是由于 Keycloak 的默认设置,对用户都会要求有 Email 字段。如果希望不要用户补充邮箱,可以从域配置中禁用,具体的做法是在 Authentication 的 first broker login 里 Disable Review Profile 选项。
image.png
之所以是从 first broker login 里改,而不是从 registration 里改,是因为 Keycloak 在配置第三方 identity provider 时,First Login flow 默认选的是 first broker login。如果改成了 registration,应该就是要在注册那里改。关于 first broker login,可以从《首次代理登录流程 - Jeff Tian的文章 - 知乎 》了解更多详情。

如何保证不同端的同一账号被正确识别?

如果同一个用户分别使用桌面端网页微信登录和手机端网页登录,在 Keycloak 里会分别创建出两个不同的用户吗?
这取决于是否能够拿到该用户在同一个开放平台下的 unionid。微信开放平台的 unionid 对于公众号和网站应用,对同一人分配的都是同一个。但是公众号下的 openid 和网站应用下的 openid,肯定是不同的。
对于企业来说,可以将公众号和网站应用绑定在同一个开放平台账号下,从而保证它们的 unionid 是和用户一一对应的。
image.png
对于我的 Keycloak 实例,https://keycloak.jiwai.win 来说,则不能保证。原因是混用了个人,以及不同的企业(甚至会随时变化)的微信资源。

最新版本

目前的最新版本链接:https://github.com/Jeff-Tian/keycloak-services-social-weixin/releases/tag/0.4.4
源代码,以及 jar 文件,都可以从上面的链接里找到。如果要通过 maven 的方式引用,可以添加如下内容到 pom.xml 的依赖项里: xml org.keycloak keycloak-services-social-weixin 0.4.4

然后执行 mvn install即可。

使用方法

将 jar 文件复制到 Keycloak 的 /opt/keycloak/providers/目录里即可。 https://keycloak.jiwai.win 就是这样用的,源代码见: https://github.com/jeff-tian/keycloak-heroku