如果你在测试keycloak的快速入门程序,会发现大部分代码是在3年前写的。多数情况是,下载下来以后跑不通的。这里以一个sso的例子,调试通quickstart的代码,并理解其中的原理。
一、 简要原理
Realm:Keycloak作为认证授权服务器,使用realm区分认证域,不同的reaml不能互相认证。
Client:在同一个realm下,需要创建client,一个client是一个授权策略、资源、范围及其对应关系的集合。一般需要指定回调uri,标明授权给的资源服务器。
资源服务器:通常理解的应用服务,可以是web应用,可以是service。原先的做法是各应用建设认证和授权的模块。统一认证不仅可以做到少登录,还能依托认证授权服务器,实现统一的权限管理。
一般的,我们会在keycloak建一个realm,为对应的应用服务器新建client。同一个realm下的不同client,可以被相互认证。也就是说,A应用和B应用对应keycloak的不同client,用户在应用A登录后,无需登录即可访问B,只要有对应的资源权限。
以下就keycloak官方提供的示例代码,介绍一下。
二、 示例代码
官方提供的示例代码地址:
https://github.com/keycloak/keycloak-quickstarts
这个示例项目跟随主项目更新频率特别高,第一次接触这个是5.0.0,上个月还在8.0.1,现在已经9.0.0了,仔细查看release note,发现主题框架和功能没有变化,新增了一些安全性的和易用性的改进,以及支持浏览器升级带来的安全性设置。
示例包含了keycloak官方文档中提到的各章节,分别都做了单独的项目示例,总数超过20个,java居多,部分是JavaScript,包括前端和后端。我们选取java的两个后端项目做示例。
示例代码的演示主题在各自readme中,不太能看出来。需要在官方文档对应章节了解。Java的对应了多种web容器,不过实际使用中,还是以springboot居多,于是在springboot相关的项目中,选择了一个web应用,选择一个服务型的应用。
Web应用地址:
https://github.com/keycloak/keycloak-quickstarts/tree/latest/app-springboot
服务应用地址:
https://github.com/keycloak/keycloak-quickstarts/tree/latest/service-springboot-rest
众所周知,示例代码一般是跑不起来的。我们改一下~