如何通过 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通过带有ke​​ycloak的pkce颤振应用程序进行身份验证后如何获取刷新令牌?

Java/Kotlin JSON 解析改进

转载kindeditor API ,kindeditor使用手册,kindeditor函数,kindeditor使用,超级大收集