之前咱们在学习Oauth2的时候,须要通过写代码来实现认证受权服务。最近发现一款可视化的平安框架Keycloak,只需几个命令就能够疾速搭建认证受权服务,无需自行开发。原生反对SpringBoot,应用起来非常简单,举荐给大家!
SpringBoot实战电商我的项目mall(50k+star)地址:https://github.com/macrozheng/mall
简介
Keycloak是一款开源的认证受权平台,在Github上已有9.4k+Star。Keycloak性能泛滥,可实现用户注册、社会化登录、单点登录、双重认证 、LDAP集成等性能。
装置
应用Docker搭建Keycloak服务非常简单,两个命令就完事了,咱们将采纳此种形式。
- 首先下载Keycloak的Docker镜像,留神应用
jboss
的镜像,官网镜像不在DockerHub中;
docker pull jboss/keycloak:14.0.0
- 应用如下命令运行Keycloak服务:
docker run -p 8080:8080 --name keycloak \-e KEYCLOAK_USER=admin \-e KEYCLOAK_PASSWORD=admin \-d jboss/keycloak:14.0.0
- 运行胜利后能够通过如下地址拜访Keycloak服务,点击圈进去的中央能够拜访治理控制台,拜访地址:http://192.168.7.142:8080
控制台应用
接下来咱们来体验下Keycloak的治理控制台,看看这个可视化平安框架有什么神奇的中央。
- 首先输出咱们的账号密码
admin:admin
进行登录;
- 登录胜利后进入治理控制台,咱们能够发现Keycloak是英文界面,良心的是它还反对多国语言(包含中文),只有将
Themes->Default Locale
改为zh-CN
即可切换为中文;
- 批改实现后保留并刷新页面,Keycloak控制台就变成中文界面了;
- Keycloak十分良心的给很多属性都增加了解释,而且还是中文的,根本看下解释就能够晓得如何应用了;
- 在咱们开始应用Keycloak爱护利用平安之前,咱们得先创立一个畛域(realm),畛域相当于租户的概念,不同租户之间数据互相隔离,这里咱们创立一个
macrozheng
的畛域;
- 接下来咱们能够在
macrozheng
畛域中去创立用户,创立一个macro
用户;
- 之后咱们编辑用户的信息,在
凭据
下设置明码;
- 创立完用户之后,就能够登录了,用户和管理员的登录地址并不相同,咱们能够在
客户端
页面中查看到地址;
- 拜访该地址后即可登录,拜访地址:http://192.168.7.142:8080/aut...
- 用户登录胜利后即可查看并批改个人信息。
联合Oauth2应用
OAuth 2.0是用于受权的行业标准协议,在《Spring Cloud Security:Oauth2应用入门》 一文中咱们具体介绍了Oauth2的应用,当然Keycloak也是反对的,上面咱们通过调用接口的形式来体验下。
两种罕用的受权模式
咱们再回顾下两种罕用的Oauth2受权模式。
受权码模式
- (A)客户端将用户导向认证服务器;
- (B)用户在认证服务器进行登录并受权;
- (C)认证服务器返回受权码给客户端;
- (D)客户端通过受权码和跳转地址向认证服务器获取拜访令牌;
- (E)认证服务器发放拜访令牌(有须要带上刷新令牌)。
明码模式
- (A)客户端从用户获取用户名和明码;
- (B)客户端通过用户的用户名和明码拜访认证服务器;
- (C)认证服务器返回拜访令牌(有须要带上刷新令牌)。
明码模式体验
- 首先须要在Keycloak中创立客户端
mall-tiny-keycloak
;
- 而后创立一个角色
mall-tiny
;
- 而后将角色调配给
macro
用户;
- 所有准备就绪,在Postman中应用Oauth2的形式调用接口就能够获取到Token了,获取token的地址:http://192.168.7.142:8080/aut...
联合SpringBoot应用
接下来咱们体验下应用Keycloak爱护SpringBoot利用的平安。因为Keycloak原生反对SpringBoot,所以应用起来还是很简略的。
- 因为咱们的SpringBoot利用将运行在
localhost:8088
下面,咱们须要对Keycloak的客户端的无效的重定向URI
进行配置;
- 接下来咱们须要批改利用的
pom.xml
,集成Keycloak;
<!--集成Keycloak--><dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> <version>14.0.0</version></dependency>
- 再批改利用的配置文件
application.yml
,具体属性参考正文即可,须要留神的是给门路绑定好能够拜访的角色;
# Keycloak相干配置keycloak: # 设置客户端所在畛域 realm: macrozheng # 设置Keycloak认证服务拜访门路 auth-server-url: http://192.168.7.142:8080/auth # 设置客户端ID resource: mall-tiny-keycloak # 设置为公开客户端,不须要秘钥即可拜访 public-client: true # 配置角色与可拜访门路的对应关系 security-constraints: - auth-roles: - mall-tiny security-collections: - patterns: - '/brand/*' - '/swagger-ui/*'
- 接下来拜访下利用的Swagger页面,拜访的时候会跳转到Keycloak的控制台去登录,拜访地址:http://localhost:8088/swagger...
- 登录胜利后,即可拜访被爱护的Swagger页面和API接口,一个很规范的Oauth2的受权码模式,流程参考受权码模式的阐明即可。
总结
Keycloak是一款十分不错的可视化平安框架,让咱们无需搭建认证服务即可实现认证和受权性能。原生反对SpringBoot,根本无需批改代码即可集成,不愧为现代化的平安框架!
参考资料
- Keycloak官网文档:https://www.keycloak.org/gett...
- 爱护SpringBoot利用平安:https://www.keycloak.org/docs...
我的项目源码地址
https://gitee.com/macrozheng/...