keycloak 注册成功后回调(KeycloakRESTAPI调用)
keycloak 注册成功后回调(KeycloakRESTAPI调用)
2024-11-23 12:46:22  作者:一樹桃花  网址:https://m.xinb2b.cn/life/rru133726.html
概述

所有Keycloak控制台提供的功能,都能通过REST API来实现。要调用API,需要获得具有适当权限的访问令牌。访问令牌可以通过用户名/密码方式授权获取,也可以通过服务账号方式授权获取。

Keycloak提供的rest API列表可以在管网中查看,如下:https://www.keycloak.org/docs-api/16.0/rest-api/index.html#_users_resource

用户名密码授权获取Token


cURL如下:

curl --location --request POST 'http://localhost:8180/auth/realms/master/protocol/openid-connect/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--header 'Cookie: JSESSIONID=6FCFD67D3063CFE0A443BD7B161601A5.f64bbac2c4cd; JSESSIONID=68D613089536D5B8224A32DA64E0909A' \--data-urlencode 'client_id=admin-cli' \--data-urlencode 'username=admin' \--data-urlencode 'password=admin' \--data-urlencode 'grant_type=password'

注意:

这里使用的是默认的master realm,admin-cli是master realm中的默认client。默认生成的Token有效期只有60s,可以在client的Settings Tab页的Advanced Settings部分修改,如下:


调用服务

将获取的access_token抠出来,放入请求头中,调用REST API,如下


cURL如下:

curl --location --request GET 'http://localhost:8180/auth/admin/realms/SpringBoot/users' \--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4Wm9XTzM0MUdNTXE5WGV2bFhCbTdTLUg4RDViOTQ4ZDA4cWxjdXhKV3k0In0.eyJleHAiOjE2NTExNTA5MzMsImlhdCI6MTY1MTE1MDMzMywianRpIjoiMDIxNTZkYzMtYzBhMi00MTVkLTk5MDMtMWU0NGM5ZDVjODkxIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MTgwL2F1dGgvcmVhbG1zL21hc3RlciIsInN1YiI6IjA5Y2Q1ZDQ5LTA5MDctNDQ2Zi1hZWYxLWFiNDhiODJiNDYzNyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLWNsaSIsInNlc3Npb25fc3RhdGUiOiIwMjJiZmNkNy0wYWIwLTQwNjQtYTYwNC05OWU5ODNhZjA1ZjMiLCJhY3IiOiIxIiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiJ9.UGM5rtvWZdaSDOXPosYEmJSCtO2D1E_uo8Z6k5-pk57DK7_hgLk_CYzv4kw8gpc-Om8SZPx2f8T9ey9wqZ1fcxe2cilViGMjphuAOySBB8UnXOoeCvSAj9lT8Td2upVL3dolMJ7WmQgmvh1Et_rn0uYUDiuOKUzBYmYwfwFMajWkiHPxtmrXPMfvRom5wpaYzQJGdqBzho9WKmVjQpQ7P62CYnWIk-Vg31CTurPh-wUSb66d4XWvs3cJjpOhPaGox1y5YsJdPSJecK2cji49fhogjK888aXELJnMlJijKoQyi5ZF_L3Q3NIrF_72og8QxOJG1DOaSkSIilBTOWGuFQ' \--header 'Cookie: JSESSIONID=6FCFD67D3063CFE0A443BD7B161601A5.f64bbac2c4cd; JSESSIONID=68D613089536D5B8224A32DA64E0909A'

服务账号授权前提条件

在使用client_id和client_secret对Admin REST API进行身份验证之前,需要确保client配置满足如下条件:

client必须创建在master realm中client的Access Type必须是confidential类型client必须已启用“Service Account”选项client具有一个自定义的“Audience” Mapper包括 Client Audience: security-admin-console确保client的"Service Account Roles" tab页中配置了admin角色环境准备

我们这里配置一个满足条件的client。直接使用master中为自定义realm创建的client,如下:


这里使用SpringBoot-realm,已经是在master realm中了。查看其Access Type,如下:


Access Type必须选择confidential,并且打开Service Accounts Enabled选项。进入Mappers tab页,确保配置了“Audience” Mapper,如下:


如果没有,点右上角创建一个,如下:


进入"Service Account Roles" tab页,添加admin角色,如下:


获取Token


cURL如下:

curl --location --request POST 'http://localhost:8180/auth/realms/master/protocol/openid-connect/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--header 'Cookie: JSESSIONID=6FCFD67D3063CFE0A443BD7B161601A5.f64bbac2c4cd; JSESSIONID=68D613089536D5B8224A32DA64E0909A' \--data-urlencode 'client_id=SpringBoot-realm' \--data-urlencode 'client_secret=bc22a5c9-5f7a-44f2-abb5-cff0deab037e' \--data-urlencode 'grant_type=client_credentials'

此时grant_type是client_credentials,而不是password,这样就不会泄漏管理员的账号密码了

调用服务

同上

Java API

KeyCloak提供了Java SDK,方便调用REST API

依赖

<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-admin-client</artifactId> <version>${keycloak.version}</version></dependency><dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version></dependency>

主要是keycloak-admin-client这个依赖

单元测试通过管理员账号密码调用

@Testpublic void listUsers1() { Keycloak keycloak = Keycloak.getInstance( "http://localhost:8180/auth", "master", "admin", "admin", "admin-cli", "13777dab-59da-4781-bd6e-bad4813459b9" ); List<UserRepresentation> users = keycloak.realm("SpringBoot") .users() .list(); System.out.println(users); for (UserRepresentation user : users) { System.out.println(user.getUsername()); }}

注意,这里Keycloak.getInstance()方法中传入的realm参数是master realm,而不是我们创建的自定义realm;下面通过Keycloak实例访问资源时方法realm()中传入的才是创建的自定义realm

省略clientSecret参数

@Testpublic void listUsers2() { Keycloak keycloak = Keycloak.getInstance( "http://localhost:8180/auth", "master", "admin", "admin", "admin-cli" ); List<UserRepresentation> users = keycloak.realm("SpringBoot") .users() .list(); System.out.println(users); for (UserRepresentation user : users) { System.out.println(user.getUsername()); }}

通过admin-cli也能省略clientSecret参数

通过token访问

也可以先过去到token,然后使用token访问rest api,如下:

@Test public void listUsers3() { Keycloak keycloak = Keycloak.getInstance( "http://localhost:8180/auth", "master", "SpringBoot-realm", "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4Wm9XTzM0MUdNTXE5WGV2bFhCbTdTLUg4RDViOTQ4ZDA4cWxjdXhKV3k0In0.eyJleHAiOjE2NTExNTMwMzgsImlhdCI6MTY1MTE1MjQzOCwianRpIjoiZTE1YzM0OWItZDkwMS00YTNmLWIxMmItOGFhNjIzOTk3YTBkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MTgwL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6WyJzZWN1cml0eS1hZG1pbi1jb25zb2xlIiwibWFzdGVyLXJlYWxtIiwiYWNjb3VudCJdLCJzdWIiOiI2MmU2YTBlNy1mMzI3LTRmMjktODMzYi1iMjM3MWYxYjhmMDgiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJTcHJpbmdCb290LXJlYWxtIiwic2Vzc2lvbl9zdGF0ZSI6IjY4MDgzOWZlLWNhNzYtNGMxNS05NGNiLTJhZDYxMmMwYTcxMyIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiY3JlYXRlLXJlYWxtIiwib2ZmbGluZV9hY2Nlc3MiLCJhZG1pbiIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiU3ByaW5nQm9vdC1yZWFsbSI6eyJyb2xlcyI6WyJ2aWV3LXJlYWxtIiwidmlldy1pZGVudGl0eS1wcm92aWRlcnMiLCJtYW5hZ2UtaWRlbnRpdHktcHJvdmlkZXJzIiwiaW1wZXJzb25hdGlvbiIsImNyZWF0ZS1jbGllbnQiLCJtYW5hZ2UtdXNlcnMiLCJxdWVyeS1yZWFsbXMiLCJ2aWV3LWF1dGhvcml6YXRpb24iLCJxdWVyeS1jbGllbnRzIiwicXVlcnktdXNlcnMiLCJtYW5hZ2UtZXZlbnRzIiwibWFuYWdlLXJlYWxtIiwidmlldy1ldmVudHMiLCJ2aWV3LXVzZXJzIiwidmlldy1jbGllbnRzIiwibWFuYWdlLWF1dGhvcml6YXRpb24iLCJtYW5hZ2UtY2xpZW50cyIsInF1ZXJ5LWdyb3VwcyJdfSwibWFzdGVyLXJlYWxtIjp7InJvbGVzIjpbInZpZXctcmVhbG0iLCJ2aWV3LWlkZW50aXR5LXByb3ZpZGVycyIsIm1hbmFnZS1pZGVudGl0eS1wcm92aWRlcnMiLCJpbXBlcnNvbmF0aW9uIiwiY3JlYXRlLWNsaWVudCIsIm1hbmFnZS11c2VycyIsInF1ZXJ5LXJlYWxtcyIsInZpZXctYXV0aG9yaXphdGlvbiIsInF1ZXJ5LWNsaWVudHMiLCJxdWVyeS11c2VycyIsIm1hbmFnZS1ldmVudHMiLCJtYW5hZ2UtcmVhbG0iLCJ2aWV3LWV2ZW50cyIsInZpZXctdXNlcnMiLCJ2aWV3LWNsaWVudHMiLCJtYW5hZ2UtYXV0aG9yaXphdGlvbiIsIm1hbmFnZS1jbGllbnRzIiwicXVlcnktZ3JvdXBzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6IlNwcmluZ0Jvb3QtcmVhbG0iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjEuMC4xIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LXNwcmluZ2Jvb3QtcmVhbG0iLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIxLjAuMSJ9.rrS3b6K0W6kvIc-MrIMd-Y3H7PWr732BTDIavLx0gqAfjZ_pr46o_IAuPbDzN8lwWEjiWXeWlAE6YvTiEve_X0o7ByrqhzcU1CSEsHbk_yOqNsJ58cSaEQ8yLoPvr4ME4bwYXGjUQfn4CjgwvKMlWZKbfTa4LUCIsZmW6_azxgx1t7-48w0_I0n_3JLbyQQKN-Ji0WzEpgJt5fK89zgU4uZGOLHOIRjAxBaG8DxiDlkramN94scZ9GYTh636mepFNc56BIG1xsWOUsaU_slexx7Wd6jUsr2T_jTsRjp5bRErLhHIw2cXZkb-RXMjTbhaQbIaQMiJkU-RZjRWEjgpNQ" ); List<UserRepresentation> users = keycloak.realm("SpringBoot") .users() .list(); System.out.println(users); for (UserRepresentation user : users) { System.out.println(user.getUsername()); } }

源码

https://github.com/ywu2014/keycloak-demo/tree/master/keycloak-rest-api

  • 初中生叛逆厌学怎么治(初中生厌学难于管教)
  • 2024-11-23初中生厌学难于管教随着中考的分流,在初中阶段会有一种现象从初一就开始显现,这便是有一部分孩子逐渐出现厌学现象,到了初二时这种现象达到了峰值很多家长特别不理解,孩子在小学阶段还不错,为什么到了初中就如此难管教?事实上,厌。
  • 适合猫咪看的电影 这10部关于猫的影片你都看过吗
  • 2024-11-23适合猫咪看的电影 这10部关于猫的影片你都看过吗铲屎官们,你们知道嘛?8月8日是国际猫咪日!有没有给猫主子过节呢?今天,周到君为你精选了10部关于猫的影片,有真实事件改编的《流浪猫鲍勃》、也有关于喵星人的纪录片《猫咪物语》、还有十分重口味的《猫汤》。
  • 蒸饭用什么锅好用(蒸饭可以用什么锅)
  • 2024-11-23蒸饭可以用什么锅蒸饭可以用高压锅,用高压锅蒸米饭不仅不会糊锅底,蒸饭的速度也是非常的快用高压锅蒸米饭利用冷水排气降压,可以让米饭不粘锅底,还要注意蒸米饭时的火候要适中,水的比例也要确定好,这样才能保证米饭蒸出来的口感。
  • 留白的设计美学(首发.李一设计)
  • 2024-11-23首发.李一设计材料的特性,建筑的空间和空间的装饰,在设计而言,是三位一体的——赖特作为国内最具规模的高定木作企业之一,奢悦总部展厅的设计是其品牌战略和商业路径的重要载体,品牌方找到了李一设计师事务所来进行展厅的规划。
  • 油腻食物包括哪些(油腻食物介绍)
  • 2024-11-23油腻食物介绍油腻食物是指脂肪和胆固醇含量高的食品凡在烹调中使用过量食品油调理的均可归于油腻食物,因为这些食品藏有大量油脂因为其中油脂太大,所以可称为:油炸食品(油条)、油煎食品、红油调拌食品月饼也属于油腻之物,因。
  • 黄日华61岁生日会(黄日华停工照顾血癌复发的病妻)
  • 2024-11-23黄日华停工照顾血癌复发的病妻我们熟悉的乔峰大侠黄日华近日被曝妻子梁洁华疑似血癌复发再次住进了医院,传黄日华已经全面停工照顾妻子记者还拍到了现身医院的黄日华,戴着口罩,但看出来十分憔悴啊不过之后黄日华告诉媒体,妻子只是例行的检查,。
  • 西小河的夏天充满悠闲感 西小河的夏天那年夏天
  • 2024-11-23西小河的夏天充满悠闲感 西小河的夏天那年夏天即便你看完了整个电影,如果不去翻相关的介绍,可能也不知道为啥电影名叫《西小河的夏天》听到这个名字时,估计很多人的第一反应会和我一样:《西小河的夏天》?是不是主角叫“西小河”,就和《菊次郎的夏天》一样?。
  • 比较奇特的梦(揭秘神秘的梦)
  • 2024-11-23揭秘神秘的梦一梦,目前还似乎是个世界未解之谜!但,梦,又伴随着每个人的一生,成为了每个人生命的一部分而且,很多动物也会做梦有人说,梦是一封没有翻译的远古来信各个民族,各个宗教,众多的科学家心理学家,都有对梦的研究。
  • 广西白话和广东话的区别(常被忽视的广西粤语)
  • 2024-11-23常被忽视的广西粤语中国是一个相当独特的国家,中华民族的主体——汉民族分布广泛,但无论远在东北或者南至海南都有着高度的文化统一性和认同性;但另一方面,中国各地的地方文化差异性也十分之大拿最基础的语言来说,尽管现在中国人基。
  • 杨玉环保持身材(环肥燕瘦是说杨玉环胖胖的很美吗)
  • 2024-11-23环肥燕瘦是说杨玉环胖胖的很美吗都说环肥燕瘦,环指的是杨玉环,燕指的是赵飞燕,环肥燕瘦是说杨玉环胖胖的很美,赵飞燕瘦瘦的也很美氮素,很多女的就开始意淫了,杨贵妃是个大胖子,我要穿越回唐朝,我也是胖美人啊!你造吗?你很傻很天真哎!!!。
  • 女生叫你哥哥是什么心理(女人叫你哥哥)
  • 2024-11-23女人叫你哥哥文丨西厢有情时光不长,愿你在我的文字里,相见不晚!现如今这个社会,称呼已经不仅仅是一个拉近关系的方式了在男女关系中,一个女人对你的称呼,其实就暗示了她对你的态度在与异性相处的过程中,总有些男人享受于被。