tencent cloud

文档反馈

使用永久密钥访问 COS

最后更新时间:2022-03-01 17:51:41

    背景介绍

    通过 RESTful API 对对象存储(Cloud Object Storage,COS)可以发起 HTTP 匿名请求或 HTTP 签名请求。匿名请求一般用于需要公开访问的场景,例如托管静态网站;此外,绝大部分场景都需要通过签名请求完成。

    签名请求相比匿名请求,多携带了一个签名值,签名是基于密钥(SecretId/SecretKey)和请求信息加密生成的字符串。SDK 会自动计算签名,您只需要在初始化用户信息时设置好密钥,无需关心签名的计算;对于通过 RESTful API 发起的请求,需要按照签名算法计算签名并添加到请求中。

    获取永久密钥

    您可以在访问管理控制台中的 API 密钥管理 页面获取永久密钥,永久密钥包括 SecretId 和 SecretKey,代表了账号的永久身份,不会过期。

    • SecretId:用于标识 API 调用者身份。
    • SecretKey:用于加密签名字符串和服务端验证签名字符串的密钥。

    使用永久密钥访问 COS

    通过 API 请求访问 COS

    在使用 API 请求时,对于私有桶您必须使用签名请求。通过永久密钥生成签名,放入 Authorization 头部中,形成签名请求;请求发送到 COS,COS 会验证签名与请求是否一致。

    说明:

    由于签名生成算法较为复杂,建议您直接使用 SDK 发起请求省略这一环节。

    1. 通过永久密钥生成签名
      签名算法的介绍可参见 请求签名 文档,COS 同时提供了签名生成工具,也可以通过 SDK 生成签名,参考 SDK 签名实现;您也可以自行编写程序生成签名,但签名算法较为复杂,一般不推荐这种方式。
    2. 填入 Authorization 头部
      发起 API 请求时,将签名填入标准 Http Authorization 头部,以下为 GetObject 请求的示例:
      GET / HTTP/1.1
      Host: .cos..myqcloud.com
      Date: GMT Date
      Authorization: q-sign-algorithm=sha1&q-ak=SecretId&q-sign-time=KeyTime&q-key-time=KeyTime&q-header-list=HeaderList&q-url-param-list=UrlParamList&q-signature=Signature
      

    通过 SDK 工具访问 COS

    1. 通过永久密钥初始化身份信息
      安装 SDK 工具完成后,首先需要初始化用户身份信息,写入主账号或子账号的永久密钥(SecretId 和 SecretKey)。
    2. 直接使用 SDK 请求 COS
      初始化之后,您可以直接使用 SDK 工具进行上传、下载等基本操作,而无需像 API 请求一样自行生成签名,因为 SDK 工具代替您通过密钥生成了签名,向 COS 发起请求。

    例如,如下 Java SDK 的代码,更多语言 demo 可参考 SDK 概览 的快速入门文档。

    // 1 初始化用户身份信息(secretId, secretKey)。
    // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
    String secretId = "SECRETID";
    String secretKey = "SECRETKEY";
    COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
    // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
    // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
    Region region = new Region("COS_REGION");
    ClientConfig clientConfig = new ClientConfig(region);
    // 这里建议设置使用 https 协议
    //5.6.54 版本开始,默认使用了 https
    clientConfig.setHttpProtocol(HttpProtocol.https);
    // 3 生成 cos 客户端。
    COSClient cosClient = new COSClient(cred, clientConfig);
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持