Skip to content

Commit 89b3281

Browse files
committed
feat: support session token
1 parent 0c69ecf commit 89b3281

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

volcstack-java-sdk-core/src/main/java/com/volcengine/volcstack/ApiClient.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.volcengine.volcstack.version.Version;
2626
import okio.BufferedSink;
2727
import okio.Okio;
28+
import org.apache.commons.lang.StringUtils;
2829
import org.threeten.bp.LocalDate;
2930
import org.threeten.bp.OffsetDateTime;
3031
import org.threeten.bp.format.DateTimeFormatter;
@@ -48,7 +49,6 @@
4849
import java.security.cert.CertificateFactory;
4950
import java.security.cert.X509Certificate;
5051
import java.text.DateFormat;
51-
import java.text.SimpleDateFormat;
5252
import java.util.*;
5353
import java.util.Map.Entry;
5454
import java.util.concurrent.TimeUnit;
@@ -1021,14 +1021,6 @@ private ServiceInfo addPairAndGetServiceInfo(String path, List<Pair> queryParams
10211021
return new ServiceInfo(param[3], param[4]);
10221022
}
10231023

1024-
private void initRequestHeader(Map<String, String> headerParams) {
1025-
if (!headerParams.containsKey("X-Date")) {
1026-
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
1027-
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
1028-
headerParams.put("X-Date", sdf.format(new Date()));
1029-
}
1030-
}
1031-
10321024
private String getTruePath(String path, Map<String, String> headerParams) {
10331025
if (isApplicationJsonBody(headerParams) || isPostBody(headerParams)) {
10341026
String[] param = path.split("/");
@@ -1151,7 +1143,6 @@ public Request buildRequest(String path, String method, List<Pair> queryParams,
11511143
getDefaultContentType(headerParams);
11521144

11531145
ServiceInfo serviceInfo = addPairAndGetServiceInfo(path, queryParams, headerParams);
1154-
initRequestHeader(headerParams);
11551146
String truePath = getTruePath(path, headerParams);
11561147
String contentType = headerParams.get("Content-Type");
11571148
StringBuilder bodyBuilder = new StringBuilder();
@@ -1299,6 +1290,15 @@ public void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<
12991290
if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
13001291
if (auth instanceof VolcstackSign) {
13011292
VolcstackSign volcstackSign = (VolcstackSign) auth;
1293+
if (volcstackSign.getCredentials() == null) {
1294+
throw new RuntimeException("Credentials must set when ApiClient init");
1295+
}
1296+
if (StringUtils.isEmpty(credentials.getAccessKey()) || StringUtils.isEmpty(credentials.getSecretKey())){
1297+
throw new RuntimeException("AccessKey and SecretKey must set when ApiClient init Credentials");
1298+
}
1299+
if (StringUtils.isEmpty(volcstackSign.getRegion())) {
1300+
throw new RuntimeException("Region must set when ApiClient init");
1301+
}
13021302
volcstackSign.setMethod(serviceInfo.getMethod().toUpperCase());
13031303
volcstackSign.setService(serviceInfo.getServiceName());
13041304
}

volcstack-java-sdk-core/src/main/java/com/volcengine/volcstack/sign/Credentials.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
public class Credentials {
88
private String accessKey;
99
private String secretKey;
10+
private String sessionToken;
1011

1112
private Credentials() {
1213
}
@@ -27,17 +28,31 @@ public void setSecretKey(String secretKey) {
2728
this.secretKey = secretKey;
2829
}
2930

31+
public String getSessionToken() {
32+
return sessionToken;
33+
}
34+
35+
public void setSessionToken(String sessionToken) {
36+
this.sessionToken = sessionToken;
37+
}
38+
3039
public static Credentials getEnvCredentials() {
3140
Credentials credentials = new Credentials();
3241
credentials.accessKey = System.getenv("VOLCSTACK_ACCESS_KEY");
3342
credentials.secretKey = System.getenv("VOLCSTACK_SECRET_KEY");
43+
credentials.secretKey = System.getenv("VOLCSTACK_SESSION_TOKEN");
3444
return credentials;
3545
}
3646

3747
public static Credentials getCredentials(String accessKey, String secretKey) {
48+
return getCredentials(accessKey,secretKey,"");
49+
}
50+
51+
public static Credentials getCredentials(String accessKey, String secretKey,String sessionToken) {
3852
Credentials credentials = new Credentials();
3953
credentials.accessKey = accessKey;
4054
credentials.secretKey = secretKey;
55+
credentials.sessionToken = sessionToken;
4156
return credentials;
4257
}
4358
}

volcstack-java-sdk-core/src/main/java/com/volcengine/volcstack/sign/VolcstackSign.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import com.volcengine.volcstack.Pair;
44
import com.volcengine.volcstack.auth.Authentication;
5+
import org.apache.commons.lang.StringUtils;
56

67
import javax.crypto.Mac;
78
import javax.crypto.spec.SecretKeySpec;
89
import java.nio.ByteBuffer;
910
import java.nio.charset.StandardCharsets;
1011
import java.security.MessageDigest;
12+
import java.text.SimpleDateFormat;
1113
import java.util.*;
1214

1315
/**
@@ -44,7 +46,7 @@ private static class SignRequest {
4446
private StringBuilder canonicalHeaders;
4547
private StringBuilder credentialScope;
4648
private StringBuilder stringToSign;
47-
private StringBuilder authorization;
49+
// private StringBuilder authorization;
4850
}
4951

5052

@@ -187,6 +189,17 @@ private void buildSignedHeaders(Map<String, String> headerParams, SignRequest si
187189
signRequest.signedHeaders = signedHeaders;
188190
}
189191

192+
private void initHeaders(Map<String,String> headerParams){
193+
if (!StringUtils.isEmpty(credentials.getSessionToken())){
194+
headerParams.put("X-Security-Token",credentials.getSessionToken());
195+
}
196+
if (!headerParams.containsKey("X-Date")) {
197+
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
198+
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
199+
headerParams.put("X-Date", sdf.format(new Date()));
200+
}
201+
}
202+
190203
private void buildCanonicalRequest(Map<String, String> queryParams, SignRequest signRequest) throws Exception {
191204
//sort keys
192205
List<String> listParamKeys = sortParamKeys(queryParams);
@@ -214,6 +227,8 @@ private void buildCanonicalRequest(Map<String, String> queryParams, SignRequest
214227
private void sign(Map<String, String> queryParams, Map<String, String> headerParams, String payload) throws Exception {
215228

216229
SignRequest signRequest = new SignRequest();
230+
// initHeader
231+
initHeaders(headerParams);
217232
// step 1
218233
buildCanonicalRequest(queryParams, signRequest);
219234
buildSignedHeaders(headerParams,signRequest);

0 commit comments

Comments
 (0)