keycloak 注册成功后回调(KeycloakRESTAPI调用)
keycloak 注册成功后回调(KeycloakRESTAPI调用)
2024-09-20 10:37:22  作者:一樹桃花  网址: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

  • 魔都上海好去处(盘点26个上海市区周末好去处)
  • 2024-09-21盘点26个上海市区周末好去处本文由什么值得买用户原创:叮当小丸子看了下目前我在大妈家发的原创,几乎都是出去玩的,好像自己的确太贪玩了.......不过想了想,如果要写些什么东西来记录我(pian)的(xie)生(jin)活(bi。
  • 为什么黑龙江大庆房价这么低(黑龙江大庆楼市的危机)
  • 2024-09-21黑龙江大庆楼市的危机南北城市化的发展,推动了人口迁徙化,对于黑龙江省来说过去10年时间,这个区域的人口流出超过了600万人,是全国所有省份当中流出最多的一个省份其实黑龙江也有很多很不错的城市,省会城市,哈尔滨更是东北地区。
  • 庐山云雾茶十大名茶(美食非遗庐山云雾茶)
  • 2024-09-21美食非遗庐山云雾茶庐山云雾茶庐山云雾茶,香气清高滋味鲜爽,成功是中国名茶系列之一庐山云雾茶最早是一种野生茶,经历代庐山人努力,将野生茶改造为了家生茶由于受庐山凉爽多雾的气候及日光直射时间短等条件影响,庐山云雾茶形成其叶。
  • 无人核潜艇作战(潜射无人机潜艇的)
  • 2024-09-21潜射无人机潜艇的以色列“鹰鸮”-103潜射无人机美潜射无人机发射示意图随着以色列长矛无人机公司公布其新型无人机“鹰鸮”-103,有关潜射无人机的话题在网上再次引起热议“可以飞行的潜望镜”“潜艇的‘第三只眼’”等一连串。
  • 耳鸣是肾虚不好吗(耳鸣一定是肾虚吗)
  • 2024-09-21耳鸣一定是肾虚吗现代人压力大、焦虑、生活不规律、纵欲,因辐射、过劳而出现耳鸣的的人越来越多了,越来越年轻化了去医院治疗,西医根本没招儿,中医医生绝大多数都说是肾虚,真的是这样吗?从中医上论,太阳小肠经经气不足加上心情。
  • 有肝病的人可吃的水果(肝病患者吃这一种水果)
  • 2024-09-21肝病患者吃这一种水果木瓜属于热带水果,它外皮黄绿,果肉橙红,味道香甜多汁,是很多人最爱的水果之一在一次世卫评比出的健康食品排行榜中,木瓜独占鳌头,以其丰富的营养价值,有效的保健功能,位列榜首木瓜有很高的营养价值木瓜含有木。
  • 老年人吃什么降胆固醇最快(胆固醇排行榜前十名的食物)
  • 2024-09-21胆固醇排行榜前十名的食物胆固醇又称胆甾醇,是动物组织细胞所不可缺少的重要物质;它不仅参与形成细胞膜,而且是合成胆汁酸,维生素D以及激素的原料所以胆固醇并非是对人体有害的物质胆固醇还是临床生化检查的一个重要指标,在正常情况下,。
  • 盆栽草莓冬天种植方法(盆栽草莓选择四季品种)
  • 2024-09-21盆栽草莓选择四季品种种草莓,选择四季品种!草莓无论是花朵还是果实都十分漂亮,在花盆中种植后,可以一边近距离地观赏,一边享受种植的乐趣但是,如果是从播种开始种植的话,需要经过1年的时间,等到第二年春天才能收获所以,阳台种植。
  • 达拉然地牢3只羊开启(7.0达拉然点灯匠效果更新)
  • 2024-09-217.0达拉然点灯匠效果更新在由克里斯蒂·高登撰写的魔兽世界官方小说《战争之潮》中我们了解到了塞拉摩的毁灭,并且在《熊猫人之谜》前夕补丁里还以场景战役的形式在游戏中目睹了整个过程在小说中,金迪·火花是达拉然点灯匠温德尔·火花的女。
  • 韭黄饺子怎么和馅(韭黄鸡蛋馅饺子)
  • 2024-09-21韭黄鸡蛋馅饺子今天我给大家分享的是家常韭黄鸡蛋馅饺子的制作方法,仅供大家参考所需食材:主材料:韭黄、鸡蛋、葱调味料:盐、食用油、花椒粉、十三香1.首先把韭黄挑拣后清洗干净,再沥干水分(这里一定要把水分沥干哦)3.鸡。
  • 张译演技令人叹为观止(张译的演技绝了)
  • 2024-09-21张译的演技绝了张译已然是大伽,只是低调,内敛,谦虚,专一,毫不张扬,不忘初心的为人处事之道稍稍掩盖了他本该耀眼的光芒[比心]喜欢张译,独一无二的张译每个人有每个人的活法每个人有每个人的价值张译走得就是艺术家的路[赞。