Keycloak单点登录平台|技术雷达

Keycloak首次在ThoughtWorks技术雷达第16期中以“评估”的状态出现。

技术雷达15期正式提出“安全是每一个人的问题”,同时也对Docker和微服务进行了强调。

在微服务盛行的时代,现代Web服务的拆分对鉴权和授权也提出了新的挑战,而这正是Keycloak解决的问题。

用一句官方语言来解释,“Keycloak为现代应用系统和服务提供开源的鉴权和授权访问控制管理”。

Keycloak实现了OpenID,Auth2.0,SAML单点登录协议,同时提供LDAP和Active Directory,以及OpenID Connect, SAML2.0 IdPs,Github,Google等第三方登录适配功能,能够做到非常简单的开箱即用。但是在实际上,如果想稍微顺利的添加配置,还是需要简单的了解SSO,若想要配置更加复杂的场景,则需要了解对应的协议。


原理概念普及

(图片来自:SAML2.0 wiki)

上图是使用SAML协议时,用户首次登录的一种最常用的工作流(SP Redirect Request; IdP POST Response),也是Keycloak的默认方式(当选择SAML协议时),如果忽视传输内容(SAML基于xml传输,OpenID普通文本)的不同,这种工作流程与OpenID的流程非常相似,可以用它来大致了解登录流程。

用户请求Service Provider(简称SP),通过SessionID判断是否存在已鉴权的Context,否则返回302,重定向至Identity Provider(简称IdP),并携带参数,IdP检测是否已经存在鉴权Context,否则要求用户提供凭证(例如普通的用户名密码输入框),成功后返回302,并将数据返回给SP。

在此流程中,单点登录能够做到的非常关键的一点就是Web中的鉴权Context,这种方式的实现原理也就是利用了Cookie(Web Session的实现),多个SP对应一个IdP,任一台SP登录成功,IdP即有了鉴权Content,随后其他SP即可直接登录,这个过程可简单的观察浏览器地址栏变更或查看浏览器网络请求过程。

另一种方式是针对提供RESTful API的服务,这种情况下必须使用OpenID Connect协议,这种协议建立在Auth2.0之上,所以,可以将access_token通过Http头的方式来获取权限信息。

(图片来自:WSO2 Blog)

洞见上有两篇文章,《登录工程:现代Web应用中的身份验证技术》《登录工程:传统 Web 应用中的身份验证技术》,它们很详细的描述了传统Web和现代Web鉴权授权方式的功能需求。

现代Web服务化的普及,迫切需要将账号服务、鉴权服务、授权服务单独拆分,以独立的方式为其他Service提供服务,而这些服务需要提供双阶段认证机制(two-factor-authentication)、基于时间的一次性密码算法、复杂的密码策略、第三方登录系统接入(Github,Google,SAML IdP,OpenID Connect OP),将这些功能全部实现,那么它也就成了Keycloak。


优缺点

Keycloak的优点和缺点都非常明显。

优点包括:

  • 集群配置
  • 应用轻量级
  • 文档简洁全面
  • 样式可完全自定义
  • 丰富的第三方适配
  • 样例丰富
  • 配置版本化管理等

并且,所有操作提供RESTful接口,可简单的通过API接口进行配置。

缺点包括:

  • 很多范例使用JSP、Servlet,对使用SpringBoot的用户不太友好;
  • 导入导出配置仅可以在启动时设置,这个在使用Docker容器时,极其不友好;
  • 授权访问配置导出尚存在Bug;
  • 授权Filter存在Bug,Issue已存在,但未修复;第五,相比Okta,Auth0配置说明及范例较少。

雷达路线及对比

翻阅雷达发现,SSO的应用很早便开始,OpenAM首次在2015年5月的雷达上出现在“评估”位置,对于OpanAM的态度,雷达是这样的:

“由于OpenAM 历史悠久,因此它的代码库很庞大,并且文档也很难理解。希望在不久后,会有一个更轻量级的,对自动化部署和配置提供更好支持的替代方案出现。”

在“评估”两期后,即不再出现。与Keycloak同期存在的还有更稳当的Auth0,它是一款商业的SSO平台,处在“试验”的位置,也就是说,Keycloak真正接替了OpenAM,同时它也满足了雷达提出的愿景——轻量级,支持自动化部署,配置友好。


总结

还是很看好Keycloak发展的,它是JBoss/Redhat下的一个项目,所以有较为坚实的技术支撑,而且,JBoss/Redhat也使用了Keycloak作为它的SSO系统。但是,它的普及率不是很高,所以出现问题所能查到的资料有限。因此,如果能够得到更多的推广和支持,Keycloak在现代Web环境下,可能会有更好的发展。


原文发布于微信公众号 - 思特沃克(ThoughtWorks)

原文发表时间:2017-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AndroidTv

Gradle 系列博客梳理系列博客博客概要后记

20140
来自专栏精讲JAVA

Java面试Spring必备知识点,怼死面试官,从我做起

首先,面试骚红系列已经更新了到第三篇了,更新的两篇文章,可以说,小海遇到了很多问题,第一个问题,发布第二篇,Linux知识点,有人说小编弄得太浅显...

31230
来自专栏james大数据架构

几十条业务线日志系统如何收集处理?

  在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息,甚至包括点击的位置,我们也经常发现自己刚搜完一个东西,再打开网页时每个小广告都会出现与之相...

363100
来自专栏Java技术栈

两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践

Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这...

12030
来自专栏一个会写诗的程序员的博客

《Spring Boot极简教程》第1章 Spring Boot史前简述小结参考资料

大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。

11520
来自专栏WindCoder

简化软件集成:一个Apache Camel教程

本周收到的是一篇关于使用Apache Camel整合企业中各种软件的教程,涉及到从基础到Kubernetes集成。推荐直接看原文:

94610
来自专栏编程

Java开发必须要知道的知识体系

Java是超高人气编程语言,拥有跨平台、面向对象、泛型编程等特性。在TIOBE编程语言排行榜中,连续夺得第一宝座,而且国内各大知名互联网公司,后端开发首选语言:...

25090
来自专栏LeoXu的博客

Tapestry 教程(一) 原

这篇教程帮助人们来创建基于 Tapestry 的 web 应用程序。你是否有过使用 Tapestry 早期版本或者其它 web 框架的经历,这一点并不重要。事实...

17230
来自专栏IT笔记

Grafana+Prometheus系统监控之webhook

概述 Webhook是一个API概念,并且变得越来越流行。我们能用事件描述的事物越多,webhook的作用范围也就越大。Webhook作为一个轻量的事件处理应用...

74130
来自专栏Linux 杂货铺

腾讯云携手CODING,云端IDE——Cloud Studio初体验

4月16日,腾讯云与CODING宣布达成战略合作,共同发布以腾讯云云服务器为基础的国内第一款完全基于云端的IDE工具:Cloud Studio的beta版本。

4.4K210

扫码关注云+社区

领取腾讯云代金券