Hello @tommy!
Please find below code for signature generation (backend, c#)
Meeting is created & started by different account (rustam.akimovv@outlook.com) than account creating zoom app (s@treemple.com)
private static void AddSignature(ZoomMeeting meeting, int hostRole)
{
static long ConvertToTimestamp(DateTime value)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var elapsedTime = value - epoch;
return (long)elapsedTime.TotalMilliseconds;
}
static long ToTimestamp (DateTime value) {
long epoch = (value.Ticks - 621355968000000000) / 10000;
return epoch;
}
var ts = (ToTimestamp(DateTime.UtcNow.ToUniversalTime()) - 30000).ToString();
var signature = GenerateToken(meeting.Id, ts, hostRole);
meeting.Signature = signature;
}
static string GenerateToken (long meetingNumber, string ts, int role) {
var message = $"{ApiKey}{meetingNumber}{ts}{role}";
var encoding = new ASCIIEncoding();
var keyByte = encoding.GetBytes (ApiSecret);
var messageBytesTest = encoding.GetBytes (message);
var msgHashPreHmac = System.Convert.ToBase64String (messageBytesTest);
var messageBytes = encoding.GetBytes (msgHashPreHmac);
using var hmacSha256 = new HMACSHA256 (keyByte);
var hashMessage = hmacSha256.ComputeHash (messageBytes);
var msgHash = System.Convert.ToBase64String (hashMessage);
var token = $"{ApiKey}.{meetingNumber}.{ts}.{role}.{msgHash}";
var tokenBytes = System.Text.Encoding.UTF8.GetBytes (token);
return System.Convert.ToBase64String (tokenBytes).TrimEnd (Padding);
}