keycloak 注册成功后回调(KeycloakRESTAPI调用)
keycloak 注册成功后回调(KeycloakRESTAPI调用)
2024-11-25 06:17:47  作者:一樹桃花  网址:https://m.xinb2b.cn/tech/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-25别拦着您的孩子成长时间一天天流逝,孩子一天天长大,您一定要问了哪来的拦着让孩子长大这样的说法呢!听我慢慢道来!也不知道大家听说过没有,开悟的人父母缘浅您又要问了,开悟的人什么事都想的开,看的开,怎么可能跟父母的关系处理。
  • 关爱来自星星的孩子文章(关爱来自星星的孩子文章范文)
  • 2024-11-25关爱来自星星的孩子文章范文在我们的生活里,有一群特殊的孩子他们与普通孩子有些许不同,他们虽然生活在我们身边,却又与周围人格格不入,他们沉浸在自己的世界里,仿佛星空一样遥远,很难走进他们的内心世界他们有着明亮清澈的双眼,你却无法。
  • 洗烘一体机实际使用感受(洗烘一体机持续走俏)
  • 2024-11-25洗烘一体机持续走俏[钉科技说产品]洗衣机市场回暖态势显现,同时,而洗烘一体机是动力之一根据奥维云网(AVC)监测数据,2020年上半年,洗烘一体机线下零售额占比达到46.6%,线上占比为28.9%不过,钉科技浏览电商平。
  • 肖战的古装是最帅的(肖战最新古装造型曝光)
  • 2024-11-25肖战最新古装造型曝光肖战再一次凭借古装造型上了热搜!就是这张有腾讯出品,肖战主演的《玉骨遥》,饰演时影一角!单单是一个侧脸的半身照,就给人一种温润如玉翩翩的儒雅公子之风,从头上的饰品再到手中的书卷,配上这一身白衣,静坐在。
  • 教师节学生都在送花(教师节你送花了吗)
  • 2024-11-25教师节你送花了吗#头条创作挑战赛#今天是教师节,我儿子昨天就让我买花,他要送给老师这我还是第一次买花送给老师,毫无经验,也不知道送什么花好向日葵适合送人,送给喜欢的男孩子代表了阳光与活力,它同样也适合送给自己敬仰的人。
  • 点刹怎么操作(点刹适合什么时候)
  • 2024-11-25点刹适合什么时候就是先踩一点刹车,感觉车明显减速时,松刹车(不要松完),在感觉车快没刹车抑制它时,再踩刹车,就这样反复循环“点刹”和ABS的工作原理基本一样,但是并不等于ABS,因为ABS可以通过电脑运算,分配四个轮。
  • 冰雪聪明的意思是什么(冰雪聪明成语出处)
  • 2024-11-25冰雪聪明成语出处冰雪聪明意思是:比喻人聪明非凡,冰雪乃是圣洁之物,古人常常用来形容美丽,并且有着高尚纯洁道德情操的人,后人便常借杜甫的诗,用来形容人聪明非凡的意思冰雪聪明,汉语成语,拼音是bīngxuěcōngmin。
  • 虐心又受虐肝的四部泰剧(堪称开年解压第一神剧梨泰院)
  • 2024-11-25堪称开年解压第一神剧梨泰院给大家推荐一部解压神剧,是2020年第一爽剧——《梨泰院class》!有人把梨泰院叫做“小地球村”,在这里能遇见全世界另外,梨泰院区亦是汉江以北最著名的豪宅区,不少财阀都住在此处,比如三星集团现任会长。
  • 佛手瓜怎么炒好吃方法(佛手瓜好吃的做法介绍)
  • 2024-11-25佛手瓜好吃的做法介绍准备材料:佛手瓜2个、猪肉片100克、泡发好的木耳50克、盐、鸡精、色拉油、香油、葱姜沫各适量佛手瓜去皮和核,然后切成菱形小块;锅到油预热,葱姜爆香;放入猪肉片翻炒,再放入佛手瓜片木耳同炒,八分熟加入。
  • 韩娱绿头发(韩娱又出了一部)
  • 2024-11-25韩娱又出了一部嘿,辣条陪你唠嗑最近韩娱又出了一部“大尺度”剧目,为什么说大尺度呢?因为又一次自黑出了新高度电视剧开局就直接讽刺韩国国家zz,总统是财阀与政客手中的棋子,他们想让谁担任就让谁担任该做什么不该做什么,被。
  • 现在快出的5g手机值得买吗(首批5G手机都有哪些坑)
  • 2024-11-25首批5G手机都有哪些坑在去年的这个时候,提起5G人们似乎觉得还很遥远仅仅一年不到的时间,部分地区已经实现了5G网络覆盖,5G手机接踵而来,5G时代真的来了!如果我告诉你,如今不到5000元就可以买到一款大品牌的旗舰5G手机。
  • 穿这个鞋上街回头率高(颜值在线出街有面)
  • 2024-11-25颜值在线出街有面之前有朋友问我,想让我给一点适合日常出街用的,好看的鞋子所以,今天老魏就来给朋友们推荐一下,有哪些适合出街压马路的颜值选择NewbalanceMS515作为复古跑鞋的经典代表品牌,怎么可以少得了New。