keycloak~认证与校验使用说明

news/2025/2/23 17:49:42/文章来源:https://www.cnblogs.com/lori/p/18715174

主要内容

  • 密码认证
  • 授权码认证 哪个client申请的code,使用哪个client获取token
  • 客户端认证 在kc开通了服务端帐号之后,可通过client_id和client_secret来获取token,与用户无关,无刷新token机制
  • 自动触发社区认证 当用户在社区网站上登录后,访问这个地址可自动登录法宝
  • 验证token是否在线 可使用任意client来验证所有token的在线性
  • refresh_token刷新token 哪个client生成的token,就用哪个client去刷新
  • 登出/注销 官方post方式和浏览器302方式

密码认证

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求体 x-www-form-urlencoded
grant_type:password
username:test
password:123456
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
client_id:democlient
  • 响应
{"access_token": "*.*.*","expires_in": 3000,"refresh_expires_in": 1800,"refresh_token": "*.*.*","token_type": "bearer","not-before-policy": 1619512543,"session_state": "765969ec-94da-4edb-9dcb-e15ea3e0ad3b","scope": "roles email profile"
}

授权码认证

注意的几点

  • code时的redirect_uri和authorization_code的需要是一致的,不一致的错误
{"error": "invalid_grant","error_description": "redirect_uri error"
}
  • code时的client_id和client_secret和authorization_code的需要是一致的,不一致的错误,这块我已经修改了源码,去掉了这个限制
    {
    "error": "invalid_grant",
    "error_description": "Auth error"
    }
  • code的组成
    它由3部分组成,中间使用.分割,第一部分是UUID,第二部分是用户会话ID【session_state】,第三部分是客户端ID,例如:
5c33f9a2-cbf4-4804-a8ee-e2d076eda2d6.40be5301-f41b-4f0d-97e7-d2074db2801c.ff591897-7654-460e-9c19-8e8f92117768

请求code

  • GET /auth/realms/your-realm/protocol/openid-connect/auth
  • QUERY
client_id:democlient
scope:openid
response_type:code
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
redirect_uri:http://localhost:9090/callback
  • 跳转到kc的登录页,完成用户名和密码的登录

  • 登录成功之后,跳回callback删除,在url参数上带上了code

请求token

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求体 x-www-form-urlencoded
grant_type:authorization_code
code:68058719-add6-4b40-ab96-8e71af03827a.7a31b1a9-c3e8-46d4-b8cc-345012fcf4a2.25e52f60-5991-43dd-9108-873f60af385d
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
scope:openid
redirect_uri:http://localhost:9090/callback
  • 响应
{"access_token": "*.*.*","expires_in": 3000,"refresh_expires_in": 1800,"refresh_token": "*.*.*","token_type": "bearer","id_token": "*.*.*","not-before-policy": 1619660302,"session_state": "14812f50-b9f7-4cee-be56-bf9bef5c961a","scope": "openid roles email profile"
}

客户端认证

客户端认证,与用户无关,主要保证向keycloak发起的请求,来自合法的client即可(由keycloak颁发的client)

  • POST /auth/realms/your-realm/protocol/openid-connect/token
  • 请求 x-www-form-urlencoded
  • 参数
grant_type:client_credentials
client_secret:912ecc47-60b1-4dd4-8f62-c7745c293cab
client_id:kce
  • 注意,需要在keycloak客户端配置开启服务账号

  • 如果没有开启服务账号,将出现下面异常
{"error": "unauthorized_client","error_description": "Client not enabled to retrieve service account"
}

自动触发社区认证

carsi中出现的东西,院校希望直接通过固定的uri实现社区登录,故开发这个功能

  • 地址:GET https://kc.democlient.com/auth/realms/your-realm/protocol/openid-connect/auth?scope=openid&response_type=code&client_id=carsi-auto&redirect_uri=https://www.baidu.com
  • 首先,需要在配置Authentication Flows中的brower中的社区登录的有限级最高,我们可以复制一个brower认证流,在新流上修改,用户密码认证步骤关闭,也可以删除

  • 这个里的重定向认证使用的认证流是carsi

  • 其次,需要新添加客户端,专门用来发送社区自动认证请求的,如carsi-auto,或者配置客户端的自定义认证方式

  • 最后,测试一下,你可以看到,通过这个地址,可以唤起社区登录,最后回调到我们OIDC认证上来

验证token是否在线

是否触发了keycloak的logout接口,如果触发了,那token将被删除,在线状态active为false,如果不希望提供client_secret参数,也可以通过/auth/realms/your-realm/protocol/openid-connect/userinfo接口来判断token是否有效,httpcode为401表示token失效.

  • 使用场景:a客户端在kc申请的token,可以在b客户端调用kc的接口去校验它的合法性
  • POST /auth/realms/your-realm/protocol/openid-connect/token/introspect
  • 请求体 x-www-form-urlencoded
token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应,状态码都是200,如果json体中active为false,表示已经离线
{"active": false
}

refresh_token刷新token

注意,刷新token与客户端有关,自己客户端生产的access_token,只能由自己客户端去refresh_token刷新

  • POST /auth/realms/your-realm/protocol/openid-connect/token
grant_type:refresh_token
refresh_token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应
    新的token对象
{"access_token": "*.*.*","expires_in": 3000,"refresh_expires_in": 1800,"refresh_token": "*.*.*","token_type": "bearer","not-before-policy": 1621497420,"session_state": "405d25b0-5128-45ae-9934-953eecb79894","scope": "roles profile"
}

登出/注销

KC的登出是属于会话的登出,通过这个会话产生的所有token(一个会话可能对应多个不同client的token)都将会退出

一般地,如果是前后不分享项目,应该还会清除自己网站的session会话,然后再去调用KC的接口

  • POST /auth/realms/your-realm/protocol/openid-connect/logout
  • 请求体 x-www-form-urlencoded
refresh_token:*.*.*
client_id:democlient
client_secret:ec0fd1c6-68b0-4c39-a9fa-c3be25c8ef01
  • 响应
HttpCode为200或者204表示操作成功
  • 浏览器端可通过这个接口来实现302浏览器跳转方式的登出
GET /auth/realms/your-realm/sms/remove-sessions?redirect_uri={redirect_uri}
登出后,KC会跳转到redirectUri的页面

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

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

相关文章

Dify报错model schema not found

工作室操作 Agent 选择模型时对话报错: "Model schema not found" error only in agents是因为没打开模型的函数调用功能:当然,也不是所有模型都支持该功能。 本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!🚀 魔都架构师 | 全网30W+技术追随…

论文阅读 | 离线强化学习研究综述25年1月

文章来源 计算机学报2025年1月 比较新的一篇中文综述,值得一读 O IntroductionDRL应用如AlphaGo需要与环境在线交互,并且进行大量数据采样,现实世界代价昂贵且试错风险极高 2020年Levine提出离线强化学习概念(Offline Reinforcement Learning, Offline RL) 挑战:还是函数…

开启或者关闭windows远程桌面连接的音量

一、如图所示,远程桌面连接到了另一台设备,是没有声音的,音量的喇叭打了一个叉号二、使用win+r进入“运行” 三、输入gpedit.msc进入组策略管理器 (避免要求使用域账号进入) 四、计算机配置一管理模块-windows组件一远程桌面服务一远程桌面会话主机一设备和资源重定向五…

8款支持 C# 语言的 AI 辅助编程神器,高效编程利器!

前言 在当今这个AI技术日新月异的时代,一股创新的浪潮正席卷着软件开发领域,其中AI辅助编程工具以其独特的魅力脱颖而出,成为了众多开发者不可或缺的得力助手。这些工具不仅能够显著提升开发效率,优化代码质量,还能有效降低bug产生率,是现代软件开发过程中不可或缺的重要…

第三章:计算机的数据表示

复习第一章:需要一台计算机,在研究其组成的方向上进行努力 第二章:知道了计算机由输入设备、存储器、运算器和输出设备组成,这个体系目前还在沿用,现在该探究计算机怎样表示数据了TL;DR计算机使用二进制(0 和 1)表示所有数据,每一个 0 或 1 都是一个二进制位 为了表示简…

【蔚蓝星球的节日】世界海洋日的探索与海洋的重要性

在浩瀚无垠的蓝色星球上,海洋占据了地球表面的大部分,它是生命的摇篮,气候的调节器,也是全球经济和文化交流的纽带。为了纪念海洋的无尽恩赐,并唤起全人类对海洋保护的意识,联合国自2009年起将每年的6月8日定为“世界海洋日”。本文将带您追溯世界海洋日的由来,探讨其与…

Java轻量级代码工程

生存压力下,做项目时间和成本是最重视的维度,抛开什么AI和各种工具加持,节省编程时间最有效的办法就是:拿现成的,最好只改个端口号。一、背景简介 最近2年,很多公司接项目开始不挑剔了,只要核算下来有收益不会亏,就会库库的做各种没头没脑的项目,都是抱着多撑一天是一…

CTF-Web培训章节-社会工程学

目录 1、Web应用信息泄露 2、Web应用权限安全 3、社会工程学 4、总结 社会工程学 社会工程学是一种结合开源情报搜集进行人性攻击的一种网络攻击手段,综合运用信息搜集、语言技巧、心理陷阱等多种手段,完成欺骗的目的。社会工程学采用的技术手段可分为以下几种:社工库收集、…

火了整个春节的DeepSeek,他对AI产品的意义到底是什么?

https://www.cnblogs.com/yexiaochai/p/18699686相信春节期间各位的朋友圈一定被DeepSeek“轰炸”了,就算是普通人也获得了一些信息:国内AI取得了巨大突破。 但DeepSeek这次突破到底对一般的互联网从业者有什么帮助,绝大多数人却是一头雾水。 究其原因:Attention is All Yo…

使用JSXGraph进行平面二连杆机构动力学仿真

对于自由运动的机器人来说,其控制器设计可以按是否考虑机器人动力学特性分为两类。一类是完全不考虑动力学特性,只是按照机器人实际轨迹与期望轨迹间的偏差进行负反馈控制。这类方法通常被称为“运动控制(Kinematic Contorl)”,其中的控制器常采用PD或PID控制。运动控制的…

【探秘海洋伤痕】海洋环境污染损害的警世启示

在地球这个蓝色星球上,广袤无垠的海洋孕育了无数生命,支撑着地球的生态平衡与人类的生存发展。然而,随着工业化和现代化的加速,海洋环境遭受的伤害日益严重,海洋环境污染损害成为了我们必须直面的严峻问题。本文将带您深入理解何为海洋环境污染损害,揭示其背后的严峻现实…

Axurecloud 私有云破解(Axure Cloud for Business On-Premises)Axurecloud本地服务器

本文探讨了Axurecloud私有云的优势,包括快速访问、无资源限制、用户管理及数据安全性,以及为何需要破解国外服务器的限制。同时提供了从安装到破解的详细步骤,以及如何在AxureRP中连接私有云的指导。2025年2月13日更新最近有小伙伴联系我,说官方提供的Axurecloud不支持axur…