IAM对接调试
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user