全部产品
对象存储 OSS

授权访问

更新时间:2017-06-13 10:29:39   分享:   

使用URL签名授权访问

通过生成签名URL的形式提供给用户一个临时的访问URL。在生成URL时,您可以指定URL过期的时间,从而限制用户长时间访问。

提示:

  • 以下场景的完整代码请参考:GitHub

使用私有的下载链接

生成GetObject的签名url示例如下:

  1. <?php
  2. /**
  3. * 生成GetObject的签名url,主要用于私有权限下的读访问控制
  4. *
  5. * @param $ossClient OssClient OSSClient实例
  6. * @param $bucket string bucket名称
  7. * @return null
  8. */
  9. function getSignedUrlForGettingObject($ossClient, $bucket)
  10. {
  11. $object = "test/test-signature-test-upload-and-download.txt";
  12. $timeout = 3600; // URL的有效期是3600秒
  13. try{
  14. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
  15. } catch(OssException $e) {
  16. printf(__FUNCTION__ . ": FAILED\n");
  17. printf($e->getMessage() . "\n");
  18. return;
  19. }
  20. print(__FUNCTION__ . ": signedUrl: " . $signedUrl. "\n");
  21. /**
  22. * 可以类似的代码来访问签名的URL,也可以输入到浏览器中去访问
  23. */
  24. $request = new RequestCore($signedUrl);
  25. $request->set_method('GET');
  26. $request->send_request();
  27. $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
  28. if ($res->isOK()) {
  29. print(__FUNCTION__ . ": OK" . "\n");
  30. } else {
  31. print(__FUNCTION__ . ": FAILED" . "\n");
  32. };
  33. }

提示:

  • 生成的URL默认以GET方式访问,这样,用户可以直接通过浏览器访问相关内容。

使用私有的上传链接

如果您想允许用户临时进行其他操作(比如上传,删除文件),可能需要签名其他方法的URL,如下:

  1. <?php
  2. /**
  3. * 生成PutObject的签名url,主要用于私有权限下的写访问控制
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket bucket名称
  7. * @return null
  8. * @throws OssException
  9. */
  10. function getSignedUrlForPuttingObject($ossClient, $bucket)
  11. {
  12. $object = "test/test-signature-test-upload-and-download.txt";
  13. $timeout = 3600;
  14. $options = NULL;
  15. try{
  16. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
  17. } catch(OssException $e) {
  18. printf(__FUNCTION__ . ": FAILED\n");
  19. printf($e->getMessage() . "\n");
  20. return;
  21. }
  22. print(__FUNCTION__ . ": signedUrl: " . $signedUrl. "\n");
  23. $content = file_get_contents(__FILE__);
  24. $request = new RequestCore($signedUrl);
  25. $request->set_method('PUT');
  26. $request->add_header('Content-Type', '');
  27. $request->add_header('Content-Length', strlen($content));
  28. $request->set_body($content);
  29. $request->send_request();
  30. $res = new ResponseCore($request->get_response_header(),
  31. $request->get_response_body(), $request->get_response_code());
  32. if ($res->isOK()) {
  33. print(__FUNCTION__ . ": OK" . "\n");
  34. } else {
  35. print(__FUNCTION__ . ": FAILED" . "\n");
  36. };
  37. }

临时凭证(STS)上传和下载

介绍

OSS可以通过阿里云STS服务,临时进行授权访问。阿里云STS (Security Token Service) 是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或联邦用户(用户身份由您自己管理)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参考 STS介绍

使用STS凭证创建OssClient

用户的client端拿到STS临时凭证后,通过其中安全令牌(SecurityToken)以及临时访问密钥(AccessKeyId, AccessKeySecret)生成OssClient。

通过下面代码可以使用STS临时凭证创建一个OssClient:

  1. <?php
  2. $accessKeyId = "<accessKeyId>";
  3. $accessKeySecret = "<accessKeySecret>";
  4. $securityToken = "<securityToken>";
  5. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  6. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
本文导读目录
本文导读目录
以上内容是否对您有帮助?