参考了一下这位大佬的,可以去看看控制台配置流程:https://blog.youkuaiyun.com/yangkangv/article/details/88663167?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
记得用composer导下包,composer require aliyuncs/oss-sdk-php
namespace app\controller;
use xhyadminframework\base\XhyController;
use AlibabaCloud\Sts\Sts;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Sts\V20150401\AssumeRole;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Client\Exception\ClientException;
use app\Request;
use think\facade\Env;
/**
* Class StsTest
*
* @package AlibabaCloud\Tests\Feature
*/
class AliyunOss extends XhyController
{
/**
* @expectedException \AlibabaCloud\Client\Exception\ServerException
* @expectedExceptionMessageRegExp /EntityNotExist.Role: The specified Role not exists/
* @throws ClientException
* @throws ServerException
*/
//构建AssumeRole请求
public function AliyunSts(Request $request)
{
$config = [
"AccessKeyID"=>ENV::get('AliYunOss.ACCESSKEYID'),
"AccessKeySecret"=>ENV::get('AliYunOss.SECRET'),
"RoleArn"=>ENV::get('AliYunOss.ROLEARN'),
"BucketName"=>ENV::get('AliYunOss.BUCKETNAME'),
"Endpoint"=>ENV::get('AliYunOss.ENTPOINT'),
"TokenExpireTime"=>"900"
];
//只有put的权限
// $policy = '{
// "Statement": [
// {
// "Action": [
// "oss:GetObject",
// "oss:PutObject",
// "oss:DeleteObject",
// "oss:ListParts",
// "oss:AbortMultipartUpload",
// "oss:ListObjects"
// ],
// "Effect": "Allow",
// "Resource": ["acs:oss:*:*:'.$config['BucketName'].'/'.$config['PolicyFile'].'", "acs:oss:*:*:'.$config['BucketName'].'"]
// }
// ],
// "Version": "1"
// }';
//这个是所有权限
$policy ='{
"Statement": [
{
"Action": [
"oss:*"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:*"]
}
],
"Version": "1"
}';
AlibabaCloud::accessKeyClient($config['AccessKeyID'], $config['AccessKeySecret'])->regionId('cn-hangzhou')->name('default');
$rst = Sts::v20150401()
->assumeRole()
//指定角色ARN
->withRoleArn($config['RoleArn'])
//RoleSessionName即临时身份的会话名称,用于区分不同的临时身份
->withRoleSessionName('AliyunSTSAssume1')
//设置权限策略以进一步限制角色的权限
->withPolicy($policy)
->timeout(30)
->connectTimeout(30)
//口令有效期是少900,最大没限制
->withDurationSeconds(900)
->request();
// var_dump($rst);
$code = $rst->getStatusCode();
// var_dump($code);
$json = $rst->jsonSerialize();
// var_dump($json);
//这里获取body是得不到有用信息的要用上面的json
$body = $rst->getBody();
if ($code == 200) {
// $json['Credentials']['imageName']=$config['PolicyFile'];
return $this->success($json['Credentials'],'success');
}else{
return $this->fail('获取失败');
}
}
}