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.

Hello @navinchandra.markandeya

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?


If so please can you click the 'Accept' text next to the appropriate reply. This will guide all community members who have a similar question.

Thanks,


AHS

Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.

Thanks,

AHS

Upvotes
Accepted
4.5k 4 8 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 8 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.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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