【问题标题】:okhttp authorization signature hmac-sha256 not workingokhttp 授权签名 hmac-sha256 不起作用
【发布时间】:2021-10-12 22:30:14
【问题描述】:

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

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

Remote 它有失眠插件,使用这些插件我可以向运行良好的站点发送请求

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

我没有办法解决这个问题。谁能帮我解决这个未经授权的问题?

【问题讨论】:

标签: java okhttp hmac


【解决方案1】:

失眠插件的来源在这里:https://github.com/remoteit/insomnia-plugin-remoteit

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

【讨论】:

    【解决方案2】:

    通过检查 Insomnia 的请求,您似乎正在自己进行所有签名。

    您需要一个诸如https://github.com/tomitribe/http-signatures-java 之类的库来生成签名的请求标头。 您无法自己计算此标头,因为它是多个标头的乘积,例如:

    • 访问密钥
    • 请求目标
    • 主持人
    • 日期
    • 内容类型
    • 内容长度

    我们没有 java 示例,但您可以查看其他示例以了解签名字符串中的元素。 https://docs.remote.it/api-reference/authentication#api-request-signing

    如果仍有问题,请通过 support@remote.it 联系 remote.it 支持

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多