Hello there, folks! I’d like to share a C# code snippet and PowerShell script which can be helpful in getting SAS token and use it in scenario sending message to service bus queue but with rest calls.
Below is the method by which we can generate SAS token:-
C# Sample for SAS token generate:
static void Main(string[] args)
{
string queueUrl = "https://<yournamespace>.servicebus.windows.net/" + "<yourqueuename>";
string token = GetSasToken(queueUrl, "<youraccesskeyname>", "<youraccesskeyvalue>", TimeSpan.FromDays(1));
}
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);
}
PowerShell Script for SAS token generate:
[Reflection.Assembly]::LoadWithPartialName("System.Web")| out-null
#Parameter
$uri = 'https://<yournamespace>.servicebus.windows.net/<yourqueuename>'
$Access_Policy_Name="<youraccesspolicyname>"
$Access_Policy_Key="youraccesskeyvalue"
#Token expires now+300
$Expires=([DateTimeOffset]::Now.ToUnixTimeSeconds())+300
#Building Token
$SignatureString=[System.Web.HttpUtility]::UrlEncode($URI)+ "`n" + [string]$Expires
$HMAC = New-Object System.Security.Cryptography.HMACSHA256
$HMAC.key = [Text.Encoding]::ASCII.GetBytes($Access_Policy_Key)
$Signature = $HMAC.ComputeHash([Text.Encoding]::ASCII.GetBytes($SignatureString))
$Signature = [Convert]::ToBase64String($Signature)
$SASToken = "SharedAccessSignature sr=" + [System.Web.HttpUtility]::UrlEncode($URI) + "&sig=" + [System.Web.HttpUtility]::UrlEncode($Signature) + "&se=" + $Expires + "&skn=" + $Access_Policy_Name
$headerParams = @{'Authorization'="$($SASToken)"}
$headerParams
PS Output:
SAS Token output from PSScript
Finally, you can make a call to service bus queue to create message using any Http client.
POST call to create message in service bus queue
Reference:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.