Todos os produtos
Search
Central de documentação

Object Storage Service:Authorize access (C++ SDK)

Última atualização: Sep 25, 2026

Este tópico descreve como usar credenciais de acesso temporárias fornecidas pelo Security Token service (STS) ou uma url pré-assinada para acessar temporariamente os recursos do object storage service (OSS).

Importante

especifique um período de validade para as credenciais de acesso temporárias e para a url pré-assinada. Quando você usa credenciais de acesso temporárias para gerar uma url pré-assinada usada em operações como upload e baixe de objetos, o menor período de validade tem precedência. Por exemplo, é possível defina o período de validade das suas credenciais de acesso temporárias como 1.200 segundos e o período de validade da url pré-assinada gerada com essas credenciais como 3.600 segundos. Nesse caso, não será possível usar a url pré-assinada para fazer upload de objetos após a expiração das credenciais de acesso temporárias, mesmo que a url pré-assinada ainda esteja dentro do seu período de validade.

Observações

  • Este tópico usa o endpoint público da região china (Hangzhou). Para acessar o OSS a partir de outros service da alibaba cloud na mesma região do OSS, use um endpoint interno. Para obter mais informações sobre as regiões e os endpoints do OSS, consulte Regions and endpoints.

  • Este tópico demonstra como crie uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como o uso de um domínio personalizado ou autenticação com credenciais do Security Token service (STS), consulte Create an OssClient instance.

Use o STS para autorizar o acesso temporário

Use o STS da alibaba cloud para autorizar o acesso temporário ao OSS. O STS é um service web que fornece tokens de acesso temporário para usuários de computação em cloud. Com o STS, você pode conceder a um aplicativo de terceiros ou a um subusuário uma credencial de acesso temporária com período de validade e permissões personalizadas. Para saber mais sobre o STS, consulte What is STS?.

O STS oferece os seguintes benefícios:

  • É necessário apenas gerar um token de segurança e enviá-lo ao aplicativo de terceiros, sem fornecer o seu par de AccessKey. Também é possível especifique as permissões de acesso e o período de validade desse token de segurança.

  • O token de segurança expira automaticamente após o fim do período de validade. Portanto, não é necessário revogar manualmente as permissões de acesso de um token de segurança.

Para acessar o OSS usando credenciais de acesso temporárias do STS, execute as etapas a seguir:

  1. Obtenha as credenciais de acesso temporárias.

    As credenciais de acesso temporárias contêm um token de segurança e um par de AccessKey temporário. Um par de AccessKey consiste em um AccessKey id e um AccessKey secret. O período de validade das credenciais de acesso temporárias é medido em segundos. O período mínimo de validade é de 900 segundos, e o período máximo é a duração máxima da sessão especifique para a função atual. Para mais detalhes, consulte Specify the maximum session duration for a RAM role.

    Use um dos seguintes métodos para obter as credenciais de acesso temporárias:

    • Método 1

      Chame a operação AssumeRole.

    • Método 2

      Use os sdk do STS para obter as credenciais de acesso temporárias. Para mais informações, consulte STS SDK overview.

  2. Use as credenciais de acesso temporárias obtidas do STS para criar uma requisição assinada.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Initialize information about the account that is used to access OSS. */
        
        /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
        std::string Endpoint = "yourEndpoint";
        /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
        std::string Region = "yourRegion";
    
        /* Initialize resources, such as network resources. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;    
        /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, and OSS_SESSION_TOKEN environment variables are configured. */
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
        client.SetRegion(Region);    
    
        /* Release resources, such as network resources. */
        ShutdownSdk();
        return 0;
    }

Use uma url pré-assinada para autorizar o acesso temporário

Observações de uso

  • Ao usar um sdk do OSS para gerar uma url pré-assinada, o sdk utiliza um algoritmo específico com base nas informações de chave armazenadas no computador local para calcular uma assinatura e adicioná-la à url. Isso garante a validade e a segurança da url. O cliente conclui as operações de cálculo e construção da url. Não é necessário enviar requisições ao servidor pela rede. Assim, não é necessário conceder permissões específicas ao chamador ao gerar a url pré-assinada. No entanto, para permitir que usuários de terceiros execute operações relevantes nos recursos autorizados pela url pré-assinada, certifique-se de que a entidade responsável por chamar as operações de api para gerar a url pré-assinada tenha as permissões correspondentes.

    Por exemplo, se uma entidade deseja fazer upload de um objeto usando uma url pré-assinada, conceda a permissão oss:PutObject a essa entidade. Se a entidade deseja baixe ou visualize um objeto usando uma url pré-assinada, conceda a permissão oss:GetObject.

  • Gere uma url pré-assinada e forneça-a a um visitante para acesso temporário. Ao gerar a url, especifique o período de validade para limitar o tempo durante o qual o visitante pode acessar dados específicos.

  • Para gerar uma url pré-assinada usada para acessar recursos via HTTPS, defina o protocolo no endpoint como HTTPS.

  • A url pré-assinada gerada pelo código de exemplo a seguir pode conter um sinal de mais (+). Nesse caso, substitua o sinal de mais (+) na url por %2B. Caso contrário, não será possível usar a url pré-assinada para acessar o objeto conforme o esperado.

Gere uma url pré-assinada e use-a para fazer upload de um arquivo local

  1. Gere uma url pré-assinada.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Initialize information about the account that is used to access OSS. */
                
        /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
        std::string Endpoint = "yourEndpoint";
        /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.   * /
        std::string Region = "yourRegion";
        /* Specify the name of the bucket. Example: examplebucket. */
        std::string BucketName = "examplebucket";
        /* Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. */   
        std::string PutobjectUrlName = "exampledir/exampleobject.txt";
    
         /* Initialize resources, such as network resources. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
        client.SetRegion(Region);
    
        /* Specify the validity period of the pre-signed URL. The maximum validity period is 32,400. Unit: seconds. */
        std::time_t t = std::time(nullptr) + 1200;
        /* Generate a pre-signed URL. */
        auto genOutcome = client.GeneratePresignedUrl(BucketName, PutobjectUrlName, t, Http::Put);
        if (genOutcome.isSuccess()) {
            std::cout << "GeneratePresignedUrl success, Gen url:" << genOutcome.result().c_str() << std::endl;
        }
        else {
            /* Handle exceptions. */
            std::cout << "GeneratePresignedUrl fail" <<
            ",code:" << genOutcome.error().Code() <<
            ",message:" << genOutcome.error().Message() <<
            ",requestId:" << genOutcome.error().RequestId() << std::endl;
            return -1;
        }
    
        /* Release resources, such as network resources. */
        ShutdownSdk();
        return 0;
    }
  2. Use a url pré-assinada para fazer upload de um arquivo local.

    Consulte o sdk do OSS para dispositivos móveis Android. Para mais informações, consulte Authorize access.

Gere uma url pré-assinada e use-a para baixe um objeto

  1. Gere uma url pré-assinada.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Initialize information about the account that is used to access OSS. */
                
        /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
        std::string Endpoint = "yourEndpoint";
        /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.   * /
        std::string Region = "yourRegion";
        /* Specify the name of the bucket. Example: examplebucket. */
        std::string BucketName = "examplebucket";
        /* Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. */ 
        std::string GetobjectUrlName = "exampledir/exampleobject.txt";
    
        /* Initialize resources, such as network resources. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
        client.SetRegion(Region);
    
        /* Specify the validity period of the pre-signed URL. The maximum validity period is 32,400. Unit: seconds. */
        std::time_t t = std::time(nullptr) + 1200;
        /* Generate a pre-signed URL. */
        auto genOutcome = client.GeneratePresignedUrl(BucketName, GetobjectUrlName, t, Http::Get);
        if (genOutcome.isSuccess()) {
            std::cout << "GeneratePresignedUrl success, Gen url:" << genOutcome.result().c_str() << std::endl;
        }
        else {
            /* Handle exceptions. */
            std::cout << "GeneratePresignedUrl fail" <<
            ",code:" << genOutcome.error().Code() <<
            ",message:" << genOutcome.error().Message() <<
            ",requestId:" << genOutcome.error().RequestId() << std::endl;
            return -1;
        }
    
        /* Release resources, such as network resources. */
        ShutdownSdk();
        return 0;
    }
  2. Use a url pré-assinada para baixe um objeto.

    Use o sdk para Android para baixe um arquivo com uma url assinada. Para mais informações, consulte Authorize access (Android SDK).