keycloak-鉴权springboot

一、环境描述

keycloak鉴权springboot的方式,此处简单介绍,springboot官方也提供了demo

https://github.com/keycloak/keycloak-quickstarts/tree/latest/spring/rest-authz-resource-server

以及文档说明

Securing Applications and Services Guide

本文环境
springboot版本:2.7.1,(此版本无所谓,都是一样的)

keycloak版本:23.0.7(截止目前最新版本)

二、keycloak配置

1、创建realm

登录keycloak后先新建一个realm,在realm中,可以很轻松使用一套用户体系,当然用户体系也可以跨realm使用。realm相当于一个微服务群,client相当于每一个服务。

输入名称,当然有realm配置文件备份的话还可以点击browse导入配置,然后点击create按钮创建realm

2、创建user

进入user列表,点击add user。此user可以使用本地服务的user,这样就能用本地服务用户体系登录系统了。此方法后续再演示

输入用户名,点击create,不用着急密码,下一步再新建密码

选择Credential tab签,点击set password

输入密码和确认密码,点击save

然后,用户创建成功,看到角色(role mapping)中用户默认绑定了 default-roles-quarkus-test 的默认角色。keycloak中角色是要和认证权限匹配的

3、创建client

23.0.7版本中此处授权不选,对应的是老版本(15前)的访问鉴权控制设置为public。

设置重定向rul

点击save,完成client创建

三、springboot配置

在application.properties中配置如下,本来想在.yml 中配置,结果官方例子是properties为了抄起来方便就这样吧。

# 对应keycloak的域realm
keycloak.realm = quarkus-test
# keycloak访问地址
keycloak.auth-server-url = http://127.0.0.1:8080
# https 验证
keycloak.ssl-required = external
# 对应keycloak中的client
keycloak.resource = login-test
# 鉴权时角色匹配
keycloak.use-resource-role-mappings = true
# 客户端(本服务)鉴权连接keycloak为public,不需要客户端secret之类
keycloak.public-client=true
# 鉴权keycloak角色
keycloak.security-constraints[0].authRoles[0]=default-roles-login-realm
# 鉴权springboot API 接口
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/demo/*

官方说这个配置适用于keycloak新版本,我没用旧版本做过测试,没有发言权。

springboot controller 代码

截个图,代码不用粘贴了吧

启动springboot

在被keycloak拦截到的时候,控制台日志打印出了keycloak api地址,可以访问看看

四 、登录403问题处理

访问springboot后台接口

然后跳转到登录页

输入用户名密码后 403,说明用户没有配置client角色权限。

1、配置client权限角色

2、给用户匹配该角色

默认角色列表为域角色,选择客户端角色进行匹配

分配好角色后,保存,回到springboot访问页刷新如下

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试真题-提取字符串中的最长数学表达式并计算-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: 滑动窗口 eval() 思路:先把合法字符提取出来;再从合法字符提取出合法表达式;再获取最长字符串,并运算最后结果。 代码: """ analyze: 如果没有,返…

数字逻辑与计算机组成

冯诺依曼计算机 计算机结构 计算机特点 1.采用二进制 2.程序存储 2.由五大部件组成计算机系统:运算器、存储器、控制器、输入设备和输出设备 计算机硬件系统的层次 中央处理器(CPU):运算器 控制器 计算机主机:…

CAN总线位时序的介绍

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。 显性电平对应逻辑 0,CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1&#xff0c…

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版(可以免费使用) 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库,可以与我们的github账号进行关联…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

011-闭包

闭包 1、概念2、闭包应用防抖&节流 1、概念 闭包:就是能够读取其他函数内部变量的函数。 function fn1() {const num 100;return function(num1) {return num num1; // 该函数 使用了 父作用域里面的 num,所以被称为闭包} }const sumFn fn1();…

【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)

点击这里访问我的博客主页~~ 对指针概念还不太清楚的点击这里访问上一篇指针初阶2.0 上上篇指针初阶1.0 谢谢各位大佬的支持咯 今天我们一起来学习指针进阶内容 指针进阶 一、指针变量1、字符指针变量2、数组指针变量①数组指针变量的定义②数组指针变量的初始化 3、函数指…

C++面试干货---带你梳理常考的面试题(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 1.struct 和 class 区别 1.默认访问权限:struct中的成员默认为public,而class中的成员默认为priv…

ClickHouse安装、简介及使用

文章目录 一、简介1、什么是ClickHouse2、什么是OLAP3、列式存储特性 二、安装1、官方文档2、docker安装3、核心目录4、clickhouse-client使用 参考资料 一、简介 1、什么是ClickHouse ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 官网:htt…

网上搞钱的方法你知道几个?盘点3个普通人都可操作的赚钱项目

项目一,微头条 我们可以借助精彩的文章,分享知识、心得和见解,吸引更多的读者关注并获得更多的点赞与评论。关键字的巧妙运用将使你的文章更具吸引力和影响力,同时也会为你带来更多的关注度和阅读量。我们写微头条文章的时候&…

2024.3.5每日一题

LeetCode 到达目的地的方案数 题目链接:1976. 到达目的地的方案数 - 力扣(LeetCode) 题目描述 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以…

LeetCode 2673. 使二叉树所有路径值相等的最小代价【贪心】1917

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Android开发第三方库PhotoView的使用

PhotoView 是一个用于Android的第三方库,它扩展了Android的ImageView,提供了诸如捏合缩放、平移和双击缩放等交互功能。 多点触控缩放:用户可以使用两个手指捏合来放大或缩小图片。平滑滚动:当图片被放大后,用户可以拖…

python三剑客之一——Numpy

温故而知新,借着工作需要用到Numpy的机会重新学习一遍Numpy。 Numpy是一个运行速度非常快的数学库,主要用于数组计算,包含如下: 一个强大的N维数组对象ndarray【Nd(Dimension维度)array】 广播功能函数 整…

JAVA学习-类和接口.匿名类

Java类和接口是面向对象编程的基本概念,类用来描述对象的属性和行为,接口定义一组方法的规范。匿名类是一种特殊的类,它没有名字,在使用时直接定义和实例化。 Java中常见的类和接口有很多,包括基本类(如Str…

2024.3.5

作业1、使用select实现tcp服务器端&#xff0c;poll实现tcp客户端 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.131" //服务端IP #define SER_PORT 8888 //服务端端口号int main(int argc, const char *argv[])…

plc远程锁机网关,远程锁机与防拆功能双重保障

在设备租赁和分期购买领域&#xff0c;如何确保设备的安全与资金的回收一直是各大厂家和卖家关注的重点。传统的锁机方式往往需要人工介入&#xff0c;不仅效率低下&#xff0c;而且成本高昂。如今&#xff0c;借助HiWoo Box的远程锁机功能&#xff0c;这些问题将迎刃而解。 什…

Linux运维工具-ywtool默认功能介绍

提示:工具下载链接在文章最后 目录 一.资源检查二.日志刷新三.工具升级四.linux运维工具ywtool介绍五.ywtool工具下载链接 一.资源检查 只要系统安装了ywtool工具,默认就会配置上"资源检查"的脚本资源检查脚本的执行时间:每天凌晨3点进行检查资源检查脚本的检查内容…

基于springboot+vue的球队训练信息管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

el-select 选中之后所有颜色变蓝了

出现上述原因&#xff1a;你写的value属性的绑定值是对象&#xff0c;在规定中只能value的值只能是boolean / string / number这三种类型&#xff0c; 所以要加上value-key属性 <el-select v-model"senderProvince" placeholder"请选择活动区域">&…