根据401错误,表示令牌无效。
使用以下代码生成正确的SAS令牌,然后将生成的令牌传递给 Authorization 标头:
using System;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace App1
{
class Program
{
static readonly string queueUrl = "TODO"; // Format: "https://<service bus namespace>.servicebus.windows.net/<queue name>";
static readonly string signatureKeyName = "TODO";
static readonly string signatureKey = "TODO";
static readonly TimeSpan timeToLive = TimeSpan.FromDays(1);
static void Main(string[] args)
{
var token = GetSasToken(queueUrl,signatureKeyName,signatureKey,timeToLive);
Console.WriteLine("Authorization: " + token);
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
public static string GetSasToken(string resourceUri,string keyName,string key,TimeSpan ttl)
{
var expiry = GetExpiry(ttl);
string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture,"SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",HttpUtility.UrlEncode(resourceUri),HttpUtility.UrlEncode(signature),expiry,keyName);
return sasToken;
}
private static string GetExpiry(TimeSpan ttl)
{
TimeSpan expirySinceEpoch = DateTime.UtcNow - new DateTime(1970,1,1) + ttl;
return Convert.ToString((int)expirySinceEpoch.TotalSeconds);
}
}
}
本文链接:https://www.f2er.com/2273692.html