java - 如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT token

标签 java kotlin keycloak

我想要的是单元测试中来自 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

但此适配器只能通过浏览器或cmdline登录。

我正在寻找类似 MyAdapter.login(用户名, 密码)的内容

最佳答案

查找以下可用于测试的代码。

该代码基本上会调用 OIDC token 端点来检索访问 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 - 如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61517468/

相关文章:

angular - Angular 的 Keycloak 不发送图像的不记名身份验证

Java在数组中调用没有点符号的方法

java - 用户定义的 CORBA 异常在编译后给我错误

android - `when condition` 检查的自定义 lint 规则

android - Google map 的自定义信息窗口,其中包含使用Kotlin单击的项目

android - 调试期间 R.id.X 值错误

java - 如何判断框架是否存在

java - 从 servlet 到 jsp 的请求调度程序出现问题

Keycloak 1.9.1.Final- token : Token is not active 验证失败

ruby - 通过 Keycloak API 添加用户时忽略 "realmRoles"参数