Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 为blob文件手动生成SAS时出现问题_Azure_Azure Storage Blobs_Sas Token - Fatal编程技术网

Azure 为blob文件手动生成SAS时出现问题

Azure 为blob文件手动生成SAS时出现问题,azure,azure-storage-blobs,sas-token,Azure,Azure Storage Blobs,Sas Token,我正在尝试将一个下载程序连接到服务总线,该总线将从blob存储下载文件。但是我在手动生成SAS令牌时遇到一些问题,请查看下面的错误消息 我收到错误签名字段格式不正确。 是否是stringToSign?还是签名作为一个整体?我是一个普通人,但可能需要在所有字段上使用HttpUtility.urlcoder?请尝试下面的代码,它会为我生成一个可用的sas令牌: static void Main(string[] args) { string resourceUri = "https://xx

我正在尝试将一个下载程序连接到服务总线,该总线将从blob存储下载文件。但是我在手动生成SAS令牌时遇到一些问题,请查看下面的错误消息

我收到错误
签名字段格式不正确。


是否是
stringToSign
?还是签名作为一个整体?我是一个普通人,但可能需要在所有字段上使用HttpUtility.urlcoder?

请尝试下面的代码,它会为我生成一个可用的sas令牌:

static void Main(string[] args)
{
    string resourceUri = "https://xx.blob.core.windows.net/test1/1.txt";
    string account_name= "storage account name";
    string key = "storage account key";

    string s1 = createToken(resourceUri,account_name,key);

    Console.WriteLine(s1);

    Console.ReadLine();
}

private static string createToken(string resourceUri, string account_name, string key)
{
    var accountName = account_name;
    var accountKey = key;
    var start = DateTime.UtcNow.AddHours(-2).ToString("yyyy-MM-ddTHH:mm:ssZ");
    var end = DateTime.UtcNow.AddHours(2).ToString("yyyy-MM-ddTHH:mm:ssZ");
    var permission = "rwdlac";
    var serviceType = "b";
    var resourceTypes = "sco";
    var protocol = "https";
    var serviceVersion = "2019-02-02";

    //here is the difference from your code.
    var stringToSign = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n",accountName, permission,serviceType,resourceTypes,start,end,"",protocol,serviceVersion);

    HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(accountKey));
    string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
    var sasToken = string.Format("?sv={0}&ss={1}&srt={2}&sp={3}&se={4}&st={5}&spr={6}&sig={7}", serviceVersion,
        serviceType, resourceTypes, permission, end, start, protocol, HttpUtility.UrlEncode(signature));

    var urlToListTables = resourceUri + sasToken;

    return urlToListTables;
}

如果您还有任何问题,请告诉我。

如何创建
stringToSign
变量存在问题。请参阅此处的详细说明:(请参阅标题为“构造签名字符串”)的部分。您好,我想检查是否可以根据下面的答案解决此问题?
static void Main(string[] args)
{
    string resourceUri = "https://xx.blob.core.windows.net/test1/1.txt";
    string account_name= "storage account name";
    string key = "storage account key";

    string s1 = createToken(resourceUri,account_name,key);

    Console.WriteLine(s1);

    Console.ReadLine();
}

private static string createToken(string resourceUri, string account_name, string key)
{
    var accountName = account_name;
    var accountKey = key;
    var start = DateTime.UtcNow.AddHours(-2).ToString("yyyy-MM-ddTHH:mm:ssZ");
    var end = DateTime.UtcNow.AddHours(2).ToString("yyyy-MM-ddTHH:mm:ssZ");
    var permission = "rwdlac";
    var serviceType = "b";
    var resourceTypes = "sco";
    var protocol = "https";
    var serviceVersion = "2019-02-02";

    //here is the difference from your code.
    var stringToSign = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n",accountName, permission,serviceType,resourceTypes,start,end,"",protocol,serviceVersion);

    HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(accountKey));
    string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
    var sasToken = string.Format("?sv={0}&ss={1}&srt={2}&sp={3}&se={4}&st={5}&spr={6}&sig={7}", serviceVersion,
        serviceType, resourceTypes, permission, end, start, protocol, HttpUtility.UrlEncode(signature));

    var urlToListTables = resourceUri + sasToken;

    return urlToListTables;
}