IAM对接调试

This commit is contained in:
2026-07-15 16:35:17 +08:00
parent 7d3626fd86
commit 5038f63dc3

View File

@@ -152,13 +152,16 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
private IamSsoTokenResponse requestIamToken(OAuth2Request request) {
try {
Map<String, String> tokenParams = buildTokenParams(request);
String tokenBody = buildTokenBody(tokenParams);
HttpRequest httpRequest = HttpRequest.newBuilder(URI.create(properties.getTokenUrl()))
.timeout(Duration.ofSeconds(10))
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.header(HttpHeaders.AUTHORIZATION, authorizationHeader())
.POST(HttpRequest.BodyPublishers.ofString(buildTokenBody(request), StandardCharsets.UTF_8))
.POST(HttpRequest.BodyPublishers.ofString(tokenBody, StandardCharsets.UTF_8))
.build();
log.info("IAM统一身份认证换取Token请求method={}, headers={}, body={}", httpRequest.method(), maskHeaders(httpRequest.headers().map()), buildMaskTokenBody(tokenParams));
HttpResponse<String> response = httpClient.send(
httpRequest,
HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)
@@ -185,10 +188,12 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
.header(HttpHeaders.AUTHORIZATION, profileAuthorizationHeader(accessToken))
.GET()
.build();
log.info("IAM统一身份认证获取用户信息请求headers={}, body={}", maskHeaders(httpRequest.headers().map()), "");
HttpResponse<String> response = httpClient.send(
httpRequest,
HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)
);
log.info("IAM统一身份认证获取用户信息响应headers={}, body={}", response.headers().map(), response.body());
if (response.statusCode() < 200 || response.statusCode() >= 300) {
log.warn("IAM统一身份认证获取用户信息失败status={}", response.statusCode());
throw new UserInvalidException(OAuth2TokenConstant.TOKEN_NOT_CORRECT);
@@ -203,18 +208,29 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
}
}
private String buildTokenBody(OAuth2Request request) {
private Map<String, String> buildTokenParams(OAuth2Request request) {
Map<String, String> params = new LinkedHashMap<>();
params.put("grant_type", IAM_GRANT_TYPE);
params.put("client_id", properties.getClientId());
params.put("client_secret", properties.getClientSecret());
params.put("code", request.getCode());
params.put("redirect_uri", properties.getRedirectUri());
return params;
}
private String buildTokenBody(Map<String, String> params) {
return params.entrySet().stream()
.map(entry -> encode(entry.getKey()) + "=" + encode(entry.getValue()))
.collect(Collectors.joining("&"));
}
private String buildMaskTokenBody(Map<String, String> params) {
Map<String, String> maskParams = new LinkedHashMap<>(params);
maskParams.put("client_secret", "******");
maskParams.put("code", "******");
return buildTokenBody(maskParams);
}
private String buildProfileUrl(String accessToken) {
String separator = properties.getProfileUrl().contains("?") ? "&" : "?";
return properties.getProfileUrl() + separator + "access_token=" + encode(accessToken);
@@ -237,6 +253,12 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
return BEARER_PREFIX + accessToken;
}
private Map<String, java.util.List<String>> maskHeaders(Map<String, java.util.List<String>> headers) {
Map<String, java.util.List<String>> maskHeaders = new LinkedHashMap<>(headers);
maskHeaders.replaceAll((key, value) -> HttpHeaders.AUTHORIZATION.equalsIgnoreCase(key) ? java.util.List.of("******") : value);
return maskHeaders;
}
private String encode(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}