阿里云oss sts鉴权

本文详细介绍了如何使用阿里云的对象存储服务(OSS)和安全令牌服务(STS),通过PHP实现临时授权,包括配置环境变量、构建AssumeRole请求及处理响应。适合希望深入了解并实践阿里云OSS和STS的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了一下这位大佬的,可以去看看控制台配置流程: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('获取失败');

          }


    }
}
### 阿里云OSS STS 使用方法 阿里云对象存储服务(Object Storage Service, OSS)提供了安全令牌服务(Security Token Service, STS),允许临时访问凭证的获取,从而实现更细粒度的安全控制[^1]。 #### 获取临时访问凭证 为了使用STS功能,应用程序需向STS申请临时访问凭证。此过程涉及调用`AssumeRole` API接口,并传递角色ARN以及会话名称作为参数。成功响应将返回一组临时安全凭证,包括AccessKeyId、SecretAccessKey和SessionToken。这些信息可用于初始化SDK客户端实例来执行后续操作[^3]。 ```python import oss2 auth = oss2.StsAuth('your-access-key-id', 'your-secret-access-key', 'your-session-token') bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name') ``` #### 前端直传流程 在前端应用中实施STS机制时,通常采用如下工作流: - 后台服务器扮演可信实体的角色,负责请求STS颁发短期有效的认证票据; - 将获得的临时密钥下发给浏览器中的JavaScript代码片段; - 利用上述凭据构建签名URL或直接设置到OSS SDK配置项内完成资源上传任务[^2]。 #### 解决常见问题 当处理与OSS相关的STS事务时,开发者经常遭遇两类典型障碍——跨域资源共享(CORS)错误及限不足提示。前者可通过适当调整Bucket级别的CORS规则得以缓解;后者则建议仔细审查所使用的RAM Policy是否授予了必要的动作许可范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值