如何验证 Azure Blob 存储共享访问签名 (SAS) URL?

Dan*_*ton 5 .net c# azure-storage azure-blob-storage shared-access-signatures

我的应用程序允许用户输入 Azure Blob 存储 SAS URL。我将如何去验证它?我正在使用Azure 存储 Blob 客户端库,并且似乎没有任何方法可以在不实际执行 Blob 操作(我不想这样做)的情况下验证 SAS URL。

验证操作可以是异步的,并在必要时涉及 API 调用(即可以通过按钮触发)。

public class SASURLValidator
{
    public async Task<bool> ValidateSASURL(string sasURL)
    {
        // What goes here?
    }

    public async Task Test()
    {
        var result = await ValidateSASURL("https://blobstorageaccountname.blob.core.windows.net/containerName?sp=w&st=2022-02-15T02:07:49Z&se=2022-03-15T10:07:49Z&spr=https&sv=2020-08-04&sr=c&sig=JDFJEF342JDSFJIERJsdjfkajiwSKDFJIQWJIFJSKDFJWE%3D")
        // result should be true if the above is a valid SAS
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_* W. 0

您可以测试列表或写入和删除访问权限。根据您的情况,您可以同时使用两者。也可以修改样本进行测试。对单个文件的读取访问权限。

private async Task TestSasAsync(String uri, bool testWriteAndDelete, bool testList)
        {
            try
            {
                var cloudBlobContainer = new CloudBlobContainer(new Uri(uri));

                if (testList)
                {
                    foreach (var blob in cloudBlobContainer.ListBlobs())
                    {
                        Console.WriteLine(blob.Uri);
                    }
                }

                if (testWriteAndDelete)
                {
                    var blockBlob = cloudBlobContainer.GetBlockBlobReference("testBlob.txt");
                    await blockBlob.UploadTextAsync("Hello world");
                    await blockBlob.DeleteAsync();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to validate SAS Uri: " + ex.Message, ex);
            }
        }
Run Code Online (Sandbox Code Playgroud)