首发于哈德韦
Free Arch: Keycloak vs Authing

Free Arch: Keycloak vs Authing

纯粹出于个人兴趣,研究并实现了一个“关注微信公众号即登录”的社交登录方案。第一个版本为了验证可行快速出一个版本,没有从 0 开始,直接基于 Keycloak 做二次开发,将“微信”做为一个 IDP 插件集成进入 Keycloak。 ​

点击以下可以体验: ​

keycloak.jiwai.win/auth

这篇文章分享出去后,收到一大波和 Keycloak 相关的付费咨询: zhihu.com/consult/peopl。 ​

甚至有人找到了我所在的群,直接在微信里问我和 Keycloak 相关的问题。

这些咨询都是尝试解决企业里碰到的问题,而我,实际上还只在个人项目中使用 Keycloak。自己所在的企业其实面临着类似的问题,不过相关的决策权不在我手上,所以暂时没有机会真正在企业环境里应用 Keycloak。 ​

但是我对企业级的认证授权以及单点登录方案以及 Keycloak 这个开源项目特别有兴趣,因此非常乐意接受相关的(付费)咨询。 尽管我自认为我能得到这样的付费咨询,可能部分原因得益于 Keycloak 的中文化做得不够好。甚至它们的中文翻译有明显错误的地方,我因此还专门给 Keycloak 项目提过 PR:github.com/keycloak/key


既然 Keycloak 对中文不太友好,那么是否存在对中文特别友好的其他的认证授权以及单点登录的方案呢? ​

有!本文就是来分享身份云 Authing.cn 的(这是要断自己的财路呀……),并把它和 Keycloak 做一个简要对比。 ​

对比前,我在知乎上看到了 authing.cn 自己发的一篇文章: ​

这篇文章留言不多,都是怼它的。我的留言也表示了这篇文章有误导,这里先详细解释一下。

它的对比图里,最大的问题在于说 authing.cn 支持自定义数据库,但是 Keycloak 不支持:

这就扯蛋了。 Keycloak 原生支持的数据库(keycloak.org/server/db)有:


数据库测试过的版本
mariadb10
mssql2016
mysql8
oracle12c
postgres10


AWS 也提供了专门的 Keycloak 解决方案,同时支持 PostgreSQL 和 MySQL。 ​

还有以下这些它打叉的,其实都应该打勾。


不一一赘述。但是最后一个秒级安装部署,Keycloak 太支持啦。除开前面提到的 AWS 提供的部署方案(可能要钱),Free Arch 还给你提供了一种(几乎)免费的一键部署方案,即部署到 Heroku: ​

github.com/Jeff-Tian/ke

你只需要点一下“Deploy to Heroku”按钮,就能拥有自己的 Keycloak 了:

驳斥完 authing.cn 自己和 Keycloak 的对比文章,就要开始我做的对比了: ​

结论

authing.cn 为中国市场提供了丰富的特性。总的来说,虽然 authing.cn 能做的, Keycloak 也完全可以,但是 authing.cn 内置了很多特别的功能,使得开发者不用二次开发,就能直接对接。比如发送手机短信验证码,尽管 authing.cn 还不支持自定义短信验证码模板,但是默认的却可以立即使用。又比如它的微信生态,做得相当完整,还独创了 Web 应用的扫描小程序太阳码登录。但是它没有做“关注公众号即登录”,这有点遗憾(如果你想使用这个方案,可以直接使用我写的 Keycloak 微信插件;另外 authing.cn 的扫描小程序码登录的确很创新,我准备后面有空了也集成到 Keycloak 微信插件里)。 ​

对 2B 的支持

authing 内置对 2B 的支持,而且做了专门的优化。而 Keycloak 虽然也能支持 2B 场景,但并未区分 2B 和 2C。 ​

RBAC 的界面

都支持,但不得不说,authing.cn 的界面更加漂亮(它们自己的文章也说了这点,我同意)。Keycloak 的界面目前还是使用 Angular Js 开发的(不是 Angular!),的确有点过时的感觉。 ​

Authing.cn 的界面



Keycloak 的界面



管理门户

authing 有个用户池的概念,相应地,Keycloak 有个领域 (realm) 的概念。

Authing.cn 的管理门户



Keycloak 的管理门户



对业务流程的支持(比如登录、登出、忘记密码等)

都支持,并且都可以通过 UI 或者代码进行自定义。

Authing.cn 对业务流程的支持



Keycloak 对业务流程的支持



短信通知集成

Authing 内置,使用 Keycloak 需要自行对接。

authing.cn 对短信通知的集成


但是,它们不支持算定义短信模板,并且 QPS 限制在 100。


Keycloak 的短信通知方案需要自己集成

Keycloak 只内置 Email 验证通知方案。 ​

审计日志

都支持。

Authing.cn 的审计日志



Keycloak 的审计日志



数据迁移和备份

都支持。

authing.cn

数据可以从管理门户直接导出: ​


并且提供流水线自动化,这可以用来做数据备份:

当然,也可以做私有化部署,应用和数据全部掌控在自己的环境中:


Keycloak

数据也可以从管理门户直接导出:

而且它们支持多个数据存储源。如果采用 PostgreSQL,可以采用 Bucardo 来做跨数据中心的双活互备,当然,这是我在它们的老版本中这样实现的。它们最新的版本,会内置跨数据中心的双活部署方案: keycloak.org/docs/lates


对 OAuth 2 和 jwt 的支持

都支持。

authing 的 jwt 结构



Keycloak 的 jwt 结构



对微信生态的支持

这个只有 authing 内置了,Keycloak 需要自行开发,或者基于我的微信插件扩展。 ​



结束语

文章的开头有我做的 Keycloak 登录演示链接,在最后,放一个使用 authing.cn 登录的例子吧:欢迎通过 authing.cn 登录哈德韦小程序,成为哈德韦的朋友。 ​


发布于 2022-02-18 16:55