On This Page
FILTER BY TAG
Step 3C: Set the JWS Body Claims
After you set the JWS header values, you must create the JWS body by setting
these body claim values. After the body claims are created, use Base64URL to encode
it. The encoded body claim value is the second segment of the JWS token.
JWS Body Claim Field | Description | Data Type | Field Value Format |
|---|---|---|---|
digest | A Base64-encoded hash of the message payload. Do not include the digest field if the request message
is empty, such as during a GET or DELETE request. | String | Base64-encoded string: uppercase, lowercase, digits,
+ , / , and optional
= padding |
digestAlgorithm | The algorithm used to hash the message payload. The message payload should be hashed using the SHA-256
algorithm. Do not include the digestAlgorithm field if the
digest field is not included. | String | Lowercase |
exp | The time at which the JWS token expires. IMPORTANT
Field values
cannot exceed two minutes after the message issue date,
which is the iat field value.This field is an HTTP-date value as defined in RFC7231. For
example, 01/01/2020 at 00:02:00 is
1577836920 . | String | Numeric |
iat | The date and time at which the message is issued. This field
uses a NumericDate value as defined in RFC 7519,
which is the number of seconds since
1970‑01‑01T00:00:00Z (Unix epoch).For example, 01/01/2020 at 00:00:00 is
1577836800 . | String | Numeric |
iss | The issuer identifier for the JWS token.
Set
to the merchant ID that created the shared secret key
pair. This value is used to validate the
issuer. | String | Lowercase alphanumeric |
jti | The unique token ID. This value is used for replay
prevention. Format the value using UUID version 4. For example:
6643fb9a-8093-47c6-95d3-8d69785b5e62 | String | Lowercase alphanumeric |
request-host | The endpoint hostname for the HTTP request, excluding the
protocol and path. https://nabgateway-api.nab.com.au /pts/v2/paymentsnabgateway-api.nab.com.au . | String | Lowercase alphanumeric with periods |
request-method | The HTTP request method. For example, post ,
get , put ,
patch , or delete . | String | Lowercase |
request-resource-path | The endpoint path for the HTTP request, excluding the
domain. For example, to send a message to the https://nabgateway-api.nab.com.au /pts/v2/payments/pts/v2/payments . | String | Lowercase alphanumeric |
v-c-jwt-version | The Visa JWT scheme version number. Set to
2 . | String | Numeric |
v-c-merchant-id | Your National Australia Bank transacting merchant ID
(MID).If you are a portfolio or merchant account user, set this to
the transacting merchant ID you send requests on behalf
of. | String | Lowercase alphanumeric |
v-c-response-mle-kid | The message-level encryption response key ID, also known as
the REST–API Response MLE key. | String | Lowercase alphanumeric |
The value of the
digest
JWS claim is a hashed version of the HTTP
message body that you must calculate. National Australia Bank
uses this hash
value to validate the integrity of your message body.Follow these steps to calculate the digest hash:
- Generate the SHA-256 hash of the JSON payload (message body).
- Encode the hashed string to Base64.
- Add the message body hash to thedigestJWS body claims.
- Add the algorithm used to hash the digest in thedigestAlgorithmJWS body claims.
Example: Creating a Message Hash Using the Command Line
shasum
Toolcat <<'EOF' | tr -d '\n' | shasum -a 256 { "clientReferenceInformation": { "code": "TC50171_3" }, "paymentInformation": { "card": { "number": "4111111111111111", "expirationMonth": "12", "expirationYear": "2031" } }, "orderInformation": { "amountDetails": { "totalAmount": "102.21", "currency": "USD" }, "billTo": { "firstName": "John", "lastName": "Doe", "address1": "1MarketSt", "locality": "sanfrancisco", "administrativeArea": "CA", "postalCode": "94105", "country": "US", "email": "", "phoneNumber": "4158880000" } } } EOF
Example: Creating a Message Hash Using the Command Line
base64
Toolecho -n "6ae5459bc8a7d6a4b203e8a734d6a616725134088e13261f5bbcefc1424fc956" | base64
Example: Creating a Message Hash Using C#
public static string GenerateDigest() { var digest = ""; var bodyText = "{ your JSON payload }"; using (var sha256hash = SHA256.Create()) { byte[] payloadBytes = sha256hash.ComputeHash(Encoding.UTF8.GetBytes(bodyText)); digest = Convert.ToBase64String(payloadBytes); } return digest; }
Example: Creating a Message Using Java
public static String GenerateDigest() throws NoSuchAlgorithmException { String bodyText = "{ your JSON payload }"; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(bodyText.getBytes(StandardCharsets.UTF_8)); byte[] digest = md.digest(); return Base64.getEncoder().encodeToString(digest); }