Todos los productos
Search
Centro de documentos

Object Storage Service:Autorizar el acceso (SDK de C++)

Última actualización: Sep 25, 2026

Este tema describe cómo usar las credenciales de acceso temporal que proporciona Security Token Service (STS) o una URL prefirmada para acceder de forma temporal a los recursos de Object Storage Service (OSS).

Importante

Debe especificar un periodo de validez tanto para las credenciales de acceso temporal como para la URL prefirmada. Cuando usa credenciales de acceso temporal para generar una URL prefirmada y ejecutar operaciones como la carga y descarga de objetos, prevalece el periodo de validez más corto. Por ejemplo, puede establecer la validez de sus credenciales de acceso temporal en 1,200 segundos y la de la URL prefirmada generada con dichas credenciales en 3,600 segundos. En este caso, no se podrá usar la URL prefirmada para cargar objetos después de que las credenciales de acceso temporal caduquen, incluso si la URL sigue dentro de su periodo de validez.

Notas

  • En este tema se utiliza el endpoint público de la región China (Hangzhou). Si desea acceder a OSS desde otros servicios de Alibaba Cloud ubicados en la misma región que OSS, use un endpoint interno. Para obtener más información sobre las regiones y los endpoints de OSS, consulte Regions and endpoints.

  • Este tema muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para conocer configuraciones alternativas, como el uso de un dominio personalizado o la autenticación con credenciales de Security Token Service (STS), consulte Create an OssClient instance.

Usar STS para autorizar el acceso temporal

Puede usar STS de Alibaba Cloud para autorizar el acceso temporal a OSS. STS es un servicio web que proporciona tokens de acceso temporal a los usuarios de computación en la nube. Con STS, otorga a una aplicación de terceros o a un subusuario una credencial de acceso temporal con permisos y un periodo de validez personalizados. Para obtener más información sobre STS, consulte What is STS?.

STS ofrece a continuación ventajas:

  • Solo necesita generar un token de seguridad y enviarlo a la aplicación de terceros. No es necesario proporcionar su par de AccessKey a dicha aplicación. Además, puede especificar los permisos de acceso y el periodo de validez de este token de seguridad.

  • El token de seguridad caduca automáticamente cuando termina su periodo de validez. Por lo tanto, no necesita revocar manualmente los permisos de acceso del token.

Para acceder a OSS mediante las credenciales de acceso temporal de STS, siga estos pasos:

  1. Obtenga las credenciales de acceso temporal.

    Las credenciales de acceso temporal incluyen un token de seguridad y un par de AccessKey temporal. Un par de AccessKey consta de un AccessKey ID y un AccessKey secret. El periodo de validez de estas credenciales se expresa en segundos, con un mínimo de 900 segundos. El máximo corresponde a la duración de sesión más larga configurada para el rol actual. Para obtener más información, consulte Specify the maximum session duration for a RAM role.

    Use uno de a continuación métodos para obtener las credenciales de acceso temporal:

    • Método 1

      Llame a la operación AssumeRole.

    • Método 2

      Use los SDK de STS para obtener las credenciales de acceso temporal. Para obtener más información, consulte STS SDK descripción general.

  2. Use las credenciales de acceso temporal obtenidas de STS para crear una solicitud firmada.

    #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;
    }

Usar una URL prefirmada para autorizar el acceso temporal

Notas de uso

  • Cuando usa un SDK de OSS para generar una URL prefirmada, el SDK aplica un algoritmo específico basado en la información de la clave almacenada en la computadora local para calcular una firma. Luego añade esta firma a la URL para garantizar su validez y seguridad. Los cálculos y la construcción de la URL se completan en el cliente, por lo que no necesita enviar solicitudes al servidor a través de la red. De este modo, tampoco requiere otorgar permisos específicos a quien llama cuando genera la URL prefirmada. Sin embargo, para que los usuarios de terceros ejecuten operaciones sobre los recursos autorizados por dicha URL, asegúrese de que la entidad principal que llama a las API para generarla cuente con los permisos correspondientes.

    Por ejemplo, si una entidad principal desea cargar un objeto mediante una URL prefirmada, debe otorgarle el permiso oss:PutObject. Si la intención es descargar o previsualizar un objeto con esa URL, asígnele el permiso oss:GetObject.

  • Genere una URL prefirmada y proporciónesela a un visitante para concederle acceso temporal. Durante la generación, especifique el periodo de validez de la URL para limitar el tiempo en que el visitante puede acceder a datos específicos.

  • Para generar una URL prefirmada que acceda a los recursos mediante HTTPS, establezca el protocolo del endpoint en HTTPS.

  • La URL prefirmada generada con el código de ejemplo a continuación podría contener un signo más (+). En ese caso, reemplace el signo más (+) de la URL por %2B. De lo contrario, es posible que la URL prefirmada no permita acceder al objeto como se espera.

Generar una URL prefirmada y usarla para cargar un archivo local

  1. Genere una URL prefirmada.

    #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 la URL prefirmada para cargar un archivo local.

    Consulte el SDK de OSS para dispositivos celulares Android. Para obtener más información, consulte Authorize access.

Generar una URL prefirmada y usarla para descargar un objeto

  1. Genere una URL prefirmada.

    #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 la URL prefirmada para descargar un objeto.

    Use el SDK de Android para descargar un archivo con una URL firmada. Para obtener más información, consulte Authorize access (Android SDK).