我使用 Spring Boot 和 REST 模板。我想获取用户连接的信息,但只有当我连接到管理员帐户而不是作者帐户时,我才能获取信息。这是我的代码
public UserDto getInfo() throws APIErrorException {
UserInfoResponse userInfoResponse = null;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("token", accessToken);
map.add(CLIENT_ID, admin_Client);
map.add(CLIENT_SECRET, secret_key);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
try {
userInfoResponse = restTemplate.postForEntity(userInfoUrl, request, UserInfoResponse.class).getBody();
} catch (Exception e) {
throw new APIErrorException(ErrorCode.E444);
}
UserKeycloak userKeycloak = userMapperService.fromUserInfoResponse(userInfoResponse);
return userMapperService.convertKeycloakToDto(userKeycloak);
}
Spring Security OAuth2 客户端默认应使用
userinfo
调用 org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService
端点,并将用户属性添加到 OAuth2UserAuthority
。