559 lines
23 KiB
PHP
559 lines
23 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace OSS\Tests;
|
||
|
|
||
|
use OSS\Http\RequestCore;
|
||
|
use OSS\Credentials\Credentials;
|
||
|
use OSS\Signer\SignerV1;
|
||
|
use OSS\Signer\SignerV4;
|
||
|
use OSS\Core\OssUtil;
|
||
|
|
||
|
class SignerTest extends \PHPUnit\Framework\TestCase
|
||
|
{
|
||
|
public function testSignerV1Header()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "examplebucket";
|
||
|
$object = "nelson";
|
||
|
|
||
|
$request->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request->add_header("Content-Type", "text/html");
|
||
|
$request->add_header("x-oss-meta-author", "alice");
|
||
|
$request->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt['string_to_sign']);
|
||
|
$this->assertEquals('OSS ak:kSHKmLxlyEAKtZPkJhG9bZb5k7M=', $request->request_headers['Authorization']);
|
||
|
|
||
|
// case 2
|
||
|
$request2 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl");
|
||
|
$request2->set_method("PUT");
|
||
|
|
||
|
$request2->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request2->add_header("Content-Type", "text/html");
|
||
|
$request2->add_header("x-oss-meta-author", "alice");
|
||
|
$request2->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request2->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request2->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt2 = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request2, $credentials, $signingOpt2);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson?acl";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt2['string_to_sign']);
|
||
|
$this->assertEquals('OSS ak:/afkugFbmWDQ967j1vr6zygBLQk=', $request2->request_headers['Authorization']);
|
||
|
|
||
|
// case 3 with non-signed query
|
||
|
$request3 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl&non-signed-key=value");
|
||
|
$request3->set_method("PUT");
|
||
|
|
||
|
$request3->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request3->add_header("Content-Type", "text/html");
|
||
|
$request3->add_header("x-oss-meta-author", "alice");
|
||
|
$request3->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request3->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request3->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signingOpt3 = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request3, $credentials, $signingOpt3);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\n/examplebucket/nelson?acl";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt3['string_to_sign']);
|
||
|
$this->assertEquals('OSS ak:/afkugFbmWDQ967j1vr6zygBLQk=', $request3->request_headers['Authorization']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV1HeaderWithToken()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk", "token");
|
||
|
$request = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "examplebucket";
|
||
|
$object = "nelson";
|
||
|
|
||
|
$request->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request->add_header("Content-Type", "text/html");
|
||
|
$request->add_header("x-oss-meta-author", "alice");
|
||
|
$request->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt['string_to_sign']);
|
||
|
$this->assertEquals('OSS ak:H3PAlN3Vucn74tPVEqaQC4AnLwQ=', $request->request_headers['Authorization']);
|
||
|
$this->assertEquals('token', $request->request_headers['x-oss-security-token']);
|
||
|
|
||
|
// case 2
|
||
|
$request2 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl");
|
||
|
$request2->set_method("PUT");
|
||
|
|
||
|
$request2->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request2->add_header("Content-Type", "text/html");
|
||
|
$request2->add_header("x-oss-meta-author", "alice");
|
||
|
$request2->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request2->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request2->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt2 = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request2, $credentials, $signingOpt2);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson?acl";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt2['string_to_sign']);
|
||
|
$this->assertEquals("OSS ak:yeceHMAsgusDPCR979RJcLtd7RI=", $request2->request_headers['Authorization']);
|
||
|
|
||
|
// case 3 with non-signed query
|
||
|
$request3 = new RequestCore("http://examplebucket.oss-cn-hangzhou.aliyuncs.com?acl&non-signed-key=value");
|
||
|
$request3->set_method("PUT");
|
||
|
|
||
|
$request3->add_header("Content-MD5", "eB5eJF1ptWaXm4bijSPyxw==");
|
||
|
$request3->add_header("Content-Type", "text/html");
|
||
|
$request3->add_header("x-oss-meta-author", "alice");
|
||
|
$request3->add_header("x-oss-meta-magic", "abracadabra");
|
||
|
$request3->add_header("x-oss-date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$request3->add_header("Date", "Wed, 28 Dec 2022 10:27:41 GMT");
|
||
|
|
||
|
$signingOpt3 = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
);
|
||
|
$signer->sign($request3, $credentials, $signingOpt3);
|
||
|
|
||
|
$signToString = "PUT\neB5eJF1ptWaXm4bijSPyxw==\ntext/html\nWed, 28 Dec 2022 10:27:41 GMT\nx-oss-date:Wed, 28 Dec 2022 10:27:41 GMT\nx-oss-meta-author:alice\nx-oss-meta-magic:abracadabra\nx-oss-security-token:token\n/examplebucket/nelson?acl";
|
||
|
|
||
|
$this->assertEquals($signToString, $signingOpt3['string_to_sign']);
|
||
|
$this->assertEquals('OSS ak:yeceHMAsgusDPCR979RJcLtd7RI=', $request2->request_headers['Authorization']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV1Presign()
|
||
|
{
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/key?versionId=versionId");
|
||
|
$request->set_method("GET");
|
||
|
$bucket = "bucket";
|
||
|
$object = "key";
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'expiration' => 1699807420,
|
||
|
);
|
||
|
$signer->presign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
|
||
|
$query = array();
|
||
|
parse_str($queryString, $query);
|
||
|
|
||
|
$this->assertEquals('1699807420', $query['Expires']);
|
||
|
$this->assertEquals('ak', $query['OSSAccessKeyId']);
|
||
|
$this->assertEquals('dcLTea+Yh9ApirQ8o8dOPqtvJXQ=', $query['Signature']);
|
||
|
$this->assertEquals('versionId', $query['versionId']);
|
||
|
$this->assertEquals('/key', $parsed_url['path']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV1PresignWithToken()
|
||
|
{
|
||
|
$credentials = new Credentials("ak", "sk", "token");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/key%2B123?versionId=versionId");
|
||
|
$request->set_method("GET");
|
||
|
$bucket = "bucket";
|
||
|
$object = "key+123";
|
||
|
|
||
|
$signer = new SignerV1();
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'expiration' => 1699808204,
|
||
|
);
|
||
|
$signer->presign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
|
||
|
$query = array();
|
||
|
parse_str($queryString, $query);
|
||
|
|
||
|
$this->assertEquals('1699808204', $query['Expires']);
|
||
|
$this->assertEquals('ak', $query['OSSAccessKeyId']);
|
||
|
$this->assertEquals('jzKYRrM5y6Br0dRFPaTGOsbrDhY=', $query['Signature']);
|
||
|
$this->assertEquals('versionId', $query['versionId']);
|
||
|
$this->assertEquals('token', $query['security-token']);
|
||
|
$this->assertEquals('/key%2B123', $parsed_url['path']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV4Header()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "text/plain");
|
||
|
$request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
|
||
|
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702743657));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,Signature=e21d18daa82167720f9b1047ae7e7f1ce7cb77a31e8203a7d5f4624fa0284afe";
|
||
|
$this->assertEquals($authPat, $request->request_headers['Authorization']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV4HeaderWithToken()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk", "token");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "text/plain");
|
||
|
$request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
|
||
|
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702784856));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$authPat = "OSS4-HMAC-SHA256 Credential=ak/20231217/cn-hangzhou/oss/aliyun_v4_request,Signature=b94a3f999cf85bcdc00d332fbd3734ba03e48382c36fa4d5af5df817395bd9ea";
|
||
|
$this->assertEquals($authPat, $request->request_headers['Authorization']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV4AdditionalHeaders()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "text/plain");
|
||
|
$request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
|
||
|
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702747512));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
'additionalHeaders' => array("ZAbc", "abc")
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=abc;zabc,Signature=4a4183c187c07c8947db7620deb0a6b38d9fbdd34187b6dbaccb316fa251212f";
|
||
|
$this->assertEquals($authPat, $request->request_headers['Authorization']);
|
||
|
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "text/plain");
|
||
|
$request->add_header("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
|
||
|
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702747512));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
'additionalHeaders' => array("x-oss-no-exist", "ZAbc", "x-oss-head1", "abc")
|
||
|
);
|
||
|
$signer->sign($request, $credentials, $signingOpt);
|
||
|
|
||
|
$authPat = "OSS4-HMAC-SHA256 Credential=ak/20231216/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=abc;zabc,Signature=4a4183c187c07c8947db7620deb0a6b38d9fbdd34187b6dbaccb316fa251212f";
|
||
|
$this->assertEquals($authPat, $request->request_headers['Authorization']);
|
||
|
}
|
||
|
|
||
|
public function testSignerV4Presign()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "application/octet-stream");
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702781677));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
'expiration' => 1702782276,
|
||
|
);
|
||
|
$signer->presign($request, $credentials, $signingOpt);
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
|
||
|
$query = array();
|
||
|
parse_str($queryString, $query);
|
||
|
$this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
|
||
|
$this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
|
||
|
$this->assertEquals('599', $query['x-oss-expires']);
|
||
|
$this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
|
||
|
$this->assertEquals('a39966c61718be0d5b14e668088b3fa07601033f6518ac7b523100014269c0fe', $query['x-oss-signature']);
|
||
|
$this->assertFalse(isset($query['x-oss-additional-headers']));
|
||
|
}
|
||
|
|
||
|
public function testSignerV4PresignWithToken()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk", "token");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "application/octet-stream");
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702785388));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
'expiration' => 1702785987,
|
||
|
);
|
||
|
$signer->presign($request, $credentials, $signingOpt);
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
|
||
|
$query = array();
|
||
|
parse_str($queryString, $query);
|
||
|
$this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
|
||
|
$this->assertEquals('599', $query['x-oss-expires']);
|
||
|
$this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
|
||
|
$this->assertEquals('3817ac9d206cd6dfc90f1c09c00be45005602e55898f26f5ddb06d7892e1f8b5', $query['x-oss-signature']);
|
||
|
$this->assertFalse(isset($query['x-oss-additional-headers']));
|
||
|
//print($request->request_url);
|
||
|
}
|
||
|
|
||
|
public function testSignerV4PresignWithAdditionalHeaders()
|
||
|
{
|
||
|
// case 1
|
||
|
$credentials = new Credentials("ak", "sk");
|
||
|
$request = new RequestCore("http://bucket.oss-cn-hangzhou.aliyuncs.com/1234%2B-/123/1.txt");
|
||
|
$request->set_method("PUT");
|
||
|
$bucket = "bucket";
|
||
|
$object = "1234+-/123/1.txt";
|
||
|
|
||
|
$request->add_header("x-oss-head1", "value");
|
||
|
$request->add_header("abc", "value");
|
||
|
$request->add_header("ZAbc", "value");
|
||
|
$request->add_header("XYZ", "value");
|
||
|
$request->add_header("content-type", "application/octet-stream");
|
||
|
$request->add_header("Date", gmdate('D, d M Y H:i:s \G\M\T', 1702783809));
|
||
|
|
||
|
$signer = new SignerV4();
|
||
|
|
||
|
$query = array();
|
||
|
$query["param1"] = "value1";
|
||
|
$query["+param1"] = "value3";
|
||
|
$query["|param1"] = "value4";
|
||
|
$query["+param2"] = "";
|
||
|
$query["|param2"] = "";
|
||
|
$query["param2"] = "";
|
||
|
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$parsed_url['query'] = OssUtil::toQueryString($query);;
|
||
|
$request->request_url = OssUtil::unparseUrl($parsed_url);
|
||
|
|
||
|
$signingOpt = array(
|
||
|
'bucket' => $bucket,
|
||
|
'key' => $object,
|
||
|
'region' => 'cn-hangzhou',
|
||
|
'product' => 'oss',
|
||
|
'expiration' => 1702784408,
|
||
|
'additionalHeaders' => array("ZAbc", "abc")
|
||
|
);
|
||
|
$signer->presign($request, $credentials, $signingOpt);
|
||
|
$parsed_url = parse_url($request->request_url);
|
||
|
$queryString = isset($parsed_url['query']) ? $parsed_url['query'] : '';
|
||
|
$query = array();
|
||
|
parse_str($queryString, $query);
|
||
|
$this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
|
||
|
$this->assertEquals('20231217T033009Z', $query['x-oss-date']);
|
||
|
$this->assertEquals('599', $query['x-oss-expires']);
|
||
|
$this->assertEquals('ak/20231217/cn-hangzhou/oss/aliyun_v4_request', $query['x-oss-credential']);
|
||
|
$this->assertEquals('6bd984bfe531afb6db1f7550983a741b103a8c58e5e14f83ea474c2322dfa2b7', $query['x-oss-signature']);
|
||
|
$this->assertEquals('abc;zabc', $query['x-oss-additional-headers']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|