java - REST API Azure 事件中心 ExpiredToken

标签 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>

key 在我使用之前已重新生成。我如何才能不收到该错误或在不输入 key 过期时间的情况下发出请求?

谢谢

最佳答案

根据我的经验,如果此处正确发布了 se146480684,我认为该问题是由 过期 时间引起的,因为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/

相关文章:

javascript - 如何将 JSON API 图像从 API 转换为 Base64 以在网页上显示?

spring - 如何以 RESTful 方式编写 Spring Web MVC 3 应用程序?

node.js - 如何使用 API key 保护 REST API

java - 什么是 Python 字典的 Java 等价物

java - 将 3x3 OpenCV Mat 转换为 Android 矩阵

java - 如何为 EditText 的提示应用动画?

java - 如何从数组创建并行流?

javascript - 通过 this.state 不工作 ReactJS

api - 选择 flutter 中下拉按钮的初始值

php - Magento 产品的 API