如何给 Keycloak 用户加上“部门”、“电话”等自定义属性

news2024/12/26 22:50:27

Keycloak 是一款开源的用户认证和授权软件。在默认安装情况下,它只给新创建的用户提供了 email 属性,但是在许多应用场景中,客户都会要求给新创建的用户增加诸如“部门”、“电话”等自定义属性。

本文会介绍如何给 keycloak 中新创建的用户添加自定义属性,以及如何在前端中访问到这些属性。

给新用户添加自定义属性

首先通过类似下面的网址访问 keycloak

  • https://your_keycloak_ip/auth

如下图所示,点击 users 菜单

在这里插入图片描述
系统会呈现用户列表。选择某个用户,点击 edit
在这里插入图片描述
下图中是点击了 admin 用户的 edit 后,系统呈现的画面。然后选择 attributes,增加自定义属性。
在这里插入图片描述
如下图所示,添加了自定义属性后,选择 add,然后点击 save 完成自定义属性的添加。
在这里插入图片描述

在 client 里做 mapper

给用户添加了自定义属性以后,默认情况下这些属性不会包含在用户的 access token 里。我们需要给 keycloak 的 client 增加自定义属性和 token 中的 claim 之间的映射,让 keycloak 的 token 中包含我们定义好的自定义属性。

如下图所示,选择指定的 client 然后点击 edit 进行编辑。在本例中,我们的 client 的名称是 emsclient。
在这里插入图片描述
系统会呈现 emsclient 的详情。点击 mapper。
在这里插入图片描述
系统展示映射列表,点击 create 添加映射。
在这里插入图片描述
如下图所示,在选择映射类型 (mapper type) 时选择 user attribute来添加我们定义好了的用户属性。
在这里插入图片描述
按照下图推荐的流程把我们的自定义属性映射到 JWT token 里。
在这里插入图片描述
添加成功后,我们就可以检验。JWT token 里是否有我们需要的字段了。

下面是一个keycloak返回的 JWT token 的示例。可以看到最后的部分包含了我们自定义的“姓名”、“角色”、“电话”等属性 (attributes)。现在前端就可以通过 JWT 显示我们想要的用户信息了。

{
    "exp": 1692109592,
    "iat": 1692091592,
    "auth_time": 1692091570,
    "jti": "98c603b8-638f-49bd-9756-4a087c31fdc6",
    "iss": "https://172.26.196.47:30013/auth/realms/ems",
    "sub": "4a1d2352-5d42-45e1-843b-5ab31545aa94",
    "typ": "Bearer",
    "azp": "emsclient",
    "nonce": "2bb75e79-cd90-4fc0-8235-1425e69b6fa4",
    "session_state": "9397e3b2-f700-4eb1-8465-5c6dade0acd0",
    "acr": "0",
    
    "realm_access": {
      "roles": [
        "default-roles-ems",
        "offline_access",
        "admin",
        "energyManager",
        "uma_authorization"
      ]
    },
      "emsclient": {
        "roles": [
          "ems-admin",
          "ems-energy-manager",
          "ems-dashboard"
        ]
      },
      "broker": {
        "roles": [
          "read-token"
        ]
      },
      "account": {
        "roles": [
          "manage-account",
          "view-applications",
          "view-consent",
          "manage-account-links",
          "delete-account",
          "manage-consent",
          "view-profile"
        ]
      }
    },
    "scope": "openid profile email",
    "姓名": "能效管理员",
    "角色": "管理员角色",
    "email_verified": false,
    "电话": "13800138000",
    "preferred_username": "admin",
    "locale": "zh-CN"
  }

结论

本文详细介绍了如何通过 keycloak 的 user attribute 特性给 JWT token 增加自定义属性的功能。通过这个功能,我们就可以给 keycloak 用户添加我们想要的属性了。

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

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

相关文章

Android上架商城 隐私政策需要网页 没有怎么办

Android开发的项目上架商城的时候会需要你填写url,但其实并不需要真的去发布一个网站 使用腾讯文档新建文档 填写隐私政策 点击生成网页 再将网址填写即可 下面我找到的一个隐私政策文档供大家参考 将XXXX应用一键替换为自己的应用 将XXXXXX公司一键替换为公司 …

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

记一次触发器拦截更新操作

1、背景 业务上有一张表记录仓库和经纬度的,正常情况不怎么做变更;业务反馈经常出现经纬度被更新的情况,操作人都是接口或者admin,人工运维后又会被接口/admin覆盖更新掉 2、过程 遇到这种情况,我的第一反应是定位代…

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多种类型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 与控制器之间的关系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 为什么要有headless?2…

.Net Core 动态加载和卸载程序集

从 .Net Core 3.0开始支持程序集的加载和卸载,在 .Net FrameWork中使用独立的应用程序域来实现同样的功能,.Net Core 不支持创建多个应用程序域,所以无法使用多个应用程序域来实现程序集动态加载和卸载。 AssemblyLoadContext 程序集加载上下…

Antd的日期选择器中文化配置

当你使用antd的日期选择器后,你会发现日期什么都是英文的:即便你已经在项目中配置了中文化: 我确实已经配置了中文化: 但是为啥没生效?官网回答:FAQ - Ant Design dayjs中文网: 安装 | Day…

宝塔部署阿里云盘webdav

安装Docker 我的系统是CentOS8,如果直接安装会出错,可以看这篇文章:Failed to download metadata for repo ‘appstream‘ docker 国内镜像: http://hub-mirror.c.163.com/下载镜像 宝塔安装docker管理器,然后搜索…

深入了解IP地址查询的几种方式

随着互联网的发展,IP地址已经成为网络世界中不可或缺的部分。而准确地了解IP地址的来源和所属地区,对于网络安全和数据分析等方面具有重要意义。本文将介绍几种常见的IP地址查询方式,帮助读者深入了解IP地址的查询方法。 WHOIS查询 WHOIS查询…

VMware 安装 Centos7

VMware 安装 Centos7 1、首先,下载我们需要安装的 Centos7 镜像 链接:https://pan.baidu.com/s/1-O5nc4OwQye_yvzTCHeyvg 提取码:88882、打开VMware,点击新建虚拟机 3、选择典型,点击下一步 4、选择Centos7 iso文件镜…

实验二十九、正弦波变锯齿波电路

一、题目 将峰值为 1 V 1\,\textrm V 1V、频率为 100 Hz 100\,\textrm{Hz} 100Hz 的正弦波输入电压,变换为峰值为 5 V 5\,\textrm V 5V、频率为 200 Hz 200\,\textrm {Hz} 200Hz 的锯齿波电压。利用 Multisim 对所设计的电路进行仿真、修改,直至满足…

什么是主数据管理?企业主数据管理方法论

什么是主数据管理? 主数据又被称为黄金数据,其价值高也非常重要。对企业来说,主数据的重要性如何强调都不为过,主数据治理是企业数据治理中最为重要的一环。主数据管理的内容包括 主数据管理标准、主数据应用标准 和 主数据集成服…

虚拟化和容器化

目录 一. 虚拟化和容器化的概念 什么是虚拟化、容器化 案例 为什么要虚拟化、容器化? 二. 虚拟化实现方式 应用程序执行环境分层 虚拟化常见类别 虚拟机 容器 JVM 之类的虚拟机 三. 常见虚拟化实现 主机虚拟化(虚拟机)实现 容器虚拟化实现 容器虚拟化实现原理 容器…

JDK19 - 虚拟线程如何进行业务代码的改造

JDK19 - 虚拟线程如何进行业务代码的改造 一. 线程池的改造二. for 循环同步代码块改造2.1 自动关闭资源会等待所有异步任务执行完毕吗? 一. 线程池的改造 假设我们的代码中,原本是这样使用线程池的: public static ExecutorService getThr…

套接字类型,地址族,数据序列

Socket: 1.套接字中使用的协议族 2.套接字数据传输类型信息 3.计算机间通信中所使用的协议信息 PF_INET协议族中, 符合SOCK_STREAM的只有一个: tcp 所以第三个参数为0 UDP同理 TCP套接字: 可靠的,按序传递的,基于字节的面向连接的数据传输方式的套接字 :tcp套接字数据不存在边…

前后端分离------后端创建笔记(10)用户修改

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式(Composite Pattern)含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例(公司的OA系统) 1、组合模式(Composite Pattern)含义 组合模…

短剧cps分销系统源码搭建 短剧cps系统开发 短剧项目怎么做

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、短剧是什么?二、短剧项目怎么做?三、总结 前言 短剧分销系统: 对接他人短剧小程序片源,仅推广分销。用户看…

Docker基础概述

目录 ​编辑 一、Docker简介 二、 Docker与虚拟机的区别 1.1namespace的六项隔离 二、Docker核心概念 2.1镜像 2.2容器 2.3仓库 三、安装Docker 3.1查看 docker 版本信息 四、Docker 镜像操作 4.1搜索镜像 4.2获取镜像 4.3镜像加速下载 4.4查看镜像信息 4.5根据…

FL Studio 2023年正式更新到发布21.1新版!功能介绍

很高兴地宣布在去年12月发布重大版本更新后,FL Studio在2023年8月正式更新到21.1版。本次更新虽然只是维护性质,但我们还是为大家带来了一些全新的功能,包括通过钢琴卷中的音阶捕捉和自定义音符工具,引入更快、更有创意的音符编辑…

救生艇(力扣)贪心 JAVA

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。 示例 1: 输入&#xff…