簡體   English   中英

在Azure通知中心中注冊設備時,請繼續未經授權

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM