{"id":317825,"date":"2021-02-11T03:00:41","date_gmt":"2021-02-11T03:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317825"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317825","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u0438\u043d\u0438 PHP SDK \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a Oracle Cloud Infrastructure API"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0418\u0434\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438&nbsp;<a href=\"https:\/\/www.oracle.com\/cloud\/free\/#always-free\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/u><\/a>&nbsp;Oracle Cloud Infrastructure, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e 10 \u0413\u0411 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Concepts\/objectstorageoverview.htm\" rel=\"noopener noreferrer nofollow\"><u>Object Storage<\/u><\/a>) \u0438 10 \u0422\u0411 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441&nbsp;AWS&nbsp;S3 \u043f\u0440\u043e\u0441\u0442\u043e&nbsp;<a href=\"https:\/\/aws.amazon.com\/s3\/pricing\/?nc=sn&amp;loc=4\" rel=\"noopener noreferrer nofollow\"><u>\u043e\u0433\u0440\u043e\u043c\u043d\u0435\u0439\u0448\u0430\u044f<\/u><\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e,&nbsp;Oracle&nbsp;Cloud&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/sdks.htm\" rel=\"noopener noreferrer nofollow\"><u>\u043d\u0435 \u0438\u043c\u0435\u0435\u0442<\/u><\/a>&nbsp;\u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438&nbsp;SDK&nbsp;\u0434\u043b\u044f \u0432\u0441\u0451 \u0435\u0449\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Tasks\/s3compatibleapi.htm\" rel=\"noopener noreferrer nofollow\"><u>\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c<\/u><\/a>&nbsp;\u0441&nbsp;Amazon&nbsp;S3, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/sdk-for-php\/v3\/developer-guide\/welcome.html\" rel=\"noopener noreferrer nofollow\"><u>\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/u><\/a>, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f&nbsp;PHP.<\/p>\n<p>\u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u043d\u0435 \u0442\u0435\u0440\u043f\u0438\u0442\u0441\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u0434, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c&nbsp;<a href=\"https:\/\/github.com\/hitrov\/oci-api-php-request-sign\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/hitrov\/oci-api-php-request-sign<\/u><\/a>.<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c &#8212; \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0437\u0438\u043d (buckets) \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0444\u0430\u0439\u043b\u043e\u0432). \u041a\u043e\u0440\u0437\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 (\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0435\u0437) \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c\u0438. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0443\u044e \u043a\u043e\u0440\u0437\u0438\u043d\u0443, \u0438\u043c\u0435\u044f \u043b\u0438\u0448\u044c \u00ab\u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439\u00bb&nbsp;URL&nbsp;(\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/cliconcepts.htm\" rel=\"noopener noreferrer nofollow\"><u>CLI<\/u><\/a>&nbsp;\u0438\u043b\u0438 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 &#8212; \u043a\u043e\u043d\u0441\u043e\u043b\u0438&nbsp;Oracle&nbsp;Cloud). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0439\u043a\u0438\u0435 \u043a \u043f\u043e\u0434\u0431\u043e\u0440\u0443 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 &#8212; \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0443.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u00ab\u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u00bb \u0444\u0430\u0439\u043b\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b, \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f. \u0412&nbsp;AWS S3&nbsp;\u044d\u0442\u043e&nbsp;\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/sdk-for-php\/v3\/developer-guide\/s3-presigned-url.html\" rel=\"noopener noreferrer nofollow\"><u>Pre-Signed URL<\/u><\/a>,&nbsp;\u0430&nbsp;\u0443&nbsp;Oracle &#8212;&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Tasks\/usingpreauthenticatedrequests.htm#workingwithpar\" rel=\"noopener noreferrer nofollow\"><u>Pre-Authenticated Request<\/u><\/a>.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 AWS PHP SDK<\/p>\n<pre><code class=\"bash\">composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b (<code>AWS_ACCESS_KEY_ID<\/code>\u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>.<\/p>\n<p>Namespace \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/521\/7d4\/063\/5217d406382b27e816484e8c0fc33a50.png\" width=\"537\" height=\"457\"><figcaption><\/figcaption><\/figure>\n<pre><code class=\"php\">$namespaceName = 'frpegp***'; $bucketName = 'test******05'; $region = 'eu-frankfurt-1'; $endpoint = \"https:\/\/$namespaceName.compat.objectstorage.$region.oraclecloud.com\";  $s3 = new Aws\\S3\\S3Client([     'version' =&gt; 'latest',     'region'  =&gt; $region,     'endpoint' =&gt; $endpoint,     'signature_version' =&gt; 'v4',     'use_path_style_endpoint' =&gt; true,     'credentials' =&gt; [         'key'    =&gt; 'AKI***YYJ', \/\/ remove if you have env var AWS_ACCESS_KEY_ID         'secret' =&gt; 'ndK***cIf', , \/\/ remove if you have env var AWS_SECRET_ACCESS_KEY     ], ]);  $cmd = $s3-&gt;getCommand('GetObject', [     'Bucket' =&gt; $bucketName,     'Key' =&gt; 'fff.txt' ]);  $request = $s3-&gt;createPresignedRequest($cmd, '+20 minutes');<\/code><\/pre>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u043e\u0442\u0434\u0430\u0432\u0430\u044f \u0432 \u043e\u0442\u0432\u0435\u0442&nbsp;<a href=\"https:\/\/www.php-fig.org\/psr\/psr-7\/\" rel=\"noopener noreferrer nofollow\"><u>PSR-7&nbsp;request<\/u><\/a>, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0438\u043c&nbsp;URL&nbsp;\u0432\u0438\u0434\u0430<\/p>\n<p><code>https:\/\/{namespace}.compat.objectstorage.eu-frankfurt-1.oraclecloud.com\/{bucket}\/fff.txt?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=***%2F20210210%2Feu-frankfurt-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210210T185244Z&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Expires=1200&amp;X-Amz-Signature=a167a***9a857<\/code><\/p>\n<p>\u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;Error&gt;     &lt;Message&gt;The required information to complete authentication was not provided.&lt;\/Message&gt;     &lt;Code&gt;SignatureDoesNotMatch&lt;\/Code&gt; &lt;\/Error&gt;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430, \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0438\u043d\u043e\u0433\u043e, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u043b\u043e \ud83d\ude42<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a&nbsp;API, \u0432\u0435\u0434\u044c \u0432\u0441\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/signingrequests.htm\" rel=\"noopener noreferrer nofollow\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>, \u043f\u0443\u0441\u0442\u044c \u0438 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0438\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\\\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\\\u0431\u044d\u043a\u0430\u043f\u0430&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/database\/20160918\/AutonomousDatabase\/\" rel=\"noopener noreferrer nofollow\"><u>\u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/a>, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/dns\/20180115\/\" rel=\"noopener noreferrer nofollow\"><u>DNS<\/u><\/a>&nbsp;\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/emaildelivery\/20170907\/\" rel=\"noopener noreferrer nofollow\"><u>Email<\/u><\/a>. \u0412\u0441\u0451 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/\" rel=\"noopener noreferrer nofollow\">API Reference and Endpoints<\/a>.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0443\u0436\u043d\u044b \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 (\u043a\u043e\u043d\u0441\u043e\u043b\u0438)&nbsp;Oracle&nbsp;Cloud \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0439\u0442\u0438 \u0432&nbsp;User&nbsp;Settings<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff4\/6a8\/c39\/ff46a8c396f55a32cade815ed29350e9.png\" alt=\"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 Oracle Cloud\" title=\"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 Oracle Cloud\" width=\"333\" height=\"279\"><figcaption>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 Oracle Cloud<\/figcaption><\/figure>\n<p>API Keys\u200a\u2014\u200aAdd API Key<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ccd\/e9b\/abe\/ccde9babef5a4dd89a49882d4ea08a43.png\" alt=\"API Keys - Add API Key\" title=\"API Keys - Add API Key\" width=\"437\" height=\"267\"><figcaption>API Keys &#8212; Add API Key<\/figcaption><\/figure>\n<p>Download&nbsp;private&nbsp;key&nbsp;(\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435), \u0437\u0430\u0442\u0435\u043c&nbsp;Add<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04a\/572\/8fe\/04a5728fe248ce54d895b1cc27e486b4.png\" alt=\"Download Private Key and Add\" title=\"Download Private Key and Add\" width=\"726\" height=\"458\"><figcaption>Download Private Key and Add<\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043e\u043d\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80b\/bc2\/9c3\/80bbc29c31762db233d43f4a8f756f1a.png\" alt=\"Configuration File example\" title=\"Configuration File example\" width=\"728\" height=\"489\"><figcaption>Configuration File example<\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f AWS PHP SDK, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b Customer Secret Keys (\u043e\u043d\u0438 \u0436\u0435 <code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code> \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 Amazon.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d9b\/4c9\/e00\/d9b4c9e005d5c5749b880e0aeca4506a.png\" width=\"767\" height=\"261\"><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Oracle Cloud Infrastructure mini PHP SDK&nbsp;(\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439!)<\/p>\n<pre><code class=\"bash\">composer require hitrov\/oci-api-php-request-sign<\/code><\/pre>\n<p>\u041f\u0430\u043a\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e&nbsp;PSR-4 \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<pre><code class=\"php\">require 'vendor\/autoload.php'; use Hitrov\\OCI\\Signer;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u0437\u044f\u0442\u044b\u0435 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c).<\/p>\n<pre><code class=\"bash\">OCI_TENANCY_ID=ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq OCI_USER_ID=ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq OCI_KEY_FINGERPRINT=20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34 OCI_PRIVATE_KEY_FILENAME=\/path\/to\/privatekey.pem<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"php\">$signer = new Signer;<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u0440\u0435\u0434\u044b \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432&nbsp;<a href=\"https:\/\/github.com\/hitrov\/oci-api-php-request-sign#alternatives-for-providing-credentials\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/hitrov\/oci-api-php-request-sign#alternatives-for-providing-credentials<\/u><\/a>&nbsp;, \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>\u041c\u044b&nbsp;\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c&nbsp;\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/objectstorage\/20160918\/PreauthenticatedRequest\/CreatePreauthenticatedRequest\" rel=\"noopener noreferrer nofollow\"><u>CreatePreauthenticatedRequest<\/u><\/a><u>.<\/u><\/p>\n<p>\u0412\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c (\u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f) \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code class=\"php\">public function getHeaders(     string $url, string $method = 'GET', ?string $body = null, ?string $contentType = 'application\/json', string $dateString = null ): array<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<pre><code class=\"php\">$curl = curl_init(); $url = 'https:\/\/objectstorage.eu-frankfurt-1.oraclecloud.com\/n\/{namespaceName}\/b\/{bucketName}\/p\/'; $method = 'POST'; $body = '{\"accessType\": \"ObjectRead\", \"name\": \"read-access-to-image.png\", \"objectName\": \"path\/to\/image.png\", \"timeExpires\": \"2021-03-01T00:00:00-00:00\"}';  $headers = $signer-&gt;getHeaders($url, $method, $body, 'application\/json'); var_dump($headers);  $curlOptions = [   CURLOPT_URL =&gt; $url,   CURLOPT_RETURNTRANSFER =&gt; true,   CURLOPT_ENCODING =&gt; '',   CURLOPT_MAXREDIRS =&gt; 10,   CURLOPT_TIMEOUT =&gt; 5,   CURLOPT_FOLLOWLOCATION =&gt; true,   CURLOPT_HTTP_VERSION =&gt; CURL_HTTP_VERSION_1_1,   CURLOPT_CUSTOMREQUEST =&gt; $method,   CURLOPT_HTTPHEADER =&gt; $headers, ];  if ($body) {   \/\/ not needed for GET or HEAD requests   $curlOptions[CURLOPT_POSTFIELDS] = $body; }  curl_setopt_array($curl, $curlOptions); $response = curl_exec($curl); echo $response; curl_close($curl);<\/code><\/pre>\n<pre><code class=\"bash\">array(6) {   [0]=&gt;   string(35) \"date: Mon, 08 Feb 2021 20:49:22 GMT\"   [1]=&gt;   string(50) \"host: objectstorage.eu-frankfurt-1.oraclecloud.com\"   [2]=&gt;   string(18) \"content-length: 76\"   [3]=&gt;   string(30) \"content-type: application\/json\"   [4]=&gt;   string(62) \"x-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=\"   [5]=&gt;   string(538) \"Authorization: Signature version=\\\"1\\\",keyId=\\\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq\/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq\/20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34\\\",algorithm=\\\"rsa-sha256\\\",headers=\\\"date (request-target) host content-length content-type x-content-sha256\\\",signature=\\\"LXWXDA8VmXXc1NRbMmXtW61IS97DfIOMAnlj+Gm+oBPNc2svXYdhcXNJ+oFPoi9qJHLnoUiHqotTzuVPXSG5iyXzFntvkAn3lFIAja52iwwwcJflEIXj\/b39eG2dCsOTmmUJguut0FsLhCRSX0eylTSLgxTFGoQi7K\/m18nafso=\\\"\" }<\/code><\/pre>\n<pre><code class=\"json\">{   \"accessUri\": \"\/p\/AlIlOEsMok7oE7YkN30KJUDjDKQjk493BKbuM-ANUNGdBBAHzHT_5lFlzYC9CQiA\/n\/{namespaceName}\/b\/{bucketName}\/o\/path\/to\/image.png\",   \"id\": \"oHJQWGxpD+2PhDqtoewvLCf8\/lYNlaIpbZHYx+mBryAad\/q0LnFy37Me\/quKhxEi:path\/to\/image.png\",   \"name\": \"read-access-to-image.png\",   \"accessType\": \"ObjectRead\",   \"objectName\": \"path\/to\/image.png\",   \"timeCreated\": \"2021-02-09T11:52:45.053Z\",   \"timeExpires\": \"2021-03-01T00:00:00Z\" }<\/code><\/pre>\n<p><strong>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451!<\/strong><\/p>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0443, \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438 \u0432 \u0447\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e \u2013 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445.<\/p>\n<p>1) \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\u00bb (SIGNING_HEADERS_NAMES). \u041e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442&nbsp;<\/p>\n<ul>\n<li>\n<p>&nbsp;date<\/p>\n<\/li>\n<li>\n<p>\u00b7 (request-target)<\/p>\n<\/li>\n<li>\n<p>\u00b7 host<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f&nbsp;POST|PUT|PATCH&nbsp;\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0442\u0440\u0438<\/p>\n<ul>\n<li>\n<p>\u00b7 content-length<\/p>\n<\/li>\n<li>\n<p>\u00b7 content-type<\/p>\n<\/li>\n<li>\n<p>\u00b7 x-content-sha256<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"php\">$signingHeadersNames = $signer-&gt;getSigningHeadersNames('POST');<\/code><\/pre>\n<p>2) SHA256 \u0445\u044d\u0448 \u00ab\u0442\u0435\u043b\u0430\u00bb \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432&nbsp;base64<\/p>\n<pre><code class=\"php\">$bodyHashBase64 = $signer-&gt;getBodyHashBase64($body);<\/code><\/pre>\n<p>3) \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/p>\n<pre><code class=\"bash\">date: Mon, 08 Feb 2021 20:51:33 GMT (request-target): post \/n\/{namespaceName}\/b\/{bucketName}\/p\/ host: objectstorage.eu-frankfurt-1.oraclecloud.com content-length: 76 content-type: application\/json x-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=<\/code><\/pre>\n<pre><code class=\"php\">$signingString = $signer-&gt;getSigningString($url, $method, $body, 'application\/json');<\/code><\/pre>\n<p>\u0425\u044d\u0448 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 (2).&nbsp;\u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c 5 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>4) \u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 (3) \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430&nbsp;RSA-SHA256<\/p>\n<pre><code class=\"php\">$signature = $signer-&gt;calculateSignature($signingString, $privateKeyString);<\/code><\/pre>\n<p>5) \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c KEY_ID<em> <\/em>\u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 API Key, \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u0435\u0448\u0430\u043c\u0438 <\/p>\n<p><code>\"{OCITENANCYID}\/{OCIUSERID}\/{OCIKEY_FINGERPRINT}\"<\/code><\/p>\n<pre><code class=\"php\">$keyId = $signer-&gt;getKeyId();<\/code><\/pre>\n<p>6) \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438&nbsp;(\u0432\u0435\u0440\u0441\u0438\u044f <code>1<\/code>\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0434\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0442&nbsp;Oracle)<\/p>\n<p><code>Authorization: Signature version=\\\"1\\\",keyId=\\\"{KEY_ID}\\\",algorithm=\\\"rsa-sha256\\\",headers=\\\"{SIGNING_HEADERS_NAMES_STRING}\\\",signature=\\\"{SIGNATURE}\\\"<\/code><\/p>\n<p>\u0433\u0434\u0435&nbsp;SIGNING_HEADERS_NAMES_STRING&nbsp;\u2013 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 (1), \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/p>\n<p><code>date (request-target) host content-length content-type x-content-sha256<\/code><\/p>\n<pre><code class=\"php\">$signingHeadersNamesString = implode(' ', $signingHeadersNames); $authorizationHeader = $signer-&gt;getAuthorizationHeader($keyId, $signingHeadersNamesString, $signature);<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430<\/p>\n<pre><code class=\"bash\">Authorization: Signature version=\\\"1\\\",keyId=\\\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq\/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq\/20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34\\\",algorithm=\\\"rsa-sha256\\\",headers=\\\"date (request-target) host content-length content-type x-content-sha256\\\",signature=\\\"LXWXDA8VmXXc1NRbMmXtW61IS97DfIOMAnlj+Gm+oBPNc2svXYdhcXNJ+oFPoi9qJHLnoUiHqotTzuVPXSG5iyXzFntvkAn3lFIAja52iwwwcJflEIXj\/b39eG2dCsOTmmUJguut0FsLhCRSX0eylTSLgxTFGoQi7K\/m18nafso=\\\"<\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 &#8212; \u0441\u043c. \u0432\u044b\u0432\u043e\u0434&nbsp;<code>var_dump()<\/code>\u0432\u044b\u0448\u0435 &#8212; \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0451 \u0438\u0437 (3), \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044f&nbsp;(request-target)&nbsp;\u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (6).<\/p>\n<p>\u041c\u043d\u0435&nbsp;\u043f\u043e\u043c\u043e\u0433\u043b\u0430&nbsp;\u0441\u0442\u0430\u0442\u044c\u044f&nbsp;<a href=\"https:\/\/www.ateam-oracle.com\/oracle-cloud-infrastructure-oci-rest-call-walkthrough-with-curl\" rel=\"noopener noreferrer nofollow\"><u>Oracle Cloud Infrastructure (OCI) REST call walkthrough with curl<\/u><\/a>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e&nbsp;<a href=\"https:\/\/github.com\/oracle\/oci-go-sdk\/blob\/master\/common\/http_signer.go\" rel=\"noopener noreferrer nofollow\"><u>GoLang&nbsp;SDK<\/u><\/a>. \u0422\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u044b \u2013&nbsp;<a href=\"https:\/\/github.com\/oracle\/oci-go-sdk\/blob\/master\/common\/http_signer_test.go\" rel=\"noopener noreferrer nofollow\"><u>\u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435<\/u><\/a>.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/541894\/\"> https:\/\/habr.com\/ru\/post\/541894\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0418\u0434\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438&nbsp;<a href=\"https:\/\/www.oracle.com\/cloud\/free\/#always-free\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/u><\/a>&nbsp;Oracle Cloud Infrastructure, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e 10 \u0413\u0411 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Concepts\/objectstorageoverview.htm\" rel=\"noopener noreferrer nofollow\"><u>Object Storage<\/u><\/a>) \u0438 10 \u0422\u0411 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441&nbsp;AWS&nbsp;S3 \u043f\u0440\u043e\u0441\u0442\u043e&nbsp;<a href=\"https:\/\/aws.amazon.com\/s3\/pricing\/?nc=sn&amp;loc=4\" rel=\"noopener noreferrer nofollow\"><u>\u043e\u0433\u0440\u043e\u043c\u043d\u0435\u0439\u0448\u0430\u044f<\/u><\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e,&nbsp;Oracle&nbsp;Cloud&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/sdks.htm\" rel=\"noopener noreferrer nofollow\"><u>\u043d\u0435 \u0438\u043c\u0435\u0435\u0442<\/u><\/a>&nbsp;\u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438&nbsp;SDK&nbsp;\u0434\u043b\u044f \u0432\u0441\u0451 \u0435\u0449\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Tasks\/s3compatibleapi.htm\" rel=\"noopener noreferrer nofollow\"><u>\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c<\/u><\/a>&nbsp;\u0441&nbsp;Amazon&nbsp;S3, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/sdk-for-php\/v3\/developer-guide\/welcome.html\" rel=\"noopener noreferrer nofollow\"><u>\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/u><\/a>, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f&nbsp;PHP.<\/p>\n<p>\u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u043d\u0435 \u0442\u0435\u0440\u043f\u0438\u0442\u0441\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u0434, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c&nbsp;<a href=\"https:\/\/github.com\/hitrov\/oci-api-php-request-sign\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/hitrov\/oci-api-php-request-sign<\/u><\/a>.<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c &#8212; \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0437\u0438\u043d (buckets) \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0444\u0430\u0439\u043b\u043e\u0432). \u041a\u043e\u0440\u0437\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 (\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0435\u0437) \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c\u0438. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0443\u044e \u043a\u043e\u0440\u0437\u0438\u043d\u0443, \u0438\u043c\u0435\u044f \u043b\u0438\u0448\u044c \u00ab\u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439\u00bb&nbsp;URL&nbsp;(\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/cliconcepts.htm\" rel=\"noopener noreferrer nofollow\"><u>CLI<\/u><\/a>&nbsp;\u0438\u043b\u0438 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 &#8212; \u043a\u043e\u043d\u0441\u043e\u043b\u0438&nbsp;Oracle&nbsp;Cloud). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0439\u043a\u0438\u0435 \u043a \u043f\u043e\u0434\u0431\u043e\u0440\u0443 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 &#8212; \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0443.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u00ab\u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u00bb \u0444\u0430\u0439\u043b\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b, \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f. \u0412&nbsp;AWS S3&nbsp;\u044d\u0442\u043e&nbsp;\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/sdk-for-php\/v3\/developer-guide\/s3-presigned-url.html\" rel=\"noopener noreferrer nofollow\"><u>Pre-Signed URL<\/u><\/a>,&nbsp;\u0430&nbsp;\u0443&nbsp;Oracle &#8212;&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Tasks\/usingpreauthenticatedrequests.htm#workingwithpar\" rel=\"noopener noreferrer nofollow\"><u>Pre-Authenticated Request<\/u><\/a>.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 AWS PHP SDK<\/p>\n<pre><code class=\"bash\">composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u044b (<code>AWS_ACCESS_KEY_ID<\/code>\u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>.<\/p>\n<p>Namespace \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<pre><code class=\"php\">$namespaceName = 'frpegp***'; $bucketName = 'test******05'; $region = 'eu-frankfurt-1'; $endpoint = \"https:\/\/$namespaceName.compat.objectstorage.$region.oraclecloud.com\";  $s3 = new Aws\\S3\\S3Client([     'version' =&gt; 'latest',     'region'  =&gt; $region,     'endpoint' =&gt; $endpoint,     'signature_version' =&gt; 'v4',     'use_path_style_endpoint' =&gt; true,     'credentials' =&gt; [         'key'    =&gt; 'AKI***YYJ', \/\/ remove if you have env var AWS_ACCESS_KEY_ID         'secret' =&gt; 'ndK***cIf', , \/\/ remove if you have env var AWS_SECRET_ACCESS_KEY     ], ]);  $cmd = $s3-&gt;getCommand('GetObject', [     'Bucket' =&gt; $bucketName,     'Key' =&gt; 'fff.txt' ]);  $request = $s3-&gt;createPresignedRequest($cmd, '+20 minutes');<\/code><\/pre>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u043e\u0442\u0434\u0430\u0432\u0430\u044f \u0432 \u043e\u0442\u0432\u0435\u0442&nbsp;<a href=\"https:\/\/www.php-fig.org\/psr\/psr-7\/\" rel=\"noopener noreferrer nofollow\"><u>PSR-7&nbsp;request<\/u><\/a>, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0438\u043c&nbsp;URL&nbsp;\u0432\u0438\u0434\u0430<\/p>\n<p><code>https:\/\/{namespace}.compat.objectstorage.eu-frankfurt-1.oraclecloud.com\/{bucket}\/fff.txt?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=***%2F20210210%2Feu-frankfurt-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210210T185244Z&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Expires=1200&amp;X-Amz-Signature=a167a***9a857<\/code><\/p>\n<p>\u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;Error&gt;     &lt;Message&gt;The required information to complete authentication was not provided.&lt;\/Message&gt;     &lt;Code&gt;SignatureDoesNotMatch&lt;\/Code&gt; &lt;\/Error&gt;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430, \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0438\u043d\u043e\u0433\u043e, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u043b\u043e \ud83d\ude42<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a&nbsp;API, \u0432\u0435\u0434\u044c \u0432\u0441\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/signingrequests.htm\" rel=\"noopener noreferrer nofollow\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>, \u043f\u0443\u0441\u0442\u044c \u0438 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0438\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\\\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\\\u0431\u044d\u043a\u0430\u043f\u0430&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/database\/20160918\/AutonomousDatabase\/\" rel=\"noopener noreferrer nofollow\"><u>\u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/a>, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/dns\/20180115\/\" rel=\"noopener noreferrer nofollow\"><u>DNS<\/u><\/a>&nbsp;\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/emaildelivery\/20170907\/\" rel=\"noopener noreferrer nofollow\"><u>Email<\/u><\/a>. \u0412\u0441\u0451 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/\" rel=\"noopener noreferrer nofollow\">API Reference and Endpoints<\/a>.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0443\u0436\u043d\u044b \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 (\u043a\u043e\u043d\u0441\u043e\u043b\u0438)&nbsp;Oracle&nbsp;Cloud \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0439\u0442\u0438 \u0432&nbsp;User&nbsp;Settings<\/p>\n<figure class=\"\"><figcaption>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 Oracle Cloud<\/figcaption><\/figure>\n<p>API Keys\u200a\u2014\u200aAdd API Key<\/p>\n<figure class=\"\"><figcaption>API Keys &#8212; Add API Key<\/figcaption><\/figure>\n<p>Download&nbsp;private&nbsp;key&nbsp;(\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435), \u0437\u0430\u0442\u0435\u043c&nbsp;Add<\/p>\n<figure class=\"full-width\"><figcaption>Download Private Key and Add<\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043e\u043d\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443<\/p>\n<figure class=\"full-width\"><figcaption>Configuration File example<\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f AWS PHP SDK, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b Customer Secret Keys (\u043e\u043d\u0438 \u0436\u0435 <code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code> \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 Amazon.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Oracle Cloud Infrastructure mini PHP SDK&nbsp;(\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439!)<\/p>\n<pre><code class=\"bash\">composer require hitrov\/oci-api-php-request-sign<\/code><\/pre>\n<p>\u041f\u0430\u043a\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e&nbsp;PSR-4 \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<pre><code class=\"php\">require 'vendor\/autoload.php'; use Hitrov\\OCI\\Signer;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u0437\u044f\u0442\u044b\u0435 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c).<\/p>\n<pre><code class=\"bash\">OCI_TENANCY_ID=ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq OCI_USER_ID=ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq OCI_KEY_FINGERPRINT=20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34 OCI_PRIVATE_KEY_FILENAME=\/path\/to\/privatekey.pem<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"php\">$signer = new Signer;<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u0440\u0435\u0434\u044b \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432&nbsp;<a href=\"https:\/\/github.com\/hitrov\/oci-api-php-request-sign#alternatives-for-providing-credentials\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/hitrov\/oci-api-php-request-sign#alternatives-for-providing-credentials<\/u><\/a>&nbsp;, \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>\u041c\u044b&nbsp;\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c&nbsp;\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c&nbsp;<a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/api\/#\/en\/objectstorage\/20160918\/PreauthenticatedRequest\/CreatePreauthenticatedRequest\" rel=\"noopener noreferrer nofollow\"><u>CreatePreauthenticatedRequest<\/u><\/a><u>.<\/u><\/p>\n<p>\u0412\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c (\u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f) \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code class=\"php\">public function getHeaders(     string $url, string $method = 'GET', ?string $body = null, ?string $contentType = 'application\/json', string $dateString = null ): array<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<pre><code class=\"php\">$curl = curl_init(); $url = 'https:\/\/objectstorage.eu-frankfurt-1.oraclecloud.com\/n\/{namespaceName}\/b\/{bucketName}\/p\/'; $method = 'POST'; $body = '{\"accessType\": \"ObjectRead\", \"name\": \"read-access-to-image.png\", \"objectName\": \"path\/to\/image.png\", \"timeExpires\": \"2021-03-01T00:00:00-00:00\"}';  $headers = $signer-&gt;getHeaders($url, $method, $body, 'application\/json'); var_dump($headers);  $curlOptions = [   CURLOPT_URL =&gt; $url,   CURLOPT_RETURNTRANSFER =&gt; true,   CURLOPT_ENCODING =&gt; '',   CURLOPT_MAXREDIRS =&gt; 10,   CURLOPT_TIMEOUT =&gt; 5,   CURLOPT_FOLLOWLOCATION =&gt; true,   CURLOPT_HTTP_VERSION =&gt; CURL_HTTP_VERSION_1_1,   CURLOPT_CUSTOMREQUEST =&gt; $method,   CURLOPT_HTTPHEADER =&gt; $headers, ];  if ($body) {   \/\/ not needed for GET or HEAD requests   $curlOptions[CURLOPT_POSTFIELDS] = $body; }  curl_setopt_array($curl, $curlOptions); $response = curl_exec($curl); echo $response; curl_close($curl);<\/code><\/pre>\n<pre><code class=\"bash\">array(6) {   [0]=&gt;   string(35) \"date: Mon, 08 Feb 2021 20:49:22 GMT\"   [1]=&gt;   string(50) \"host: objectstorage.eu-frankfurt-1.oraclecloud.com\"   [2]=&gt;   string(18) \"content-length: 76\"   [3]=&gt;   string(30) \"content-type: application\/json\"   [4]=&gt;   string(62) \"x-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=\"   [5]=&gt;   string(538) \"Authorization: Signature version=\\\"1\\\",keyId=\\\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq\/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq\/20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34\\\",algorithm=\\\"rsa-sha256\\\",headers=\\\"date (request-target) host content-length content-type x-content-sha256\\\",signature=\\\"LXWXDA8VmXXc1NRbMmXtW61IS97DfIOMAnlj+Gm+oBPNc2svXYdhcXNJ+oFPoi9qJHLnoUiHqotTzuVPXSG5iyXzFntvkAn3lFIAja52iwwwcJflEIXj\/b39eG2dCsOTmmUJguut0FsLhCRSX0eylTSLgxTFGoQi7K\/m18nafso=\\\"\" }<\/code><\/pre>\n<pre><code class=\"json\">{   \"accessUri\": \"\/p\/AlIlOEsMok7oE7YkN30KJUDjDKQjk493BKbuM-ANUNGdBBAHzHT_5lFlzYC9CQiA\/n\/{namespaceName}\/b\/{bucketName}\/o\/path\/to\/image.png\",   \"id\": \"oHJQWGxpD+2PhDqtoewvLCf8\/lYNlaIpbZHYx+mBryAad\/q0LnFy37Me\/quKhxEi:path\/to\/image.png\",   \"name\": \"read-access-to-image.png\",   \"accessType\": \"ObjectRead\",   \"objectName\": \"path\/to\/image.png\",   \"timeCreated\": \"2021-02-09T11:52:45.053Z\",   \"timeExpires\": \"2021-03-01T00:00:00Z\" }<\/code><\/pre>\n<p><strong>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451!<\/strong><\/p>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0443, \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438 \u0432 \u0447\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e \u2013 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445.<\/p>\n<p>1) \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\u00bb (SIGNING_HEADERS_NAMES). \u041e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442&nbsp;<\/p>\n<ul>\n<li>\n<p>&nbsp;date<\/p>\n<\/li>\n<li>\n<p>\u00b7 (request-target)<\/p>\n<\/li>\n<li>\n<p>\u00b7 host<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f&nbsp;POST|PUT|PATCH&nbsp;\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0442\u0440\u0438<\/p>\n<ul>\n<li>\n<p>\u00b7 content-length<\/p>\n<\/li>\n<li>\n<p>\u00b7 content-type<\/p>\n<\/li>\n<li>\n<p>\u00b7 x-content-sha256<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"php\">$signingHeadersNames = $signer-&gt;getSigningHeadersNames('POST');<\/code><\/pre>\n<p>2) SHA256 \u0445\u044d\u0448 \u00ab\u0442\u0435\u043b\u0430\u00bb \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432&nbsp;base64<\/p>\n<pre><code class=\"php\">$bodyHashBase64 = $signer-&gt;getBodyHashBase64($body);<\/code><\/pre>\n<p>3) \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/p>\n<pre><code class=\"bash\">date: Mon, 08 Feb 2021 20:51:33 GMT (request-target): post \/n\/{namespaceName}\/b\/{bucketName}\/p\/ host: objectstorage.eu-frankfurt-1.oraclecloud.com content-length: 76 content-type: application\/json x-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=<\/code><\/pre>\n<pre><code class=\"php\">$signingString = $signer-&gt;getSigningString($url, $method, $body, 'application\/json');<\/code><\/pre>\n<p>\u0425\u044d\u0448 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 (2).&nbsp;\u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c 5 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>4) \u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 (3) \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430&nbsp;RSA-SHA256<\/p>\n<pre><code class=\"php\">$signature = $signer-&gt;calculateSignature($signingString, $privateKeyString);<\/code><\/pre>\n<p>5) \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c KEY_ID<em> <\/em>\u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 API Key, \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u0435\u0448\u0430\u043c\u0438 <\/p>\n<p><code>\"{OCITENANCYID}\/{OCIUSERID}\/{OCIKEY_FINGERPRINT}\"<\/code><\/p>\n<pre><code class=\"php\">$keyId = $signer-&gt;getKeyId();<\/code><\/pre>\n<p>6) \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438&nbsp;(\u0432\u0435\u0440\u0441\u0438\u044f <code>1<\/code>\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0434\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0442&nbsp;Oracle)<\/p>\n<p><code>Authorization: Signature version=\\\"1\\\",keyId=\\\"{KEY_ID}\\\",algorithm=\\\"rsa-sha256\\\",headers=\\\"{SIGNING_HEADERS_NAMES_STRING}\\\",signature=\\\"{SIGNATURE}\\\"<\/code><\/p>\n<p>\u0433\u0434\u0435&nbsp;SIGNING_HEADERS_NAMES_STRING&nbsp;\u2013 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 (1), \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/p>\n<p><code>date (request-target) host content-length content-type x-content-sha256<\/code><\/p>\n<pre><code class=\"php\">$signingHeadersNamesString = implode(' ', $signingHeadersNames); $authorizationHeader = $signer-&gt;getAuthorizationHeader($keyId, $signingHeadersNamesString, $signature);<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430<\/p>\n<pre><code class=\"bash\">Authorization: Signature<\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-317825","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=317825"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317825\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}