阿里云oss通过sts securityToken获取自签名授权链接php版

本文介绍了如何在PHP中利用STS和签名URL机制,实现对阿里云OSS资源的目录授权访问,包括获取security-token、签名生成以及调用示例,同时针对官方SDK的不足进行了讨论。
摘要由CSDN通过智能技术生成

参考

如何使用STS以及签名URL临时授权访问OSS资源(PHP)_对象存储(OSS)-阿里云帮助中心

目的

官方sdk并没有授权目录,而很多时候需要授权目录,比如hls文件夹授权,总不能几千个切片全部跑一遍授权

主要实现oss地址+Expires+OSSAccessKeyId+security-token+Signature自行拼接成授权访问地址,只需.无需new

代码

获取security-token

参考上面官方地址,下述中tk包含获取security-token结果返回的accessKeyId,accessKeySecret,securityToken

获取签名

Oss.php

public static function getSignature($tk,$endpoint,$bucket,$object,$timeout,$method="GET",$options=array())
    {
        $accessKeyId = $tk['accessKeyId'];
        $accessKeySecret = $tk['accessKeySecret'];
        $securityToken = $tk['securityToken'];
        $timeout = time()+$timeout;
        $stringToSign=$method."\n\n\n".$timeout."\n".'/'.$bucket.'/'.$object.'?security-token='.$securityToken;
        $signature=base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret, true));
        $query = [
            'security-token'=>$securityToken,
            'OSSAccessKeyId'=>$accessKeyId,
            'Expires'=>strval($timeout),
            'Signature'=>$signature,
        ];
        $queryString=self::toQueryString($query);
        $pp = parse_url($endpoint);
        $parsed_url=[
            'scheme'=>$pp['scheme'],
            'host'=>$bucket.'.'.$pp['host'],
            'path'=>'/'.$object,
            'query'=>$queryString,
        ];
        $url = self::unparseUrl($parsed_url);
        return $url;
    }
    private static function toQueryString($options = array())
    {
        $temp = array();
        uksort($options, 'strnatcasecmp');
        foreach ($options as $key => $value) {
            if (is_string($key) && !is_array($value)) {
                if (strlen($value) > 0) {
                    $temp[] = rawurlencode($key) . '=' . rawurlencode($value);
                } else {
                    $temp[] = rawurlencode($key);
                }
            }
        }
        return implode('&', $temp);
    }
    private static function unparseUrl($parsed_url) {
        $scheme   = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
        $host     = isset($parsed_url['host']) ? $parsed_url['host'] : '';
        $port     = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
        $path     = isset($parsed_url['path']) ? $parsed_url['path'] : '';
        $query    = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
        return "$scheme$host$port$path$query";
    }

调用

$oss = new Oss($id);
//        $oss->getTK();
        $endpoint = "https://oss-cn-shenzhen.aliyuncs.com";
        $bucket= "b999a7c3bcc5535b4c8e277e18b7b6e1";
        $tk = unserialize(file_get_contents('tk'));
        $object=$oss_list_file;
        $timeout=3000;
        $method = "GET";
        $options=array();
        $link = $oss::getSignature($tk,$endpoint,$bucket,$object,$timeout,$method,$options);
        echo $link;

 

结语

为什么官方文档没有类似说明?也许是大有大的难处吧!累死本小白了!!

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您可以通过以下步骤使用环境变量获取阿里云OSS的AccessKeyId: 1. 登录阿里云控制台,进入OSS管理控制台。 2. 在左侧导航栏中,选择“AccessKey管理”。 3. 在AccessKey管理页面,单击“创建AccessKey”按钮。 4. 在弹出的对话框中,单击“确认”按钮。此时会生成AccessKeyId和AccessKeySecret,并且只会显示一次,请务必妥善保存。 接下来,您可以在您的操作系统中设置环境变量: - Windows操作系统: 1. 在桌面上,右键单击“计算机”或“此电脑”,选择“属性”。 2. 在左侧导航栏中,选择“高级系统设置”。 3. 在弹出的对话框中,单击“环境变量”按钮。 4. 在“用户变量”或“系统变量”区域中,单击“新建”按钮。 5. 输入变量名为`ALIYUN_ACCESS_KEY_ID`,变量值为您阿里云OSS的AccessKeyId。 6. 单击“确定”按钮保存设置。 - Linux或Mac操作系统: 1. 打开终端。 2. 输入以下命令,将环境变量添加到`~/.bashrc`或`~/.bash_profile`文件中: ``` export ALIYUN_ACCESS_KEY_ID=您的AccessKeyId ``` 3. 执行以下命令使环境变量生效: ``` source ~/.bashrc ``` 或 ``` source ~/.bash_profile ``` 现在,您可以在您的代码中使用环境变量来获取阿里云OSS的AccessKeyId,例如在Python中可以使用`os.environ`来获取该变量的值: ```python import os access_key_id = os.environ.get('ALIYUN_ACCESS_KEY_ID') ``` 请确保您妥善保管AccessKey信息,并不要将其泄露给他人,以确保您的阿里云OSS账户的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

etafort

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值