For a deeper look into our World Check One API, look into:

Overview |  Quickstart |  Documentation |  Downloads

question

Upvotes
Accepted

Can you help? I am getting on v2/groups in Groovy?

I tried troubleshooting, however I am not getting anywhere, likely the hmac calculation is incorrect. Please help.


   @Test
  void testResponse() {
    final String instant = timeInGMT()
    final String host = "rms-world-check-one-api-pilot.thomsonreuters.com"
    final String gatewayUrl = "/v2/groups"
    final String url = "https://" + host + gatewayUrl
    final String apiKey = "MY-KEY"
    final String apiSecret = "MY-SECRET"
    final String dataToSign = "(request-target): get " + gatewayUrl + "\n" + "host: " + host +
        "\n" + "date: " + instant
    final String hmac = calcHmacSha256(
        apiSecret.getBytes(StandardCharsets.UTF_8),
        dataToSign.getBytes(StandardCharsets.UTF_8)
    )
    final String authorization = "Signature keyId=\"" + apiKey +
        "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date\",signature=\"" + hmac + "\""

    final OkHttpClient client = new OkHttpClient()
    final Request request = new Request.Builder()
        .url(url)
        .header("Cache-Control", "no-cache")
        .header("Authorization", authorization)
        .header("Date", instant)
        .build()

    final Call call = client.newCall(request)
    final Response response = call.execute()
    assert response.code() == HttpStatus.SC_OK
  }

  private String timeInGMT() {
    final Date currentTime = new Date()
    final SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d yyyy HH:mm:ss z")
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
    return sdf.format(currentTime)
  }

  private String calcHmacSha256(byte[] secretKey, byte[] message) {
    byte[] hmacSha256
    try {
      Mac mac = Mac.getInstance("HmacSHA256")
      SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey, "HmacSHA256")
      mac.init(secretKeySpec)
      hmacSha256 = mac.doFinal(message)
    } catch (Exception e) {
      throw new RuntimeException("Failed to calculate hmac-sha256", e)
    }
    return new String(Base64.encoder.encode(hmacSha256), StandardCharsets.UTF_8)
  }



world-checkworld-check-oneerror-401java-groovy
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
Accepted
4.5k 4 7 8

@navinchandra.markandeya,

Thanks for sharing the details.

The timestamp between the request and the response headers is more than 30 seconds and is the cause of error 401. The acceptable timestamp difference is less then 30 seconds.

Can you please update your system clock and sync it with the NTP and try again?

Please share the updated request and response headers if you are still encountering error 401.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
4.5k 4 7 8

@navinchandra.markandeya,

Can you please share the request and the response headers of the failed API call?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes

Request Header


Response Header


reqh-view-2.png (21.9 KiB)
resph-view-2.png (31.5 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.