Keycloak简单几步实现对Spring Boot应用的权限控制,程序员Java基础案例教程
关注并星标 码农小胖哥,第一时间获取相关干货文章。
客户端
===
相信不少同学用过微信开放平台、蚂蚁开放平台。首先我们需要在这些开放平台上注册一个客户端以获取一套类似用户名和密码的凭证。有的叫appid和secret;有的叫clientid和secret,都是一个意思。其实keycloak也差不多,也需要在对应的realm中注册一个客户端。下图不仅仅清晰地说明了keycloak中Masterrealm和自定义realm的关系,还说明了在一个realm中用户和客户端的关系。
Realm、client、user关系图
我们需要在felord.cn这个realm中建立一个客户端:
在realm中创建客户端
创建完毕后你会发现felord.cn的客户端又多了一个:
realm的客户端列表
❝
你可以通过http://localhost:8011/auth/realms/felord.cn/account/来登录创建的用户。
然后我们对客户端spring-boot-client进行编辑配置:
填写重定向URL
为了测试,这里我只填写了设置选项卡中唯一的必填项有效地重定向URI,这个选项的意思就是客户端springboot-client的所有API都会受到权限管控。
角色
==
基于角色的权限控制是目前主流的权限控制思想,keycloak也采取了这种方式。我们需要建立一个角色并授予上一篇文章中建立的用户felord。我们来创建一个简单的角色:
在keycloak中创建角色
❝
keycloak的角色功能非常强大,在后面的系列文章中胖哥会和大家深入学习这个概念。
角色映射给用户
=======
然后我们把上面创建的角色base_user赋予用户felord:
![Keycloak简单几步实现对Spring Boot应用的权限控制](https://img-blog.csdnimg.cn/img_
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】浏览器打开:qq.cn.hn/FTf 免费领取
convert/282835badfcab82fb02b2b23587f193e.png)
给realm中的用户赋予角色
到这里用户、角色、角色映射都搞定了,就剩下在客户端上定义资源了。
获取和刷新JWT
========
我们可以通过下面这个方式获取用户登录的JWT对:
POST /auth/realms/felord.cn/protocol/openid-connect/token HTTP/1.1
Host: localhost:8011
Content-Type: application/x-www-form-urlencoded
client_id=springboot-client&username=felord&password=123456&grant_type=password
会得到:
{
“access_token”: “eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiS 省略”,
“expires_in”: 300,
“refresh_expires_in”: 1800,
“refresh_token”: “eyJhbGciOiJIUzI1NiIsInR5cCIgOiAi 省略”,
“token_type”: “Bearer”,
“not-before-policy”: 0,
“session_state”: “2fc7e289-c86f-4f6f-b4d3-1183a9518acc”,
“scope”: “profile email”
}
刷新Token只需要把refresh_token带上,把grant_type改为refresh_token就可以刷新Token对了,下面是请求刷新的报文:
POST /auth/realms/felord.cn/protocol/openid-connect/token HTTP/1.1
Host: localhost:8011
Content-Type: application/x-www-form-urlencoded
client_id=springboot-client&grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlYWE2MThhMC05Y2UzLTQxZWMtOTZjYy04MGQ5ODVkZjJjMTIifQ.eyJleHAiOjE2MjU3NjI4ODYsImlhdCI6MTYyNTc2MTA4NiwianRpIjoiZjc2MjVmZmEtZWU3YS00MjZmLWIwYmQtOTM3MmZiM2Q4NDA5IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDExL2F1dGgvcmVhbG1zL2ZlbG9yZC5jbiIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAxMS9hdXRoL3JlYWxtcy9mZWxvcmQuY24iLCJzdWIiOiI0YzFmNWRiNS04MjU0LTQ4ZDMtYTRkYS0wY2FhZTMyOTk0OTAiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoic3ByaW5nYm9vdC1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiZDU2NmU0ODMtYzc5MS00OTliLTg2M2ItODczY2YyNjMwYWFmIiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.P4vWwyfGubSt182P-vcyMdKvJfvwKYr1nUlOYBWzQks
❝
注意:两个请求的 content-type都是application/x-www-form-urlencoded。
Spring Boot客户端
==============
建一个很传统的Spring Boot应用,别忘了带上Spring MVC模块,然后加入keycloak的starter:
org.keycloak
keycloak-spring-boot-starter
14.0.0
❝
当前keycloak版本是14.0.0 。
然后随便编写一个Spring MVC接口:
/**
@author felord.cn
@since 2021/7/7 17:05
*/
@RestController
@RequestMapping("/foo")
Keycloak简单几步实现对Spring Boot应用的权限控制,程序员Java基础案例教程相关推荐
- Keycloak简单几步实现对Spring Boot应用的权限控制
我们在上一篇初步尝试了keycloak,手动建立了一个名为felord.cn的realm并在该realm下建了一个名为felord的用户.今天就来尝试一下对应的Spring Boot Adapter, ...
- SpringBoot 精通系列-如何使用Spring Boot Security进行权限控制
导语 如何设计一个高效健全的安全策略是保证企业数据安全的的关键,笔者见过设计的比较优秀的安全管理策略也见过设计的比较Low的安全管理策略.如何保证高效的安全策略,在Java中Spring官方提供了 ...
- 真的简单,单手用Spring Boot 开发一个微信小程序
前言 嗨,大家好,现在微信使用的用户很多,作为开发人员也可以建立一个自己的微信小程序,本期与大家分享一下作者建立微信小程序的开发流程. 申请 百度搜索微信公众号平台,然后扫码登录注册一个微信公 ...
- 腾讯云服务器 - 将 Spring Boot 项目部署到云服务器上(保姆级教程)
目录 前言 1.在云服务器上安装 jdk 2.在云服务器上安装 mysql 2.1.安装 mysql 2.2.启动 mysql 服务 2.3.验证 3.将 Spring Boot 项目打包成 jar ...
- springboot毕设项目基于Spring Boot的智慧天气管理系统84z99(java+VUE+Mybatis+Maven+Mysql)
springboot毕设项目基于Spring Boot的智慧天气管理系统84z99(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8. ...
- java局部网内通话杂音_在Spring Boot反应式Web应用程序上启用SSL,并在控制台中对该打印进行http调用时出现异常噪音...
在我创建了我的spring boot反应式Web应用程序以支持SSL之后,当我尝试对服务器进行http调用时,它会在控制台中的异常跟踪下面打印 . 作为应用程序所有者,我无法阻止任何人使用我的服务 . ...
- java喷泉编码_好程序员Java教程分享使用JS实现简单喷泉效果
原标题:好程序员Java教程分享使用JS实现简单喷泉效果 好程序员Java教程分享使用JS实现简单喷泉效果,最近,在教学生使用JS的基本操作,为了练习JS的基本作用,特地写了一个喷泉效果,代码如下: ...
- 计算机应用基础实训指导教程 王,计算机应用基础案例教程及实训指导-第2章___Windows操...
计算机应用基础案例教程及实训指导-第2章___Windows操 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 第2章中文WinXP ...
- 无返回值_只需一步,在Spring Boot中统一Restful API返回值格式与处理异常
统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: public cl ...
最新文章
- xilinx sg dma 注意事项
- hdu2.1.2 How many prime numbers(计算素数的个数)
- mysql查看死锁和解除锁
- 如何读emmc里的引导程序_自制操作系统学习1 引导程序
- 【项目管理】认识沟通管理
- [01-01]oracle数据库汉化
- 重置mysql root密码
- SAP UI5 应用开发教程之四十七 - 如何自定义 SAP UI5 字符串类型输入字段的校验逻辑
- 南理工计算机技术专业学位,南京理工大学计算机技术(专业学位)考研难吗
- 《STL源码剖析常见面试问题》
- Python测试序列是否所有相邻元素之间都具有升序关系
- php Apache配置伪静态的介绍
- 181016扇贝有道词霸每日一句
- 毕设题目:Matlab优化分配
- matlab aug,H无穷控制中的augss命令和编写的程序
- php 查文件sha1 内存不足,PHP 计算文件的 sha1 散列值
- 渗透测试详解及爱加密加固使用及优势
- 如何使用vim来进行编辑文档和脚本
- 【建议背诵】2022下半年软考「高项」100题(2)
- 线性代数[矩阵的秩]
热门文章
- uniapp实现多级菜单选择u-select
- 常用的一些子域名,旁站查询
- [转]《101个爱情故事》
- 血清、血浆、全血、脑脊液、尿液——临床标本大全
- oracle如何收缩表空间文件,ORACLE 收缩表空间的数据文件
- Goldwave心得
- 论文翻译:Pose estimation at night in infrared images using a lightweight multi-stage attention network
- 自考本科毕业后还有必要专升本读全日制本科吗?
- GetLastError 错误码全解析
- Blender图解教程:使用自带插件Tri-lighting快速实现三点布光+摄像机定位+动画渲染一条龙