java - okhttp 授权签名 hmac-sha256 不起作用
问题描述
我正在使用 remote.it api 这里是文档https://link.remote.it/docs/graphql 我已经创建了一个测试帐户,访问权限是
R3_ACCESS_KEY_ID=########
R3_SECRET_ACCESS_KEY=################
远程它有失眠插件,使用这些插件我可以向运行良好的站点发送请求
现在我将它转换为 okhttp 请求,但它总是显示未经授权。我尝试了很多选择,但这对我不起作用。
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/graphql");
RequestBody body = RequestBody.create(mediaType, "{\"query\":\"#Query\\n\\nquery getDevices($size: Int, $from: Int, $sort: String) {\\n login {\\n devices(size: $size, from: $from, sort: $sort) {\\n total\\n hasMore\\n items {\\n id\\n name\\n hardwareId\\n created\\n services {\\n id\\n name\\n port\\n type\\n state\\n host\\n enabled\\n }\\n }\\n }\\n }\\n}\\n\\n\",\"variables\":{\"size\":1000,\"from\":0}}");
Request request = new Request.Builder()
.url("https://api.remote.it/graphql/v1")
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("Date", "Mon, 09 Aug 2021 07:44:57 GMT")
.addHeader("Authorization", "Signature keyId="KHHUWNUWBY6NFXLOWSSA",algorithm="hmac-sha256",headers="(request-target) host date content-type content-length",signature="zQO/9ehBLSt80jXk26Rxvgi/wJixEDJiXG9X5sXeloo="")
.build();
Response response = client.newCall(request).execute();
我没有办法解决这个问题。谁能帮我解决这个未经授权的问题?
解决方案
insomnia 插件的源代码可在此处获得:https ://github.com/remoteit/insomnia-plugin-remoteit
我们在这里使用 http-signature 库https://www.npmjs.com/package/http-signature,但我认为任何 http 签名库只要遵循规范就可以工作。
推荐阅读
- javascript - 键位功能不起作用
- c# - 代码没有进入具体方法
- python - 如何将 16 位二进制文件转换为 32 位文件?
- webpack - 访问 google-closure-library 方法 goog.require 和 goog.provide
- drupal-7 - drupal_mail() 返回 true 但无法发送邮件
- mysql - Mysql - mysqld.service 的作业失败,因为控制进程以错误代码退出
- angularjs - Angularjs将数据从表中获取到标签中
- java - 找到一个属于另一个连接关系的对象
- javascript - 谷歌地图标记聚类不适用于缩小
- javascript - 'this.$refs' 在父组件中始终为空