java - okhttp 授权签名 hmac-sha256 不起作用

标签 java okhttp hmac

我正在使用remote.it api 这是文档https://link.remote.it/docs/graphql 我创建了一个测试帐户,其访问权限是

R3_ACCESS_KEY_ID=########
R3_SECRET_ACCESS_KEY=################

远程它有失眠插件,使用这些插件我可以向工作正常的网站发送请求 enter image description here

现在我将其转换为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();

我没有办法解决这个问题。任何人都可以帮我解决这个未经授权的问题吗?

最佳答案

失眠插件的源代码可以在这里找到:https://github.com/remoteit/insomnia-plugin-remoteit

我们在这里使用http-signature库https://www.npmjs.com/package/http-signature ,但我假设任何 http 签名库只要遵循规范就可以工作。

关于java - okhttp 授权签名 hmac-sha256 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68708511/

相关文章:

java - 使用android studio在内部存储中创建目录和文件夹

android - OkHttp 请求错误链接时崩溃

android - Okhttp 在 Android 7.0 上没有选择 http2

javascript - 发送 GET 请求,同时读取流

rest - 在 RESTful API 的上下文中,使用 RSA 签署 JWT 比 SHA 有什么优势?

java - Android rx按顺序调用多个句子

java - 使用 HTML 字符串时 JLabel 中的颜色错误

python - Postgresql hmac-sha1 签名与 python 签名不同

java - Flex/Java Web 应用程序的外部化客户端 ChannelSet 配置

Python 3 使用 key sha512 签署消息