keycloak~scope客户端模板的使用

news/2024/9/21 5:37:52/文章来源:https://www.cnblogs.com/lori/p/18393899

scope为何物?

scope在oauth2中表示授权的范围,另外也可以理解为,根据认证时scope的参数,在构建jwt时,返回更多的信息;比如在keycloak中,你的可选scope(optional scope)中添加了address这个模板,当你通过/auth/realms/{realmId}/protocol/openid-connect/token进行认证时,你的参数scope中出现address,那么在生成的jwt token中,就会出现address这个内容,如图:

这种按需求构建jwt的方法就是client scope最大的作用,下面我们具体来说一下步骤。

客户端模板功能汇总

  1. 在客户端模板中,可以看到所有的模板列表
  2. 可直接为所有新加的客户端添加默认模板(Default Client Scopes)
  3. 可以在模板配置中,选择可选模板,这个功能与认证参数scope配合使用,根据scope参数来扩展jwt token的内容
  4. 通过继承AbstractOIDCProtocolMapper来扩展客户端模板

配置客户端模板

模板列表,如图:

默认客户端模板,添加可选的scope,如图:

认证请求时,添加scope参数,如openid,address等

  • openid:在jwt中添加id_token相关信息,即存放用户的基本信息的token。
  • address:在jwt中添加address属性,通过解析user_attribute中的street,locality,region等信息,来扩展jwt token。

自定义客户端模板

例如,希望写一个扩展,在token中输出用户昵称,但这个昵称是有业务逻辑的,通过复杂的逻辑计算出一个用户昵称,这时,需要你自定义一个模板

  1. 定义一个ExtensionNicknameMapper
public class ExtensionNicknameMapperextends AbstractOIDCProtocolMapperimplements OIDCAccessTokenMapper, OIDCIDTokenMapper, UserInfoTokenMapper {public static final String CONFIG_NAME = "extensionNickname";//配置里的名称public static final String PROVIDER_ID = "oidc-extension-nick-name-mapper";private static final List<ProviderConfigProperty> configProperties = new ArrayList<ProviderConfigProperty>();private static final String NICKNAME = "nickname";static {configProperties.add(createConfigProperty(CONFIG_NAME, "Token申请名", "在jwt中的属性名称,默认nickname"));OIDCAttributeMapperHelper.addIncludeInTokensConfig(configProperties, ExtensionNicknameMapper.class);}protected static ProviderConfigProperty createConfigProperty(String claimName, String label, String help) {ProviderConfigProperty property = new ProviderConfigProperty();property.setName(claimName);property.setLabel(label);property.setHelpText(help);property.setType(ProviderConfigProperty.STRING_TYPE);return property;}@Overrideprotected void setClaim(IDToken token, ProtocolMapperModel mappingModel, UserSessionModel userSession,KeycloakSession keycloakSession, ClientSessionContext clientSessionCtx) {String nickname="";// 复杂的业务方法,计算出nickname变量的值token.setOtherClaims(tokenAttribute, nickname);}public List<ProviderConfigProperty> getConfigProperties() {return configProperties;}@Overridepublic String getId() {return PROVIDER_ID;}@Overridepublic String getDisplayType() {return "Extension Nickname";}@Overridepublic String getDisplayCategory() {return TOKEN_MAPPER_CATEGORY;}@Overridepublic String getHelpText() {return "Maps Extension Nickname claim.";}}
  1. 将ExtensionNicknameMapper添加到Jboss的SPI中
  • /resources/META-INF/services/org.keycloak.protocol.ProtocolMapper文件
your.package.ExtensionNicknameMapper
  1. 在keycloak管理后台,添加一个新的模板,然后在模板里的mapper选项卡中,添加一个新的mapper中选你的ExtensionNicknameMapper

好了,到这里,keycloak的client scope(客户端模板)就介绍完了,希望对各位有所帮助。

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

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

相关文章

安全帽佩戴检测识别系统

安全帽佩戴检测识别系统一直是当场生产制造中十分关键的构成部分。仅有保证员工的安全性,大家能够保证公司的权益。安全帽佩戴检测识别系统作为一种主要的检测施工人员是否佩戴安全帽的智能化方式,一直是帮助公司监督积极倡导规定职工佩戴安全帽的重要手段之一,但因为不戴安…

js转码方法

项目开发传参时会遇到用汉字或者特殊字符当做参数值的情况,这时需要转码一下才能正常传参,不然会因为不支持汉字而报错 转码方法共有三种: escape() encodeURI() encodeURIComponent()前两种不过多讨论,因为encodeURIComponent()能够正确处理更多的特殊字符,并确保整个 UR…

反射内存卡的使用场景

反射内存卡使用场景 航空航天与国防 1.飞行模拟器:用于实时模拟飞行器的各种状态和参数,确保多个模拟器节点之间的数据同步。 2.武器系统:在分布式武器控制和指挥系统中实现快速数据共享,提高响应速度。 3.卫星控制系统:保障卫星各子系统之间的数据实时交换。 工业自动化 …

两句话讲清楚离线安装docker镜像

背景:银河麒麟、离线环境,装吧,一装一个不吱声。两句话讲清楚离线安装docker镜像 目录两句话讲清楚离线安装docker镜像写在前面解决方案 写在前面背景:银河麒麟、离线环境,装吧,一装一个不吱声。准备:首先,你要有个docker,安装好了才能搞镜像是不是,参考我的上一篇:…

WPF性能优化之UI虚拟化

@目录前言一、VirtualizingStackPanel1.1 虚拟化功能介绍1、在Window中添加一个ListBox控件。2、在设计视图中用鼠标选中ListBox控件并右健依次单击“编辑其他模板”-“编辑项的布局模板”-“编辑副本”。3、查看生成的模板代码。1.2 虚拟化参数介绍二、CustomVirtualizingPa…

告别数据孤岛:数据增量同步方案助力企业数据整合!

为了更高效、更经济地管理和传输数据,特别是在数据量大、更新频繁的环境中,企业需要通过数据增量同步方案来解决。数据增量同步方案是一种数据同步技术,只同步自上次同步以来发生变化的部分数据,而不是同步整个数据集。具有以下作用: 1.减少数据传输量:在文件同步过程中,…

Echarts + 低代码 :可视化如何赋能企业的创新之路?

前言 数据驱动已经成为企业决策和业务优化的关键所在,在数字化时代,高效的数据分析与可视化呈现是实现智能决策的关键。利用低代码开发平台,企业可以快速构建满足业务需求的应用系统,实现对各类数据源的便捷接入。结合 Echarts 等可视化工具,复杂的数据信息能够以直观、富…

RAG知识库之知识库图谱应用

上篇文章介绍了使用大模型构建生成知识图谱,其实也可不用大模型用其他方式构建生成知识图谱,但RAG要结合知识图谱使用关键还是怎么把图谱的内容查询出来;简单来说可以先查出Chunk集在关联查出每个Chunk所关联的实体Entity再查询出实体之间的的关系集;这里说的RAG结合知识图…

快速开店新策略:新手如何利用API接口开启电商之旅

随着电子商务的蓬勃发展,越来越多的新手卖家希望建立自己的在线商店。但是,对于没有技术背景的新手来说,如何快速、高效地开设网店是一个挑战。幸运的是,API接口提供了一种解决方案,可以帮助您轻松实现网店的搭建和管理。本文将向您展示如何利用API接口快速开设网店。 一、…

省钱的开源项目「GitHub 热点速览」

本期,我从上周的热门开源项目中挑选了 5 个既省钱又省事,还好玩的开源项目。 首先,推荐的是省钱的电动汽车智能充电管理平台 evcc,它可以根据分时电价智能安排电动车充电时间,从而降低电费,如果你家还有太阳能充电和储能设备,evcc 更能最大限度地利用电能,让你的充电成…

新手入门 | 搭建 AI 模型开发环境

目录安装显卡驱动和开发库对于 Tesla 系列显卡对于 N 卡安装 CUDA 和 cuDNN安装 Miniconda安装 PyTorch 和 Transformers使用 Modelscope 下载加载模型PyCharm 项目配置模型加载和对话CPU 和 GPU 问题transformers 版本错误TORCH_USE_CUDA_DSA 错误 学习模型开发时,搭建环境可…