首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在邮递员中创建Azure通知中心注册

在邮递员中创建Azure通知中心注册
EN

Stack Overflow用户
提问于 2015-08-13 12:25:39
回答 9查看 11.5K关注 0票数 14

我在Azure门户中创建了一个服务总线/通知中心。

现在,我尝试在Postman中使用Azure,基于这个文档:https://msdn.microsoft.com/en-us/library/azure/dn223265.aspx

下面是我的邮递员配置:

它是下面的url (创建注册)方法(出于隐私原因,我在该url中替换了mysite )

Header中,我输入了2个条目:

内容-类型为应用程序/atom+xml;type=entry;charset=utf-8

Authorization Endpoint=sb://mysite.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=麦基

Body中,我选择了raw -(txt/xml)并粘贴:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
    <content type="application/xml">
        <WindowsRegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
            <Tags>myTag, myOtherTag</Tags>
            <ChannelUri>{ChannelUri}</ChannelUri>
        </WindowsRegistrationDescription>
    </content>
</entry>

(这是Windows Notification示例的本机注册)

当我从邮递员内部发送这个电话时,我得到一个401错误

代码语言:javascript
复制
<Error>
    <Code>401</Code>
    <Detail>MalformedToken: The credentials contained in the authorization header are not in the WRAP format..TrackingId:ee0d87ef-6175-46a1-9b35-6c31eed6049d_G2,TimeStamp:8/13/2015 9:58:26 AM</Detail>
</Error>

我错过了什么?是我在邮递员的“禁止八月”上留下的授权标签吗?授权头的值应该像这里所示的那样编码吗?通过REST为Azure通知中心创建注册ID

谢谢。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-08-14 15:25:17

您的"Authorization"头不正确。

"Authorization"中所述,Azure通知集线器REST文档,例如用于创建注册报头必须包含“服务总线共享访问签名身份验证中指定的令牌”.

基于服务总线的共享访问签名认证的文档中将令牌格式指定为:

代码语言:javascript
复制
SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>
  • URL-encoded-resourceURI:您发送POST请求的url (在您的例子中是"https://mysite.servicebus.windows.net/mysite-notif/registrations/?api-version=2015-01")
  • keyName:在您的示例中,默认密钥名为"DefaultFullSharedAccessSignature“
  • expiry:过期时间表示为1970年1月1日协调世界时00时起的秒数。
  • signature-string:使用带有授权规则的PrimaryKey属性的字符串到签名的HMAC- The 256计算SAS令牌的签名。字符串到符号由一个资源URI和一个到期组成,格式如下:
    • StringToSign = <resourceURI> + "\n" + expiry;
    • resourceURI应该与URL-encoded-resourceURI相同(也是URL-encoded-resourceURI编码的)
    • 使用SAS键计算StringToSign的HMAC- the 256(示例中用mykey替换的内容)。然后,为signature-string使用URL编码结果。

票数 9
EN

Stack Overflow用户

发布于 2018-05-15 06:02:42

下面是一个用于postman预请求脚本的示例,该脚本生成所需的标头:

代码语言:javascript
复制
function getAuthHeader(resourceUri, keyName, key) {

    var d = new Date();
    var sinceEpoch = Math.round(d.getTime() / 1000);

    var expiry = (sinceEpoch + 3600);

    var stringToSign = encodeURIComponent(resourceUri) + '\n' + expiry;

    var hash = CryptoJS.HmacSHA256(stringToSign, key);
    var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);

    var sasToken = 'SharedAccessSignature sr=' + encodeURIComponent(resourceUri) + '&sig=' + encodeURIComponent(hashInBase64) + '&se=' + expiry + '&skn=' + keyName;

    return sasToken;
}

postman.setEnvironmentVariable('azure-authorization', getAuthHeader(request['url'], "mySharedAccessKeyName", "mySharedAccessKey"));
postman.setEnvironmentVariable('current-date',new Date().toUTCString());

若要使用它,请执行以下操作:

  1. 将此预请求脚本添加到邮递员请求中。
  2. 用凭据替换mySharedAccessKeyNamemySharedAccessKey
  3. 添加标题Authorization: {{azure-authorization}}
  4. 添加标题x-ms-date: {{current-date}}
票数 17
EN

Stack Overflow用户

发布于 2016-10-03 20:34:02

在花了一个多小时试图理解为什么上面的步骤不起作用之后,我意识到如果您使用的是来自https://code.msdn.microsoft.com/Shared-Access-Signature-0a88adf8的代码,它有两件事情没有在代码的顶部定义。Key和KeyName。

关键是暗示我的部分,因为乍一看这里的另一篇文章我认为是一样的。不是的。

在Azure中:转到Notification,然后单击> Settings>访问策略,然后单击具有管理权限的策略。如果需要,请添加策略。一旦您单击访问策略。它显示连接字符串,主字符串和辅助字符串。将主版复制到剪贴板并将其扔到记事本中。看起来会像这样..。

Endpoint=sb://mysite.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=hc7qZ+pMG6zltjmASDFrskZO+Yv52D55KQUxUTSO0og=

SharedAccessKeyName = KeyName

SharedAccessKey = Key

是的,它看起来很明显,在这里所有的拼写,但你不能看到这个信息在AZURE门户,除非你复制。

因此,为了完全清楚,在标题中,通过组合+ "\n“+到期来生成键"sig”,这是Baris指出的,但是您用键(而不是KeyName)签名。

我可能听起来像个白痴,把这个拼出来,但这个过程并不容易。

希望它能帮到别人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31988204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档