Skip to content

Commit d49f533

Browse files
committed
feat: support signature configuration for all environment
1 parent 5c8d4bc commit d49f533

File tree

24 files changed

+555
-302
lines changed

24 files changed

+555
-302
lines changed

.github/workflows/pop_csharp.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ defaults:
1212
jobs:
1313
build:
1414

15-
runs-on: ubuntu-latest
15+
runs-on: ubuntu-20.04
1616

1717
steps:
18-
- uses: actions/checkout@v2
18+
- uses: actions/checkout@v4
1919
- name: Setup .NET Core
20-
uses: actions/setup-dotnet@v1
20+
uses: actions/setup-dotnet@v4
2121
with:
22-
dotnet-version: 2.2.207
22+
dotnet-version: '2.x'
2323
- name: install altcover
2424
run: cd core/ && dotnet tool install --global altcover.visualizer --version 8.6.14
2525
- name: Install dependencies

.github/workflows/pop_java.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
matrix:
2121
# test against latest update of each major Java version, as well as specific updates of LTS versions:
2222
# 20, 21还不支持,报错是Source option 7 is no longer supported. Use 8 or later.
23-
java: [7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19]
23+
java: [8, 11, 17]
2424
fail-fast: false
2525

2626
steps:

.github/workflows/pop_python.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ jobs:
2424
with:
2525
python-version: ${{ matrix.python-version }}
2626
- name: Install dependencies
27-
run: pip install pytest==6.2.5 coverage==5.5 importlib-metadata==1.7.0 zipp==2.2.1 typing-extensions==3.10.0.2 && python setup.py install
28-
if: matrix.python-version == '3.7'
29-
- name: Install dependencies
30-
run: python -m pip install setuptools && python setup.py install && pip install pytest coverage
31-
if: matrix.python-version != '3.7'
27+
run: pip install setuptools urllib3==1.26.20 alibabacloud-tea coverage pytest alibabacloud-credentials==0.3.6 && python setup.py install
3228
- name: Test with unittest
3329
run: |
3430
coverage run --source="./alibabacloud_tea_util" -m pytest tests/test_*

alibabacloud-gateway-pop/csharp/core/Client.cs

Lines changed: 74 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,53 @@ namespace AlibabaCloud.GatewayPop
1414
{
1515
public class Client : AlibabaCloud.GatewaySpi.Client
1616
{
17+
protected string _endpointSuffix;
18+
protected string _signatureTypePrefix;
19+
protected string _signPrefix;
1720
protected string _sha256;
1821
protected string _sm3;
1922

2023
public Client(): base()
2124
{
22-
this._sha256 = "ACS4-HMAC-SHA256";
23-
this._sm3 = "ACS4-HMAC-SM3";
25+
// CLOUD4-
26+
this._signatureTypePrefix = "ACS4-";
27+
// cloud_v4
28+
this._signPrefix = "aliyun_v4";
29+
this._endpointSuffix = "aliyuncs.com";
30+
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
31+
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
2432
}
2533

2634

2735
public void ModifyConfiguration(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
2836
{
2937
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
3038
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
39+
Dictionary<string, string> attributes = attributeMap.Key;
40+
if (!AlibabaCloud.TeaUtil.Common.IsUnset(attributes))
41+
{
42+
this._signatureTypePrefix = attributes.Get("signatureTypePrefix");
43+
this._signPrefix = attributes.Get("signPrefix");
44+
this._endpointSuffix = attributes.Get("endpointSuffix");
45+
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
46+
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
47+
}
3148
config.Endpoint = GetEndpoint(request.ProductId, config.RegionId, config.EndpointRule, config.Network, config.Suffix, config.EndpointMap, config.Endpoint);
3249
}
3350

3451
public async Task ModifyConfigurationAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
3552
{
3653
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
3754
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
55+
Dictionary<string, string> attributes = attributeMap.Key;
56+
if (!AlibabaCloud.TeaUtil.Common.IsUnset(attributes))
57+
{
58+
this._signatureTypePrefix = attributes.Get("signatureTypePrefix");
59+
this._signPrefix = attributes.Get("signPrefix");
60+
this._endpointSuffix = attributes.Get("endpointSuffix");
61+
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
62+
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
63+
}
3864
config.Endpoint = GetEndpoint(request.ProductId, config.RegionId, config.EndpointRule, config.Network, config.Suffix, config.EndpointMap, config.Endpoint);
3965
}
4066

@@ -106,26 +132,37 @@ public void ModifyRequest(AlibabaCloud.GatewaySpi.Models.InterceptorContext cont
106132
{"message", "'config.credential' can not be unset"},
107133
});
108134
}
109-
string authType = credential.GetType();
135+
Aliyun.Credentials.Models.CredentialModel credentialModel = credential.GetCredential();
136+
if (!AlibabaCloud.TeaUtil.Common.Empty(credentialModel.ProviderName))
137+
{
138+
request.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName;
139+
}
140+
string authType = credentialModel.Type;
110141
if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer"))
111142
{
112143
string bearerToken = credential.GetBearerToken();
113144
request.Headers["x-acs-bearer-token"] = bearerToken;
145+
request.Headers["x-acs-signature-type"] = "BEARERTOKEN";
114146
request.Headers["Authorization"] = "Bearer " + bearerToken;
115147
}
148+
else if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "id_token"))
149+
{
150+
string idToken = credentialModel.SecurityToken;
151+
request.Headers["x-acs-zero-trust-idtoken"] = idToken;
152+
}
116153
else
117154
{
118-
string accessKeyId = credential.GetAccessKeyId();
119-
string accessKeySecret = credential.GetAccessKeySecret();
120-
string securityToken = credential.GetSecurityToken();
155+
string accessKeyId = credentialModel.AccessKeyId;
156+
string accessKeySecret = credentialModel.AccessKeySecret;
157+
string securityToken = credentialModel.SecurityToken;
121158
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
122159
{
123160
request.Headers["x-acs-accesskey-id"] = accessKeyId;
124161
request.Headers["x-acs-security-token"] = securityToken;
125162
}
126163
string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10);
127164
dateNew = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateNew, "-", "", null);
128-
string region = GetRegion(request.ProductId, config.Endpoint);
165+
string region = GetRegion(request.ProductId, config.Endpoint, config.RegionId);
129166
byte[] signingkey = GetSigningkey(signatureAlgorithm, accessKeySecret, request.ProductId, region, dateNew);
130167
request.Headers["Authorization"] = GetAuthorization(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew);
131168
}
@@ -200,26 +237,37 @@ public async Task ModifyRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorC
200237
{"message", "'config.credential' can not be unset"},
201238
});
202239
}
203-
string authType = credential.GetType();
240+
Aliyun.Credentials.Models.CredentialModel credentialModel = await credential.GetCredentialAsync();
241+
if (!AlibabaCloud.TeaUtil.Common.Empty(credentialModel.ProviderName))
242+
{
243+
request.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName;
244+
}
245+
string authType = credentialModel.Type;
204246
if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer"))
205247
{
206248
string bearerToken = credential.GetBearerToken();
207249
request.Headers["x-acs-bearer-token"] = bearerToken;
250+
request.Headers["x-acs-signature-type"] = "BEARERTOKEN";
208251
request.Headers["Authorization"] = "Bearer " + bearerToken;
209252
}
253+
else if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "id_token"))
254+
{
255+
string idToken = credentialModel.SecurityToken;
256+
request.Headers["x-acs-zero-trust-idtoken"] = idToken;
257+
}
210258
else
211259
{
212-
string accessKeyId = await credential.GetAccessKeyIdAsync();
213-
string accessKeySecret = await credential.GetAccessKeySecretAsync();
214-
string securityToken = await credential.GetSecurityTokenAsync();
260+
string accessKeyId = credentialModel.AccessKeyId;
261+
string accessKeySecret = credentialModel.AccessKeySecret;
262+
string securityToken = credentialModel.SecurityToken;
215263
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
216264
{
217265
request.Headers["x-acs-accesskey-id"] = accessKeyId;
218266
request.Headers["x-acs-security-token"] = securityToken;
219267
}
220268
string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10);
221269
dateNew = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateNew, "-", "", null);
222-
string region = GetRegion(request.ProductId, config.Endpoint);
270+
string region = GetRegion(request.ProductId, config.Endpoint, config.RegionId);
223271
byte[] signingkey = await GetSigningkeyAsync(signatureAlgorithm, accessKeySecret, request.ProductId, region, dateNew);
224272
request.Headers["Authorization"] = await GetAuthorizationAsync(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew);
225273
}
@@ -369,15 +417,15 @@ public string GetAuthorization(string pathname, string method, Dictionary<string
369417
string signature = GetSignature(pathname, method, query, headers, signatureAlgorithm, payload, signingkey);
370418
List<string> signedHeaders = GetSignedHeaders(headers);
371419
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
372-
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
420+
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/" + _signPrefix + "_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
373421
}
374422

375423
public async Task<string> GetAuthorizationAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, string ak, byte[] signingkey, string product, string region, string date)
376424
{
377425
string signature = await GetSignatureAsync(pathname, method, query, headers, signatureAlgorithm, payload, signingkey);
378426
List<string> signedHeaders = await GetSignedHeadersAsync(headers);
379427
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
380-
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
428+
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/" + _signPrefix + "_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
381429
}
382430

383431
public string GetSignature(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, byte[] signingkey)
@@ -436,7 +484,7 @@ public async Task<string> GetSignatureAsync(string pathname, string method, Dict
436484

437485
public byte[] GetSigningkey(string signatureAlgorithm, string secret, string product, string region, string date)
438486
{
439-
string sc1 = "aliyun_v4" + secret;
487+
string sc1 = "" + _signPrefix + secret;
440488
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
441489
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
442490
{
@@ -467,18 +515,18 @@ public byte[] GetSigningkey(string signatureAlgorithm, string secret, string pro
467515
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
468516
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
469517
{
470-
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4);
518+
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
471519
}
472520
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
473521
{
474-
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4);
522+
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("" + _signPrefix + "_request", sc4);
475523
}
476524
return hmac;
477525
}
478526

479527
public async Task<byte[]> GetSigningkeyAsync(string signatureAlgorithm, string secret, string product, string region, string date)
480528
{
481-
string sc1 = "aliyun_v4" + secret;
529+
string sc1 = "" + _signPrefix + secret;
482530
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
483531
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
484532
{
@@ -509,25 +557,29 @@ public async Task<byte[]> GetSigningkeyAsync(string signatureAlgorithm, string s
509557
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
510558
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
511559
{
512-
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4);
560+
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
513561
}
514562
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
515563
{
516-
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4);
564+
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("" + _signPrefix + "_request", sc4);
517565
}
518566
return hmac;
519567
}
520568

521-
public string GetRegion(string product, string endpoint)
569+
public string GetRegion(string product, string endpoint, string regionId)
522570
{
571+
if (!AlibabaCloud.TeaUtil.Common.Empty(regionId))
572+
{
573+
return regionId;
574+
}
523575
string region = "center";
524576
if (AlibabaCloud.TeaUtil.Common.Empty(product) || AlibabaCloud.TeaUtil.Common.Empty(endpoint))
525577
{
526578
return region;
527579
}
528580
List<string> strs = AlibabaCloud.DarabonbaString.StringUtil.Split(endpoint, ":", null);
529581
string withoutPort = strs[0];
530-
string preRegion = AlibabaCloud.DarabonbaString.StringUtil.Replace(withoutPort, ".aliyuncs.com", "", null);
582+
string preRegion = AlibabaCloud.DarabonbaString.StringUtil.Replace(withoutPort, "." + _endpointSuffix, "", null);
531583
List<string> nodes = AlibabaCloud.DarabonbaString.StringUtil.Split(preRegion, ".", null);
532584
if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(nodes), 2))
533585
{

alibabacloud-gateway-pop/csharp/core/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@
2929
// Build Number
3030
// Revision
3131
//
32-
[assembly: AssemblyVersion("0.0.5.0")]
33-
[assembly: AssemblyFileVersion("0.0.5.0")]
32+
[assembly: AssemblyVersion("0.0.6.0")]
33+
[assembly: AssemblyFileVersion("0.0.6.0")]

alibabacloud-gateway-pop/csharp/core/client.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
4242
</PackageReference>
4343
<PackageReference Include="AlibabaCloud.GatewaySpi" Version="0.0.3"/>
44-
<PackageReference Include="Aliyun.Credentials" Version="1.4.2"/>
44+
<PackageReference Include="Aliyun.Credentials" Version="1.5.0"/>
4545
<PackageReference Include="AlibabaCloud.TeaUtil" Version="0.1.19"/>
4646
<PackageReference Include="AlibabaCloud.OpenApiUtil" Version="1.1.2"/>
4747
<PackageReference Include="AlibabaCloud.EndpointUtil" Version="0.1.1"/>
@@ -50,6 +50,6 @@
5050
<PackageReference Include="AlibabaCloud.DarabonbaString" Version="1.0.3"/>
5151
<PackageReference Include="AlibabaCloud.DarabonbaMap" Version="0.0.2"/>
5252
<PackageReference Include="AlibabaCloud.DarabonbaArray" Version="0.1.0"/>
53-
<PackageReference Include="Tea" Version="1.0.13"/>
53+
<PackageReference Include="Tea" Version="1.1.3"/>
5454
</ItemGroup>
5555
</Project>

0 commit comments

Comments
 (0)