keycloak 注册成功后回调(KeycloakRESTAPI调用)
keycloak 注册成功后回调(KeycloakRESTAPI调用)
2024-11-07 11:31:58  作者:一樹桃花  网址:https://m.xinb2b.cn/sport/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-08一个让你拉屎又快又干净的方法俗话说,“十人九痔”,痔疮已经成为当代最常见的健康问题之一,得了痔疮:坐立难安,肛门又潮又痒,还不方便“动手”;甚至便便的时候,都疼得像在下刀子;拉完屎回头一看,马桶里除了便便还有血;......所以。
  • dnf搬砖的装备是分解还是卖掉(分解还是卖商店)
  • 2024-11-08分解还是卖商店本文来源:DNF助手,作者:猫幼地下城与勇士作为一款免费的游戏,小伙伴们可是玩的不亦乐乎在游戏中有一群称为豹子头的玩家,他们一直奋斗在地下城中,他们也拥有很多很多的肝,真正的肝帝永远奋斗在砖厂的一线,。
  • 奥运精神都指什么(奥运精神的另一种含义)
  • 2024-11-08奥运精神的另一种含义奥运会中国代表团激烈中带点惨烈的奥运会已经结束渐归于平静了但奥运会上的各种话题还在,运动员的各种成绩依然被热论,某某某创造了奥运纪录,某某某意外曝冷与金牌失之交臂,某某某的金牌数最多……然后各网媒争相。
  • 双性别恋是指什么(泛性恋与双性恋)
  • 2024-11-08泛性恋与双性恋泛性恋与双性恋泛性恋是指这样一类人,如果他们爱上一个人,就不会在乎对方的性别、性取向或生理性别是什么这是一种包容的身份认同,因为重要的是对方吸引人的地方是什么吸引一个人的地方也许会随着时间的推移而发生。
  • 深井谜案李现(小河神李现水陆探案)
  • 2024-11-08小河神李现水陆探案“九河下梢天津卫,三道浮桥两道关”源自大热网剧《河神》,这部灵异奇幻大剧由天下霸唱的小说《河神:鬼水怪谈》改编,一上线就掀起一波观看热潮,豆瓣评分一度破8,收视口碑双丰收8月3日,《河神》VIP剧集已。
  • 老公做哪些事可以促进夫妻感情(男人经常做这3件事)
  • 2024-11-08男人经常做这3件事每个男性都希望阴茎勃起时间长,这样才能延长性生活的时间,让女性能得到性生活上的满足,到底是什么引起的男性勃起时间不长引起男性勃起时间短的因素有哪些?男性出现包皮过长或者包茎、总是穿紧身的裤子会对阴茎头。
  • 山西晋剧团完整版 新华全媒山西
  • 2024-11-08山西晋剧团完整版 新华全媒山西新华社太原2月3日电题:山西:一个晋剧团的“忙年”新华社记者王菲菲、王怡静武凌云扮演的关公登场了,红脸长髯、手握青龙偃月刀的关羽伴着鼓点,展示着令人叫绝的髯口功、大刀功,引得满场喝彩日前,山西太原市迎。
  • 现实感悟人生句子
  • 2024-11-08现实感悟人生句子1.放下的都是过往,提起的都是现实,无奈我们都是为了可以更好的生活2.严峻的现实生活最能教育人,它使人减少了一些狂热,而增强了一些自我反省的力量3.生活啊,生活!有时候它把现实变成了梦想,有时候它又把。
  • 关于约会的说说(盘点关于约会的说说)
  • 2024-11-08盘点关于约会的说说不要让那些真正对你好的人,慢慢的从你的生活中消失,无论爱情还是友情,都需要经营爱情是浪漫的;亲情是温暖的;友情是可靠的;心情是愉悦的;情是难以捉摸的!每当我看到树上的情侣名字我从来不会觉得浪漫,我觉得。
  • 高茶杂多肉怎么养
  • 2024-11-08高茶杂多肉怎么养高茶这种多肉无论从株型还是叶形来看,都跟淡雪几乎一模一样,只不过状态更好一些而已,但若是我们气候环境不好,或者养护环境光照较差的话,那再漂亮的高茶最后也会养成淡雪所以我个人觉得高茶实际上就是控养或者出。
  • 雾霾严重的现实环境对比一下(为什么近几年雾霾越来越严重)
  • 2024-11-08为什么近几年雾霾越来越严重首先,要搞清楚什么是雾霾?什么是厄尔尼诺现象?雾霾的科学解释是可呼吸颗粒物,PM2.5像雾里面存在霾非科学解释,也就是从个人观点来说,雾霾主要是气候变化造成的雾霾本身是两个概念,即两种物质混合就会增加。
  • 针织衫怎么穿不老气(秋天毛衣怎么穿不老气)
  • 2024-11-08秋天毛衣怎么穿不老气气温下降让我们在穿衣打扮上的需求发生变化,很多人都更加注重舒适和保暖在买衣服时,毛衣成为了普通大众的优先选择毛衣能够满足我们对温度的追求,而且特别实用,对于一些实用、保暖至上的中年女人,可太友好了不过。