Публикация в формате новостей Apple

Я хочу опубликовать статью о API нового издателя Apple. Я пытаюсь воспроизвести тот же код Python для создания статьи в документация Apple

String body = new ObjectMapper().writeValueAsString(articleModel); //a json model that represents the article
String finalUrl = baseURL + channelId + "/articles/";
String date= getCurrentDate();
String canonical_request = "POST"+finalUrl + date + "multipart/form-data; boundary=1906ef19a2044180b914d742c37e2ace"+ body;
String authHeader = "HHMAC; key="+apiKeyId+";signature="+getSignature(secret, canonical_request)+";date="+date;


  CloseableHttpClient client = HttpClients.createDefault();
  HttpPost httpPost = new HttpPost(finalUrl);

  StringEntity entity = new StringEntity(new ObjectMapper().writeValueAsString(body));
  httpPost.setEntity(entity);

  httpPost.setHeader("Content-type", "'multipart/form-data; boundary=1906ef19a2044180b914d742c37e2ace'");
  httpPost.setHeader("Authorization", authHeader);

  CloseableHttpResponse response = client.execute(httpPost)

Вот как я получаю свою подпись:

private static String getSignature(String key, String data) {
 Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
 SecretKeySpec secret_key = new SecretKeySpec(Base64.getDecoder().decode(key), "HmacSHA256");
 sha256_HMAC.init(secret_key);
 byte [] m = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
 return Base64.getEncoder().encodeToString(m);
}

Я всегда получаю 401: Unauthorized


person user1912404    schedule 09.12.2017    source источник


Ответы (1)


Попробуйте следующим образом:

private byte[] decodedKey = Base64.getDecoder().decode(api_key_secret);
private HmacUtils hmacUtils = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, decodedKey);

byte[] base64EncodedMac = Base64.getEncoder().encode(hmacUtils.hmac(outputStream.toByteArray()));

String signature = new String(base64EncodedMac);
String authorization = String.format("HHMAC; key=%s; signature=%s; date=%s", api_key_id, signature, date);
person taz    schedule 19.11.2018