全部產品
Search
文件中心

Object Storage Service:授權訪問

更新時間:Aug 30, 2018

使用簽名URL進行臨時授權

您可以將生成的簽名URL提供給訪客進行臨時訪問。生成簽名URL時,您可以指定URL的過期時間,來限制訪客的訪問時長。授權訪問的完整代碼請參見GitHub

生成下載的簽名URL

以下代碼用於生成下載的簽名URL:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. use OSS\Http\RequestCore;
  11. use OSS\Http\ResponseCore;
  12. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  13. $accessKeyId = "<yourAccessKeyId>";
  14. $accessKeySecret = "<yourAccessKeySecret>";
  15. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  16. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  17. $bucket= "<yourBucketName>";
  18. $object = "<yourObjectName>";
  19. $securityToken = "<yourSecurityToken>";
  20. // 設定URL的有效期間為3600秒。
  21. $timeout = 3600;
  22. try {
  23. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
  24. // 生成GetObject的簽名URL。
  25. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
  26. } catch (OssException $e) {
  27. printf(__FUNCTION__ . ": FAILED\n");
  28. printf($e->getMessage() . "\n");
  29. return;
  30. }
  31. print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
  32. // 可以使用代碼來訪問簽名的URL,也可以輸入到瀏覽器中進行訪問。
  33. $request = new RequestCore($signedUrl);
  34. // 生成的URL預設以GET方式訪問。
  35. $request->set_method('GET');
  36. $request->add_header('Content-Type', '');
  37. $request->send_request();
  38. $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
  39. if ($res->isOK()) {
  40. print(__FUNCTION__ . ": OK" . "\n");
  41. } else {
  42. print(__FUNCTION__ . ": FAILED" . "\n");
  43. };

生成上傳的簽名URL

以下代碼用於生成上傳的簽名URL:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. use OSS\Http\RequestCore;
  11. use OSS\Http\ResponseCore;
  12. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  13. $accessKeyId = "<yourAccessKeyId>";
  14. $accessKeySecret = "<yourAccessKeySecret>";
  15. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  16. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  17. $bucket= "<yourBucketName>";
  18. $object = "<yourObjectName>";
  19. $securityToken = "<yourSecurityToken>";
  20. $timeout = 3600;
  21. try {
  22. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
  23. // 生成PutObject的簽名URL。
  24. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
  25. } catch (OssException $e) {
  26. printf(__FUNCTION__ . ": FAILED\n");
  27. printf($e->getMessage() . "\n");
  28. return;
  29. }
  30. print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
  31. $content = "Hello OSS.";
  32. $request = new RequestCore($signedUrl);
  33. // 生成的URL以PUT方式訪問。
  34. $request->set_method('PUT');
  35. $request->add_header('Content-Type', '');
  36. $request->add_header('Content-Length', strlen($content));
  37. $request->set_body($content);
  38. $request->send_request();
  39. $res = new ResponseCore($request->get_response_header(),
  40. $request->get_response_body(), $request->get_response_code());
  41. if ($res->isOK()) {
  42. print(__FUNCTION__ . ": OK" . "\n");
  43. } else {
  44. print(__FUNCTION__ . ": FAILED" . "\n");
  45. };

使用STS進行臨時授權

您可以通過STS(Security Token Service)進行臨時授權訪問。更多有關STS的內容請參見存取控制API參考(STS)中的簡介。關於帳號及授權的詳細資料請參見最佳實務中的STS臨時授權訪問

以下代碼用於使用STS臨時授權上傳檔案:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. $bucket= "<yourBucketName>";
  16. $object = "<yourObjectName>";
  17. $securityToken = "<yourSecurityToken>";
  18. $content = "Hi, OSS.";
  19. try {
  20. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
  21. $ossClient->putObject($bucket, $object, $content);
  22. } catch (OssException $e) {
  23. print $e->getMessage();
  24. }