keycloak 注册成功后回调(KeycloakRESTAPI调用)
keycloak 注册成功后回调(KeycloakRESTAPI调用)
2024-11-22 01:09:21  作者:一樹桃花  网址: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-22关于红薯淀粉和玉米淀粉的区别介绍红薯淀粉和玉米淀粉的外观区别,首先,对于红薯淀粉和玉米淀粉来说,他们在外观上面的区别还是比较明显的,虽然二者都是呈现出粉末状,但是红薯淀粉会略微带有一定的红黄相间的颜色,而玉米淀粉则更多的是呈现出黄色。
  • 环境噪声污染防治法45条解读(噪声污染那些事儿)
  • 2024-11-22噪声污染那些事儿​什么是噪声?噪声污染无孔不入已经成为影响居民日常生活的主要破坏者环境噪声分哪几类?如何参与噪声污染防治?……这些你都知道吗?噪声和噪声污染噪声是在一定环境中不受欢迎的声音,可以有许多来源——人的发声。
  • 员工手册文档教学(员工手册三)
  • 2024-11-22员工手册三劳动管理5.1工作时间公司员工工作和休息时间按劳动法规定执行倒班员工实行四班三运转制,具体时间安排以公司生产部通知为准行政办公人员作息时间5月1日至9月30日执行夏季工作时间,10月1日至4月30日执。
  • 属羊的吃羊肉好不好(羊年你吃羊肉了吗)
  • 2024-11-22羊年你吃羊肉了吗撰文:CatherineZuckerman为庆祝中国农历羊年,新加坡的桥北路和余东旋街上挂满山羊形和金币状的灯笼摄影:ChooYutYin眼下仍是中国农历新年羊年,热闹的聚会、美丽的烟花和可口的美食仍。
  • 乐高的类型编码有哪些
  • 2024-11-22乐高的类型编码有哪些最常见的是4位数编码,这个是通常lego套装的编码再来就是5位数,这个是用于特殊的套装,极具收藏和纪念意义,有时候只能在Hardtofind里面去找了接着是特殊的5位数,以“2,3,4,6”开头这个是。
  • 2023款宝马x5报价及图片(售价61.5-80万元)
  • 2024-11-22售价61.5-80万元2023款宝马X5上市售价61.5-80万元——外观部分——标配车型配备20英寸轮圈前轮胎规格为275/45R20后轮胎规格为305/40R20中高配车型配备21英寸轮圈前轮胎规格为275/40R21。
  • 春晚中的榜样人物(上完春晚下现场)
  • 2024-11-22上完春晚下现场津云新闻讯:1月25日大年初一,“时代楷模”“改革先锋”“最美奋斗者”、国网天津滨海公司配电抢修班班长张黎明从央视春晚返回天津,按照既定工作安排前往工作现场,继续开展配网带电作业机器人迭代研发、春节期。
  • 海蛎饼最正宗的做法(霞盛菜市场的原味海蛎饼)
  • 2024-11-22霞盛菜市场的原味海蛎饼位于霞盛菜市场(诚丰世纪园正对面)的这家早餐店其实开的时间并不是很长,粗粗算来,大约只有一个年头的样子大概只是租借这家“阿斌饭店”门口的小摊位,这个早点摊没有专门的店面,没有专门的名称,只是简简单单的。
  • 庆祖国华诞书法作品(长春青年大学生着汉服写书法)
  • 2024-11-22长春青年大学生着汉服写书法董洪志开笔书写“我和我的祖国”柴家权摄董洪志开笔书写“我和我的祖国”柴家权摄中新网长春9月27日电(柴家权)27日,在长春理工大学运动场,70名身着汉服的大学师生在数字“70”形状排列的桌案前挥毫泼墨。
  • 为什么刘德华演唱会是李好主持的(江苏台一哥李好引争议)
  • 2024-11-22江苏台一哥李好引争议饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!9月4日,江苏台主持人李好被吐槽上了热搜,他在刘德华演唱会上的表现让不少网友怀疑他的主持能力,还被批太不专业事情的起因是在3日晚,刘德华举办。
  • 简历投递处理中什么意思(简历投递后显示的已送达)
  • 2024-11-22简历投递后显示的已送达怎么全是已到达、已查收、已查阅???到底什么意思啊?什么时候才能有面试啊?什么时候才能找到工作啊???……小编也不知道但……小编知道,如果不是正巧赶上了机会,那投递简历、等待面试、等待反馈的过程一定是。
  • 资生堂cpb系列产品(深扒资生堂CPB值得买的10款好物)
  • 2024-11-22深扒资生堂CPB值得买的10款好物小可爱们晚上好今天的品牌课堂小美给大家扒一扒资生堂家的高端线CPB他家的护肤和彩妆系列让真爱粉们欲罢不能而且每年出的节日限定和艺术家合作款都是要让人挤破头都想入手不单单如此虽然价格emmm...但是用。