in src/main/java/com/aliyun/credentials/provider/URLCredentialProvider.java [94:142]
RefreshResult<CredentialModel> getNewSessionCredentials(CompatibleUrlConnClient client) {
HttpRequest request = new HttpRequest(this.credentialsURI.toString());
request.setSysMethod(MethodType.GET);
request.setSysConnectTimeout(connectTimeout);
request.setSysReadTimeout(readTimeout);
HttpResponse response;
try {
response = client.syncInvoke(request);
} catch (Exception e) {
throw new CredentialException("Failed to connect Server: " + e.toString(), e);
} finally {
client.close();
}
if (response.getResponseCode() >= 300 || response.getResponseCode() < 200) {
throw new CredentialException("Failed to get credentials from server: " + this.credentialsURI.toString()
+ "\nHttpCode=" + response.getResponseCode()
+ "\nHttpRAWContent=" + response.getHttpContentString());
}
Gson gson = new Gson();
Map<String, String> map;
try {
map = gson.fromJson(response.getHttpContentString(), Map.class);
} catch (Exception e) {
throw new CredentialException("Failed to get credentials from server: " + this.credentialsURI.toString()
+ "\nHttpCode=" + response.getResponseCode()
+ "\nHttpRAWContent=" + response.getHttpContentString(), e);
}
if (null == map || !map.containsKey("Code") || !map.get("Code").equals("Success")) {
throw new CredentialException(String.format("Error retrieving credentials from credentialsURI result: %s.", response.getHttpContentString()));
}
if (!map.containsKey("AccessKeyId") || !map.containsKey("AccessKeySecret") || !map.containsKey("SecurityToken") || !map.containsKey("Expiration")) {
throw new CredentialException(String.format("Error retrieving credentials from credentialsURI result: %s.", response.getHttpContentString()));
}
long expiration = ParameterHelper.getUTCDate(map.get("Expiration")).getTime();
CredentialModel credential = CredentialModel.builder()
.accessKeyId(map.get("AccessKeyId"))
.accessKeySecret(map.get("AccessKeySecret"))
.securityToken(map.get("SecurityToken"))
.type(AuthConstant.CREDENTIALS_URI)
.providerName(this.getProviderName())
.expiration(expiration)
.build();
return RefreshResult.builder(credential)
.staleTime(getStaleTime(expiration))
.build();
}