1. 程式人生 > 實用技巧 >oss儲存前端直傳向後臺請求臨時授權(下)

oss儲存前端直傳向後臺請求臨時授權(下)

首先去阿里雲下載aliyun-php-sdk-core和aliyun-php-sdk-sts包(上個文章給出了阿里連結文件,裡面有下載的地址)

<?php

namespace App\Http\Controllers\Api\Sts;

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Sts\Sts;
use PHPUnit\Framework\TestCase;

class Controller extends TestCase
{
/**
* @expectedException \AlibabaCloud\Client\Exception\ServerException
* @expectedExceptionMessageRegExp /EntityNotExist.Role: The specified Role not exists/
* @throws ClientException
* @throws ServerException
*/
//構建AssumeRole請求
public function stsOss()
{
//構建阿里雲client時需要設定AccessKey IDAccessKey Secret
AlibabaCloud::accessKeyClient('阿里ram使用者id', '阿里ram使用者key')
->regionId('cn-shanghai')(oss儲存地)
->name('default');

$message = Sts::v20150401()
->assumeRole()
//指定角色ARN
->withRoleArn('acs:ram::161364*****:role/*****')(阿里ram使用者的arn)(一定要給許可權否則訪問報錯)
//RoleSessionName即臨時身份的會話名稱,用於區分不同的臨時身份
->withRoleSessionName('client_name')

//設定許可權策略以進一步限制角色的許可權
//以下許可權策略表示擁有所有OSS的只讀許可權
->withPolicy('{
"Statement":[
{
"Action":
[
"oss:Get*",
"oss:List*"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}')
->connectTimeout(60)
->timeout(65)
->request();
$code = $message->getStatusCode();
if ($code != 200) {
return response()->json('授權失敗');
}
return response()->json($message['Credentials']);
}

}
成功返回:
{ "SecurityToken":"CAISlwJ1q6Ft5B2yfSjIr5aCfYOCjrJW55eoTG6Di20yXMlnt43g2zz2IHpEenRpCew**/wznWtT6vsZlqJ4T55IQ1Dza8J148yTTKFxtsyT1fau5Jko1beRewHKeSGZsebWZ+LmNpa/Ht6md1HDkAJq3LL+bk/Mdle5MJqP++MFDtMMRVuXYCYEZrZRPRAwjM4BKTmrQpTLCBPxhXfKB0dFoxd1jXgFiZ6y2cqB8BHT/jaYo603392ve8P6M5cxY8ciCYbsh7FMG/CfgHIK2X9j77xriaFIwzDDs+yGDkNZixf8aLCErIA2fFMgN/BmQvUf8KWnj45xvu3CioLw0A1ROuJYVSvSQo26ydfDAvmuMtsp8jh/q7lWVLoagAEgYUmaOMoZ+IsvuJRLD/tAMvqGau29U7LbrZsg8QG0O9Jm1MGQfVEE99t3LkKIkuJVgM59AQFt2jZSjDiAqqJlHJvB9migvgtAk00u4SfCE2C8eQqPLFyJrstRZVlahZXslaq81loR6Qi0dAHN0gPMi3yofh/I0bvZsq+J7noKeQ==", "AccessKeyId":"STS.NU7696cmwPUCNH2omg*****", "AccessKeySecret":"37C5pBQX88EiwgVbTPU1QrQifwRLacq7WGTQfP****", "Expiration":"2020-08-10T06:33:11Z" } 這是臨時許可權token與id和key