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