共用方式為


使用 JavaScript 建立容器或 blob 的服務 SAS

共用存取簽章 (SAS) 可讓您對儲存體帳戶中的容器和 Blob 授與有限的存取權。 當您建立 SAS 時,需要指定其條件約束,包括允許用戶端存取的 Azure 儲存體資源、對這些資源的使用權限,以及 SAS 的有效期限。

每個 SAS 都會以金鑰簽署。 您可以使用下列兩種方式之一簽署 SAS:

  • 透過使用 Microsoft Entra 認證建立的金鑰。 使用 Microsoft Entra 認證簽署的 SAS 是一種使用者委派 SAS。 凡建立使用者委派 SAS 的用戶端,都必須被指派包含下列動作的 Azure RBAC 角色:Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey。 若要深入了解,請參閱建立使用者委派 SAS
  • 使用儲存體帳戶金鑰。 服務 SAS帳戶 SAS 都使用儲存體帳戶金鑰加以簽署。 凡建立服務 SAS 的用戶端,都必須具備帳戶金鑰的直接存取權,或者被指派 Microsoft.Storage/storageAccounts/listkeys/action 使用權限。 若要深入了解,請參閱建立服務 SAS建立帳戶 SAS

注意

使用者委派 SAS 可以為使用儲存體帳戶金鑰簽署的 SAS 提供絕佳的安全性。 Microsoft 建議盡可能採用使用者委派 SAS。 如需詳細資訊,請參閱使用共用存取簽章 (SAS) 授與資料的有限存取權

本文說明如何使用儲存體帳戶金鑰,搭配適用於 JavaScript 的 Blob 儲存體用戶端程式庫,建立容器或 blob 的服務 SAS。

建立容器或 blob 的服務 SAS

下列程式碼範例會建立容器的 SAS。 如果提供現有預存存取原則的名稱,該原則將與 SAS 相關聯。 如果未提供任何預存存取原則,則程式碼會在容器上建立臨機操作 SAS。

服務 SAS 會使用帳戶存取金鑰加以簽署。 使用 StorageSharedKeyCredential 類別,建立用來簽署 SAS 的認證。 接下來,呼叫 generateBlobSASQueryParameters 函數,以提供取得 SAS 權杖字串的必要參數。

// Create a service SAS for a blob container
function getContainerSasUri(containerClient, sharedKeyCredential, storedPolicyName) {
    const sasOptions = {
        containerName: containerClient.containerName,
        permissions: ContainerSASPermissions.parse("c")
    };

    if (storedPolicyName == null) {
        sasOptions.startsOn = new Date();
        sasOptions.expiresOn = new Date(new Date().valueOf() + 3600 * 1000);
    } else {
        sasOptions.identifier = storedPolicyName;
    }

    const sasToken = generateBlobSASQueryParameters(sasOptions, sharedKeyCredential).toString();
    console.log(`SAS token for blob container is: ${sasToken}`);

    return `${containerClient.url}?${sasToken}`;
}

建立 blob 的服務 SAS

下列程式碼範例會在 blob 上建立 SAS。 如果提供現有預存存取原則的名稱,該原則將與 SAS 相關聯。 如果未提供任何預存存取原則,則程式碼會在 blob 上建立臨機操作 SAS。

若要建立 blob 的服務 SAS,請呼叫 generateBlobSASQueryParameters 函數以提供必要參數。

// Create a service SAS for a blob
function getBlobSasUri(containerClient, blobName, sharedKeyCredential, storedPolicyName) {
    const sasOptions = {
        containerName: containerClient.containerName,
        blobName: blobName
    };

    if (storedPolicyName == null) {
        sasOptions.startsOn = new Date();
        sasOptions.expiresOn = new Date(new Date().valueOf() + 3600 * 1000);
        sasOptions.permissions = BlobSASPermissions.parse("r");
    } else {
        sasOptions.identifier = storedPolicyName;
    }

    const sasToken = generateBlobSASQueryParameters(sasOptions, sharedKeyCredential).toString();
    console.log(`SAS token for blob is: ${sasToken}`);

    return `${containerClient.getBlockBlobClient(blobName).url}?${sasToken}`;
}

使用 JavaScript 的開發作業可用資源

下列連結會為使用適用於 JavaScript 的 Azure 儲存體用戶端程式庫開發人員提供實用資源

Blob 儲存體 API

JavaScript 工具

下一步