如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌
Posted
技术标签:
【中文标题】如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌【英文标题】:How to request JWT Token from KeyCloak via Java/Kotlin API 【发布时间】:2020-08-14 11:11:35 【问题描述】:我想要的是在单元测试中来自我的 KeyCloak-Server 的 JWT-Token 来测试我的 Rest-API
如何通过 Java-API 检索 JWT-Token??? 我知道有“已安装的适配器”https://github.com/keycloak/keycloak/blob/master/adapters/oidc/installed/src/main/java/org/keycloak/adapters/installed/KeycloakInstalled.java
但是这个适配器只能通过浏览器或命令行登录。
我正在寻找类似 MyAdapter.login(username, password)
【问题讨论】:
【参考方案1】:在下面找到可用于测试的代码。
代码基本上是调用 OIDC token 端点来检索访问令牌。
假设有一个名为 tester1 的用户只能使用密码登录。
客户端还需要密码。但客户端也可以配置为无需密码即可工作。
// data for token request
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("grant_type", "password");
params.add("client_id", "yourclient");
params.add("username", "tester1");
params.add("password", "secret");
// construct token request (including authorization for client(
RequestEntity<MultiValueMap<String, String>> authRequest = RequestEntity
.post(new URI("https://keycloak.domain.com/auth/realms/yourrealm/protocol/openid-connect/token"))
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", httpBasicAuthorization("yourclient", "secret-client-credential"))
.body(params);
// execute request and test for success
TestRestTemplate restTemplate = new TestRestTemplate();
ResponseEntity<String> response = restTemplate.exchange(authRequest, String.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertTrue(response.getHeaders().getContentType().isCompatibleWith(MediaType.APPLICATION_JSON));
// extract access token (JWT) from response
JacksonJsonParser jsonParser = new JacksonJsonParser();
final String accessToken = jsonParser.parseMap(response.getBody()).get("access_token").toString();
【讨论】:
以上是关于如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 调用 Java/Kotlin GCP 云函数
如何使用Retrofit2 API在RecyclerView中显示数据?
关于Java/Kotlin下载图片,图片打开不能显示问题探究
使用openid_client通过带有keycloak的pkce颤振应用程序进行身份验证后如何获取刷新令牌?
转载kindeditor API ,kindeditor使用手册,kindeditor函数,kindeditor使用,超级大收集