记一次php获取阿里云STS临时授权访问OSS,深坑

场景:手机端调用阿里云视频点播sdk,需要一个临时访问权限
在这里插入图片描述
这是上面入口的链接

发现里面对安全授权配置方面说的不够细,根本看不懂。
后来找到了这个文档,STS临时授权访问OSS,由于不太懂视频点播和oss的关系,不知道适不适用。其实视频点播就是基于oss的。(其实再看这篇文档之前已经踩了很多坑了,这里直接按照正确的顺序给大家说一下)
但是,视频点播的权限和oss的权限是不一样的,可以看一下视频点播sts临时授权
访问
,这样配置方面就做好了,然后需要记一下视频点播的区域编码和刚才创建的角色的ARN,是需要写到代码里的。在这里插入图片描述
然后就是代码部分了,只能说文档里给的代码就是个坑。
先下载阿里云的php-sdk,好像有多个版本,有的已经不维护不推荐使用了,给出了新的下载方式,可以用composer直接安装。官方安装文档入口

上代码

<?php


namespace common\proxy;

use AlibabaCloud\Sts\Sts;
use PHPUnit\Framework\TestCase;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Sts\V20150401\AssumeRole;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Client\Exception\ClientException;
/**
 * Class StsTest
 *
 * @package   AlibabaCloud\Tests\Feature
 */
class AliyunStsProxy extends TestCase
{
    /**
     * @expectedException \AlibabaCloud\Client\Exception\ServerException
     * @expectedExceptionMessageRegExp /EntityNotExist.Role: The specified Role not exists/
     * @throws ClientException
     * @throws ServerException
     */
    //构建AssumeRole请求
    public function Sts()
    {   
        //构建阿里云client时需要设置AccessKey ID和AccessKey Secret
        AlibabaCloud::accessKeyClient(\yii::$app->params['oss']['accessKeyId'], \yii::$app->params['oss']['accessKeySecret'])
        ->regionId(\yii::$app->params['vod']['region'])->asDefaultClient();

        try {
            $response = Sts::v20150401()
            ->assumeRole()
            //指定角色ARN
            ->withRoleArn(\yii::$app->params['vod']['acs'])
            //RoleSessionName即临时身份的会话名称,用于区分不同的临时身份
            ->withRoleSessionName(\yii::$app->params['vod']['sessionName'])
            //设置权限策略以进一步限制角色的权限
            ->withPolicy('{
            	"Version": "1",
            	"Statement": [{
            		"Action": "vod:*",
            		"Resource": "*",
            		"Effect": "Allow"
            	}]
                }')
            ->connectTimeout(300)
            ->timeout(300)
            ->request();
            
            if($response->getStatusCode() == 200){
                $body = $response->getBody();
                $content = json_decode($body);
                $ret['status'] = true;
                $ret['data']['key_id'] = $content->Credentials->AccessKeyId;
                $ret['data']['key_secret'] = $content->Credentials->AccessKeySecret;
                $ret['data']['sts_token'] = $content->Credentials->SecurityToken;
                return $ret;
            }else{
                $ret['status'] = false;
                $ret['data'] = [];
                return $ret;
            }
        } catch (\Exception $e) {
            $ret['status'] = false;
            $ret['msg'] = $e->getMessage();
            $ret['data'] = [];
            return $ret;
        }
  
    }
}

这样就可以获取临时的AccessKeyId、AccessKeySecret、SecurityToken了
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值