REST API Azure事件中心ExpiredToken

时间:2016-05-25 19:43:25

标签: java api rest azure azure-eventhub

我正在使用Rest工具Chrome客户端测试API,以验证我所做的POST请求是否正确,以便在Java应用程序中使用它。我的请求采用以下格式:

POST /androidhub/publishers/android/messages?timeout=60&api-version=2014-01 
HTTP/1.1 HOST: androidhub-124.servicebus.windows.net 
authorization: SharedAccessSignature sr=androidhub-124.servicebus.windows.net&sig=mykeySAS=&se=146480684&skn=RootManageSharedAccessKey 
content-type: application/json, application/atom+xml;type=entry;charset=utf-8 
content-length: 45  { "DeviceId":"dev-01", "Temperature":"37.0" }

但我有以下错误。

<Error>
<Code>401</Code>
<Detail>ExpiredToken: . TrackingId:2f6d284e-d7d2-4c9c-81a5-79c542ce8eee_G7, SystemTracker:androidhub-124.servicebus.windows.net:androidhub/publishers/android/messages, Timestamp:5/25/2016 7:13:33 PM</Detail>
</Error>

在使用之前,钥匙已经重新生成了。我如何在没有确定密钥到期时间的情况下得到错误或提出请求?

谢谢

2 个答案:

答案 0 :(得分:1)

根据我的经验,如果 drop: function (event, ui) { var droppable = $(this); var draggable = ui.draggable; parentOffset = $(this).offset(); var offset = $(draggable).offset(); var xPos = offset.left; var yPos = offset.top; draggable.css({ "left": xPos - parentOffset.left, "top": yPos - parentOffset.top, "position": "absolute" }).appendTo(droppable); } se在此处正确发布,我认为该问题是由146480684时间作为expiry键测量的当前时间与1970年1月1日午夜时间之间的秒数。

因此,使用下面的Java代码可以获得se时间作为expiry键的值。

se

作为参考,您可以参考C#的官方文档,请参阅https://msdn.microsoft.com/en-us/library/azure/mt652140.aspx

答案 1 :(得分:0)

除了设置正确的se值之外,还必须确保sig是由两个命名空间(在您的情况下为{{ 1}})和androidhub-124,使用SAS密钥进行签名。

Microsoft here提供了在Java中生成se的示例代码:

sig