我正在使用 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>
key 在我使用之前已重新生成。我如何才能不收到该错误或在不输入 key 过期时间的情况下发出请求?
谢谢
最佳答案
根据我的经验,如果此处正确发布了 se
值 146480684
,我认为该问题是由 过期
时间引起的,因为se
键,以秒为单位测量当前时间和 UTC 时间 1970 年 1 月 1 日午夜之间的时间。
因此,应使用下面的 Java 代码获取作为 se
键值的 expiry
时间。
long now = System.currentTimeMillis();
int expiry = (int)(now/1000) + 3600;
作为引用,您可以引用C#的官方文档,请参见https://msdn.microsoft.com/en-us/library/azure/mt652140.aspx .
关于java - REST API Azure 事件中心 ExpiredToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446278/