keycloak
上篇讲了keycloak 的概述和项目搭建流程,本篇的主要内容就是配置权限粒度管理、RBAC-API配置、单点登出等,算是对上篇keycloak 基础内容的一个加强,至于集成网关、用户数据注册存储、docker 部署等内容后面再说。
细粒度权限配置
上次已经搭建好了springboot 的测试项目,还有keycloak 也server 也启动没有问题了,所以这次直接就开始配置相关的权限内容了。
上篇配置的都是单独client 中的角色,本次先配置roles 中的角色,目前看这两者的区别就是前者只能在单个client 中使用,后者在所有client 中通用;
角色创建完成之后,回到上篇创建的client 中开启授权选项,这样就出现授权选项进行操作;
关于授权操作,首先要注意授权的组成部分,然后在操作其流程,这里还是比较绕的。这里的组成部分分别是资源、授权范围、策略、权限四部分,这四部分又相互关联。
下面这个是我整理的它们之前的关联关系图,其实最终要配置的还是权限,但是权限关联角色有需要策略,关联拦截接口又需要资源。
至于他们的详细配置,我下面图片有详细说明。
上面的配置添加完成之后,就可以配置springboot的内容了,但是需要注意:上面的配置都是角色,是没有配置用户的,用户和角色是两个概念,角色可以理解为不同的权限分组,用户才是和登陆有关系的,所以这里还需要添加用户,然后映射其和角色的关系,添加用户的内容上篇就有,不再赘述了。下面展示application.yml 的配置。
这里和之前的区别就是不再单一拦截某类接口,因为权限已经在keycloak 中配置了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29server:
port: 8082
keycloak:
realm: keycloak-demo
auth-server-url: http://localhost:8080
ssl-required: external
resource: boot-demo
credentials:
secret: fMcOHbSbc2o4izUFIIEXIl7d3zkrEsiq
bearer-only: true
#use-resource-role-mappings: true
policy-enforcer-config:
lazy-load-paths: true
http-method-as-scope: true
# security-constraints:
# - authRoles:
# - user
# securityCollections:
# - name: Logged
# patterns:
# - /user/*
# - authRoles:
# - admain
# securityCollections:
# - name: Admin resources
# patterns:
# - /admain/*测试类展示,这里有了GET和POST请求方式的区分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ApplicationController {
"/user/a") (
public String handleResourceA() {
return "user权限访问";
}
"/a") (
public String handleResourceB() {
return "没有权限访问";
}
public String handlePremiumResource() {
return "admain权限访问a";
}
public String handleAdminResource() {
return "admain权限访问b";
}
}
上面基本上就是细粒度权限的配置内容了,主要还是keycloak 的管理面板配置,区别于上面的配置就是说拦截不再springboot 中配置了,而是交给了keycloak。
单点登出
这里快的话,我了解不交少,目前只找到Vue 的实现方式,后台的话我只找到一个重定向原本页面,我理解就是清空Cookies,至于Vue 的实现我找到的是:调用keycloak 提供的一个登出的方法,代码如下。
1 | const logout = () => { |
总结
本篇的内容比较少,其实就是对上篇内筒的一个加强,并没有什么难理解的东西,大部分都是操作之类的,利用gateway 搭建OIDC 认证系统,还有keycloak 本身提供的API、使用docker 生产部署,这些东西难度比较大,后面再研究吧。