日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

C++授權訪問

本文介紹如何使用STS以及簽名URL臨時授權訪問OSS資源。

重要

由于STS臨時賬號以及簽名URL均需設置有效時長,當您使用STS臨時賬號生成簽名URL執行相關操作(例如上傳、下載文件)時,以最小的有效時長為準。例如您的STS臨時賬號的有效時長設置為1200秒、簽名URL設置為3600秒時,當有效時長超過1200秒后,您無法使用此STS臨時賬號生成的簽名URL上傳文件。

注意事項

  • 本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的RegionEndpoint的對應關系,請參見訪問域名和數據中心

  • 本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見新建OssClient

使用STS臨時授權

OSS可以通過阿里云STS(Security Token Service)進行臨時授權訪問。阿里云STS是為云計算用戶提供臨時訪問令牌的Web服務。通過STS,您可以為第三方應用或子用戶(即用戶身份由您自己管理的用戶)頒發一個自定義時效和權限的訪問憑證。關于STS的更多信息,請參見STS介紹

STS的優勢如下:

  • 您無需透露您的長期密鑰(AccessKey)給第三方應用,只需生成一個訪問令牌并將令牌交給第三方應用。您可以自定義這個令牌的訪問權限及有效期限。

  • 您無需關心權限撤銷問題,訪問令牌過期后自動失效。

通過STS臨時授權訪問OSS的步驟如下:

  1. 獲取臨時訪問憑證

    臨時訪問憑證包括臨時訪問密鑰(AccessKey IDAccessKey Secret)和安全令牌(SecurityToken)。臨時訪問憑證有效時間單位為秒,最小值為900,最大值以當前角色設定的最大會話時間為準。更多信息,請參見設置RAM角色最大會話時間

    您可以通過以下兩種方式獲取臨時訪問憑證。

    • 方式一

      通過調用STS服務的AssumeRole接口獲取臨時訪問憑證。

    • 方式二

      通過各語言STS SDK獲取臨時訪問憑證。

  2. 使用STS憑證構造簽名請求。

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* 初始化OSS賬號信息。*/
        
        /* 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
        std::string Endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    
        /* 初始化網絡等資源。*/
        InitializeSdk();
    
        ClientConfiguration conf;    
        /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已通過環境變量設置臨時訪問密鑰(OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET)以及安全令牌OSS_SESSION_TOKEN。*/
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);    
    
        /* 釋放網絡等資源。*/
        ShutdownSdk();
        return 0;
    }

使用簽名URL臨時授權

注意事項

  • 生成簽名URL過程中,SDK利用本地存儲的密鑰信息,根據特定算法計算出簽名(signature),然后將其附加到URL上,以確保URL的有效性和安全性。這一系列計算和構造URL的操作都是在客戶端完成,不涉及網絡請求到服務端。因此,生成簽名URL時不需要授予調用者特定權限。但是,為避免第三方用戶無法對簽名URL授權的資源執行相關操作,需要確保調用生成簽名URL接口的身份主體被授予對應的權限。

    例如,通過簽名URL上傳文件時,需要授予oss:PutObject權限。通過簽名URL下載或預覽文件時,需要授予oss:GetObject權限。

  • 您可以將生成的簽名URL提供給訪客進行臨時訪問。生成簽名URL時,您可以自定義URL的過期時間來限制訪客的訪問時長。

  • 如果需要生成HTTPS協議的簽名URL,請將Endpoint中的通信協議設置為HTTPS。

  • 通過以下示例生成的簽名URL中如果包含特殊符號+,可能出現無法正常訪問該簽名URL的現象。如需正常訪問該簽名URL,請將簽名URL中的+替換為%2B

生成簽名URL并通過簽名URL上傳文件

  1. 生成用于上傳的簽名URL

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* 初始化OSS賬號信息。*/
                
        /* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
        std::string Endpoint = "yourEndpoint";
        /* 填寫Bucket名稱,例如examplebucket。*/
        std::string BucketName = "examplebucket";
        /* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/   
        std::string PutobjectUrlName = "exampledir/exampleobject.txt";
    
         /* 初始化網絡等資源。*/
        InitializeSdk();
    
        ClientConfiguration conf;
        /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET。*/
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
    
        /* 設置簽名URL有效時長。*/
        std::time_t t = std::time(nullptr) + 1200;
        /* 生成簽名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 {
            /* 異常處理。*/
            std::cout << "GeneratePresignedUrl fail" <<
            ",code:" << genOutcome.error().Code() <<
            ",message:" << genOutcome.error().Message() <<
            ",requestId:" << genOutcome.error().RequestId() << std::endl;
            return -1;
        }
    
        /* 釋放網絡等資源。*/
        ShutdownSdk();
        return 0;
    }
  2. 通過簽名URL上傳文件

    您可以參考移動端Android SDK通過簽名URL上傳文件。更多信息,請參見通過簽名URL上傳文件

生成簽名URL并通過簽名URL下載文件

  1. 生成用于下載的簽名URL

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* 初始化OSS賬號信息。*/
                
        /* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
        std::string Endpoint = "yourEndpoint";
        /* 填寫Bucket名稱,例如examplebucket。*/
        std::string BucketName = "examplebucket";
        /* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/ 
        std::string GetobjectUrlName = "exampledir/exampleobject.txt";
    
        /* 初始化網絡等資源。*/
        InitializeSdk();
    
        ClientConfiguration conf;
        /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET。*/
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
    
        /* 設置簽名URL有效時長。*/
        std::time_t t = std::time(nullptr) + 1200;
        /* 生成簽名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 {
            /* 異常處理。*/
            std::cout << "GeneratePresignedUrl fail" <<
            ",code:" << genOutcome.error().Code() <<
            ",message:" << genOutcome.error().Message() <<
            ",requestId:" << genOutcome.error().RequestId() << std::endl;
            return -1;
        }
    
        /* 釋放網絡等資源。*/
        ShutdownSdk();
        return 0;
    }
  2. 通過簽名URL下載文件

    您可以參考移動端Android SDK通過簽名URL下載文件。更多信息,請參見通過簽名URL下載文件