[英]Keep getting unauthorized when registering devices in Azure Notification Hubs
我已將每個示例都跟蹤為“t”,並且無法使Azure通知中心返回除以下401消息之外的任何內容:“MalformedToken:授權標頭中包含的憑據不是WRAP格式。”
我嘗試過命名空間訪問密鑰和通知集線器密鑰無濟於事。 我已經按照這里的示例: https : //msdn.microsoft.com/en-us/library/azure/dn495630.aspx並且無法使其工作。 我更改了所有帳戶特定的設置,如命名空間,通知中心名稱和授權密鑰。
var registrationXML = "<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>" + "<entry xmlns=\\"http://www.w3.org/2005/Atom\\">" + "<content type=\\"application/xml\\">" + "<GcmTemplateRegistrationDescription xmlns:i=\\"http://www.w3.org/2001/XMLSchema-instance\\" xmlns=\\"http://schemas.microsoft.com/netservices/2010/10/servicebus/connect\\">" + "<GcmRegistrationId>" + {GCMRegID} + "</GcmRegistrationId> " + "<BodyTemplate><![CDATA[ {\\"data\\": { \\"message\\": \\"$(msg)\\" } }]]></BodyTemplate>" + "</GcmTemplateRegistrationDescription>" + "</content>" + "</entry>"; $.ajax( { type: "POST", url: "https://{myNamespace}.servicebus.windows.net/{myHubName}/registrations/?api-version=2015-01", headers: { 'Authorization': '{myAccessKey}', 'Content-Type': 'application/atom+xml;type=entry;charset=utf-8', 'x-ms-version': '2015-01' }, data: registrationXML, dataType: "xml", contentType: "text/xml", success: function (data) { debugger; }, error: function (xhr, ajaxOptions, thrownError) { debugger; } });
{myAccessKey}的值應如下所示:
SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>
有關構建簽名的文檔位於https://msdn.microsoft.com/en-us/library/azure/dn170477.aspx
以下是創建授權令牌2小時的方法。
static string GenerateSasToken(Uri uri, string sasKeyValue, string sasKeyName)
{
var targetUri = HttpUtility.UrlEncode(uri.ToString().ToLower(), Encoding.UTF8).ToLower();
var expiresOnDate = Convert.ToInt64(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds) + 2*60*60;
var toSign = targetUri + "\n" + expiresOnDate;
var keyBytes = Encoding.UTF8.GetBytes(sasKeyValue);
var mac = new HMACSHA256(keyBytes);
mac.Initialize();
var rawHmac = mac.ComputeHash(Encoding.UTF8.GetBytes(toSign));
var signature = HttpUtility.UrlEncode(Convert.ToBase64String(rawHmac), Encoding.UTF8);
var token = "SharedAccessSignature sr=" + targetUri + "&sig=" + signature + "&se=" + expiresOnDate + "&skn=" + sasKeyName;
return token;
}
謝謝,薩特什
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.