PHP

首页 -  PHP  -  使用STS临时访问凭证访问OSS上传图片

使用STS临时访问凭证访问OSS上传图片

您可以通过STS服务给其他用户颁发一个临时访问凭证。该用户可使用临时访问凭证在规定时间内访问您的OSS资源。临时访问凭证无需透露您的长期密钥,使您的OSS资源访问更加安全。

  1. 1.App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。
  2. 2.App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。
  3. 3.STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。
  4. 4.App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。
  5. 5.App客户端使用本地缓存的临时访问凭证去请求OSS API。OSS收到访问请求后,会通过STS服务来验证访问凭证,正确响应用户请求。
  6. 步骤一:创建RAM用户

    1. 1.登录RAM控制台
    2. 2.在左侧导航栏,选择身份管理 > 用户。
    3. 3.单击创建用户。
    4. 4.输入登录名称和显示名称。
    5. 5.在访问方式区域下,选择Open API 调用访问,然后单击确定。
    6. 6.单击复制,保存访问密钥(AccessKey ID 和 AccessKey Secret)。
  7. 步骤二:为RAM用户授予请求AssumeRole的权限

    1. 1.单击已创建RAM用户右侧对应的添加权限。
    2. 2.在添加权限页面,选择AliyunSTSAssumeRoleAccess系统策略。

    3. 3.确定
  8. 步骤三:创建用于获取临时访问凭证的角色

    1. 1.在左侧导航栏,选择身份管理 > 角色。
    2. 2.单击创建角色,选择可信实体类型为阿里云账号,单击下一步。
    3. 3.角色名称填写为RamOssTest,选择云账号为当前云账号。
    4. 4.单击完成。角色创建完成后,单击关闭。
    5. 5.在RAM角色管理页面,搜索框输入角色名称RamOssTest
    6. 6.单击复制,保存角色的ARN。
    7. 步骤四:为角色授予上传文件的权限

      1. 创建上传文件的自定义权限策略。
        1. 在左侧导航栏,选择权限管理 > 权限策略。
        2. 单击创建权限策略。
        3. 在创建权限策略页面,单击脚本编辑,然后在策略文档输入框中赋予角色向目标存储空间examplebucket下的目录exampledir上传文件的权限。具体配置示例如下。
        4. {
              "Version": "1",
              "Statement": [
               {
                     "Effect": "Allow",
                     "Action": [
                       "oss:PutObject"
                     ],
                     "Resource": [
                       "acs:oss:*:*:examplebucket/exampledir",
                       "acs:oss:*:*:examplebucket/exampledir/*"
                     ]
               }
              ]
          }
    1. 策略配置完成后,单击下一步。
    2. 在基本信息区域,填写策略名称为RamTestPolicy,然后单击确定。
  1. 为RAM角色RamOssTest授予自定义权限策略。
    1. 在左侧导航栏,选择身份管理 > 角色。
    2. 在角色页面,找到目标RAM角色RamOssTest
    3. 单击RAM角色RamOssTest右侧的添加权限。
    4. 在添加权限页面下的自定义策略页签,选择已创建的自定义权限策略RamTestPolicy
    5. 单击确定。
    6. 步骤五:获取临时访问凭证

    7. 安装这个扩展
      composer require alibabacloud/sdk
    8.   AlibabaCloud::accessKeyClient($config['secretId'], $config['secretKey'])
                          ->regionId($config['region'])
                          ->asDefaultClient();
      
                      $result = AlibabaCloud::rpc()
                          ->product('Sts')
                          ->scheme('https')
                          ->version('2015-04-01')
                          ->action('AssumeRole')
                          ->method('POST')
                          ->host('sts.aliyuncs.com')
                          ->options([
                              'query' => [
                                  'DurationSeconds'=>$config['durationSeconds'],//时长
                                  'RoleArn'=>$config['roleArn'],//角色ARn
                                  'RoleSessionName'=>$roleSessionName//访问名称自己定义
                              ],
                          ])
                          ->request();

前端上传测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>

<body>
<button id="upload">上传</button>
<input id="file" type="file" />
<!-- 导入SDK文件 -->
<script
        type="text/javascript"
        src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"
></script>
<script type="text/javascript">
    const client = new OSS({
        // yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
        region: 'oss-cn-beijing',
        // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
        accessKeyId: 'STS.NSq7wNDckxWSEfWKZyZhWUtLC',
        accessKeySecret: '6aT48NcdmRmovdstS9ajWNF7eYfAvWuYXCTZAFa8LpuK',
        // 从STS服务获取的安全令牌(SecurityToken)。
        stsToken: 'CAIS/wF1q6Ft5B2yfSjIr5DEfM36qbxKz5W4R0Dmr1osVud7urHnoTz2IHpFenFoCO4avvg/lGlW7/cTlr90UIRyWUvHYM1H7ZlG6jSob4/AvfvstRPXE3VJQTr9MQXy+eOPScebJYqvV5XAQlTAkTAJstmeXD6+XlujHISUgJp8FLo+VRW5ajw0b7U/ZHEVyqkgOGDWKOymPzPzn2PUFzAIgAdnjn5l4qnNqa/1qDim1QOmlbFI+9+pc8P9P5U3Ya0SCYnlgLZEEYPayzNV5hRw86N7sbdJ4z+vvKvGWQgPu03XbbaEro0/dVEgN/kgebRNqf/njuF1ofDDXHJYbfj0o4sagAGj2hHKFF62nXLH1eiNekTizIbLYME9qmkm7lKt+9O6sh33Lbi3qaAEPNe3HimE4tYcAiMIZBK3XZWAla7yv0LeYfIXnuT4Nslgq/nH7S78tpdSiOj2BFWMUmpseQop2FZg/FpaZwuAzPdfV1a2Me8PL0/SciBeRdkTI9s23+uAgw==',

        bucket: 'xiaoshutest'
    });
   
    const upload = document.getElementById("upload");
    const headers = {
        // 指定该Object被下载时网页的缓存行为。
        // 'Cache-Control': 'no-cache',
        // 指定该Object被下载时的名称。
        // 'Content-Disposition': 'oss_download.txt',
        // 指定该Object被下载时的内容编码格式。
        // 'Content-Encoding': 'UTF-8',
        // 指定过期时间。
        // 'Expires': 'Wed, 08 Jul 2022 16:57:01 GMT',
        // 指定Object的存储类型。
        // 'x-oss-storage-class': 'Standard',
        // 指定Object的访问权限。
        // 'x-oss-object-acl': 'private',
        // 设置Object的标签,可同时设置多个标签。
        // 'x-oss-tagging': 'Tag1=1&Tag2=2',
        // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true,表示禁止覆盖同名Object。
        // 'x-oss-forbid-overwrite': 'true',
    };

    async function putObject () {
        try {
            const data = document.getElementById("file").files[0];
            console.log(data);
            console.log(222);
            // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
            // 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
            // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
            const result = await client.put(
                "/exampleobject22.png",
                data
                //{headers}
            );
            console.log(result);
        } catch (e) {
            console.log(2);
            console.log(e);
        }
    }
    upload.addEventListener("click", () => {
        putObject();
    });
</script>
</body>
</html>

如果前端上传的时候又跨域的问题在这里设置


官方文档https://help.aliyun.com/document_detail/100624.html?spm=5176.8466032.help.dexternal.739f1450FwuC0e

(1)
分享:

本文由:xiaoshu168 作者:xiasohu611发表,转载请注明来源!

标签:

相关阅读