keycloak - 如何通过 keycloak 端点更新用户帐户电子邮件?
keycloak - how to update user account email through keycloak endpoint?
我正在尝试在 keycloak 上更新用户电子邮件,但它抛出了这个异常
org.springframework.web.client.HttpServerErrorException$InternalServerError:
500 Internal Server Error: [no body] at
org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:100)
at
org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:188)
at
org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:125)
at
org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at
org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:818)
public String UpdateUserData(String email, String userId) {
try {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "bearer " + getToken(externalClientId));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("email", email);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
this.client.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
this.client.exchange(clientToConnectionProperties.get(externalClientId).URI +"/users/"+userId, HttpMethod.PUT, request, Void.class);
return HttpStatus.OK.name();
} catch (RestClientException e) {
e.printStackTrace();
return HttpStatus.INTERNAL_SERVER_ERROR.name();
}
}
尝试将所有已知的用户字段放在第一位
- 获取
/auth/admin/realms/<your realm>/users/<user id>
- 放置
/auth/admin/realms/<your realm>/users/<user id>
。
Headers:
Accept: application/json
Authorization: Bearer <access_token>
Content-Type: application/json;charset=UTF-8
Body(从对第 1 步请求的响应中获取值):
{
"id": "<user id>",
"username": "<username>",
"enabled": true,
"emailVerified": true,
"access": {
"manageGroupMembership": true,
"view": true,
"mapRoles": true,
"impersonate": true,
"manage": true
},
"email": "<email>
}
我正在尝试在 keycloak 上更新用户电子邮件,但它抛出了这个异常
org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: [no body] at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:100) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:188) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:125) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:818)
public String UpdateUserData(String email, String userId) {
try {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "bearer " + getToken(externalClientId));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("email", email);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
this.client.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
this.client.exchange(clientToConnectionProperties.get(externalClientId).URI +"/users/"+userId, HttpMethod.PUT, request, Void.class);
return HttpStatus.OK.name();
} catch (RestClientException e) {
e.printStackTrace();
return HttpStatus.INTERNAL_SERVER_ERROR.name();
}
}
尝试将所有已知的用户字段放在第一位
- 获取
/auth/admin/realms/<your realm>/users/<user id>
- 放置
/auth/admin/realms/<your realm>/users/<user id>
。 Headers:
Accept: application/json
Authorization: Bearer <access_token>
Content-Type: application/json;charset=UTF-8
Body(从对第 1 步请求的响应中获取值):
{
"id": "<user id>",
"username": "<username>",
"enabled": true,
"emailVerified": true,
"access": {
"manageGroupMembership": true,
"view": true,
"mapRoles": true,
"impersonate": true,
"manage": true
},
"email": "<email>
}