@@ -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 {
0 commit comments