Search code examples
azuretokeniotazure-eventhubazure-iot-hub

Parameters needed to generate SAS Token for Azure IoT Hub in C#


I have this method from Microsoft documentation: https://learn.microsoft.com/en-us/rest/api/eventhub/generate-sas-token

private static string createToken(string resourceUri, string keyName, string key) {
TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
var week = 60 * 60 * 24 * 7;
var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week);
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;}

I need to know what should I use for 'keyName', 'string key' parameters to call this method. I'm new with Azure IoT Hub and C#. I just need to call this method and take my token which will be used in Energia (Arduino) project.


Solution

  • Those parameters refer to the shared access policies of the event hub. Those can be found using the Azure Portal. Mostly they are found when you use the portal to browse to the resource you want to configure and in the left hand side menu browse to "Shared Access Policies" in the menu:

    enter image description here

    enter image description here

    Those pictures are taken from the official docs. See step 4 and step 5 in this document.

    In the above example the keyName is "RootManageSharedAccessKey" and key is "Your key here".

    Basically the keyName refers to the name of the access policy, eg "TelemetrySender" and the key refers to the primary or secondary key of the access policy.

    For more background material read about Shared Access Signature authentication here.