Populating the JSON Web Token with Customer Information

As soon as the transient token is validated, you can add the customer's personal information to the token.
Follow these steps to populate the token:
  1. Construct the JSON payload.
  2. Generate the JSON Web Encryption (JWE) data object.

Constructing the JSON Payload

To construct the JSON payload, create a JSON dataset that includes these elements:
  • data:
    The payload. This payload must include all required fields and can contain any or all of the optional fields in the transient token's capture context.
  • context:
    The capture context from the transient token. The transient token's payload is the claimset
  • index:
    Specifies the recipient key used.
The payload should follow this format:
{ "data": { [Claim set field data] }, "context": [Claimset (payload) extracted from the transient token], "index": 0 //In this case, there is only one recipient for the JWT, so this value must be set to 0. }
Example
{ "data": { "paymentInformation": { "card": { "number": "4111111111111111", "expirationMonth": "12", "expirationYear": "2031", "type": "", "securityCode": "" } }, "orderInformation": { "amountDetails": { "totalAmount": "102.21", "currency": "USD" }, "billTo": { "firstName": "John", "lastName": "Doe", "address1": "1 Market St", "locality": "san francisco", "administrativeArea": "CA", "postalCode": "94105", "country": "US", "email": "", "phoneNumber": "4158880000" } } }, "context": "eyJraWQiOiIzZyIsImFsZyI6IlJTMjU2In0.eyJmbHgiOnsicGF0aCI6Ii9mbGV4L3YyL3Rva2VucyIsImRhdGE iOiJyMlh5b2QxUk9SdUEyajFwUnA0cUpoQUFFSkFvUVN1QzZzZXFkVHpMaUJuTmZrMzljOXJQSHJnQTRsSEZ1QXRrS0JiRmpqa0tH V2tmNUVjNHhBRVBMTzc0b0NsdjhneUhueFJOb1E1dHYwVnpNYU5pOWNxd21EWmJReExENW5pVk1SWGMiLCJvcmlnaW4iOiJodHRwc zovL3Rlc3RmbGV4LmN5YmVyc291cmNlLmNvbSIsImp3ayI6eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6ImVuYyIsIm4iOi JqYlA4dHpIX21FQUloYUdmcXJ3TEQtZHZsbTZSLXgySWVaVDNweUU2YXF2SkxkY0h4bzRQZktOSXpMZ0hfZEJVTjZENGxFc2dTY3N oT1RVOVVGVVQyVERpZUlaMVJjNW5rclNub2lYcmR5MFJscUlrS3BCa2h1WXRsSWM4OTZQb3JYVENmUk45MmpXOXgzN2dUUnRBc2l2 QXJQR2p0WGV4QnhaN29SWkFXRVY5Yy1FYVFybU55N2ZzTnJxdEZMR2xVbXdEQ05ONEVERXdjaWd3ck5JUlJQaHpPQkJ5UWFvenB6V lhXSVctS3RRb2otSHFfTmk2YUN0MXkwdWVLZjFkZ0dyUHpibDV6WVNFYUJtM3gzdGZzTmM3MXVQbGJXZzY0LU83SnlMcFJWVU5UYn R1NC1ONWNic0ZaMnZBeGYwWTdWRnRaclZiR0ZTRmFLQjZPWVdWVnciLCJraWQiOiIwOGlHZEN2Z2lCWEM4YXd6U0szWjRoUm9hbEl KTzVvMSJ9fSwiY3R4IjpbeyJkYXRhIjp7InRhcmdldE9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozMDAwIiwiaHR0cDovL2xv Y2FsaG9zdDo1MDAwIl0sIm1mT3JpZ2luIjoiaHR0cHM6Ly90ZXN0ZmxleC5jeWJlcnNvdXJjZS5jb20ifSwidHlwZSI6Im1mLTAuM TEuMCJ9XSwiaXNzIjoiRmxleCBBUEkiLCJleHAiOjE2MDQ2MTc4MjgsImlhdCI6MTYwNDYxNjkyOCwianRpIjoiR1oxb1dCbTVBbH kzendwOCJ9.ZF9-CG_FvIQTMocIMwcBH6IMWBiFfl-ufPj0TdXFuTSpusL6fAsxnyxdlf6V6i6wO0PDgv6SY-2MWP-Q600WAjFZfm R1y3r13Tig9Ldql4WOp8zhIb6klLD01PYWeyXYZ0xqRQL0_eYTliDrV66P72PVX6DqCeoJFYnh_csEcAChmyBVRqI2Gxd9zelALqB NU6WeHiN8FT36xRHHruxRJ2hBCI_OE0p9haQjuD4qtfk9grfhnt2mFpiC4s0j0yHaHCgiVm5NPuPecpS7t47cjsSG6PfIHNbBAjdI VcNpmFFyH6sCLRplOgW0vPYw4nUOgtq7y_voHe_nOal6eHFr4A", "index": 0 }

Generating a JSON Web Encryption Data Object

The JSON web encryption (JWE) data object is built using these elements:
  • header
    : Include the
    kid
    and
    alg
    parameters.
  • Content Encryption Key (CEK)
    : The unique encryption key used to encrypt the token.
  • ciphertext
    : The encrypted JSON payload.
  • initialization vector
    : A Base64-encoded randomly generated number that is used along with a secret key to encrypt data.
  • authentication tag
    : Created during the encryption, this tag enables the verifier to prove the integrity of the ciphertext and the header.
The payload should use this format:
header.cek.cyphertext.initialization_vector.auth_tag
For more information about JWE data objects, see RFC 7516.
Example
IMPORTANT
Line breaks have been added for readability and formatting.
eyJraWQiOiIwMFN2SWFHSWZ5YXc4OTdyRGVHOWVGZE9ES2FDS2MxcSIsImVuYyI6IkEyNTZHQ00iLCJhbGciOiJ SU0EtT0FFUCJ9.juQDhF5XcZ1rDbupn1nZ1qHhephzWpa8FumH4KrsD0yF1tCOD0L8WfpSyd5VGIewb4I1IipmS B5vV0O3Cb6FrNLipjFq-oexFRwSK92NbB88ySFO-7FyvPddiqaQFkA81xn8nwdoHMwUsQuqe8Ts_krLsvYghmsc xXKkwcEKqxoWbmD-yEfvKxGyHACLprAKLm-xusexaJLF42OTxYuEhzzrSe6MRll0zXuk2DAhtUL2oHCgu8P3shg JBJqsOPcAFtwtLBRoDwlDt0ybOHjd34Svbpgf_3ncFnDkEQYe5QeElEHaB2a0Nbwo61I1UETfhedHQc8IMtDmVu Kk9pgCTg.uWrwGp2jZxZd5wF0.oFzZ3I2ry77jf-3wB_2q8G-0tbYJWQj88NdzRmVNO34JbreX5WOCju7ntvN8h 83NJXEA_cQech2PEGIZV_tADBaLbSxJeitYKwaQhs_tRVrzrcd8Qhgs4OADfky2m310eV8bUG8D4GZBKRHL6ScL f5p30b6Hoa5fDYsU7IHNyCReiaiGPExlY4luwL9QQxrfY2LTv74Pcqyh-B4byNxR5hTw3SJm7DT7YQLl6_-2ROq JhJoweTdDJtmJoM-LxKEij2TLgHBdqso9f036dfn0SHLl1vG86C1-6DA9yFIZB3gLYnyom1jZuGxUOPXDojUfXo 0OpUj8OI6CnQWdhKpC9X19s8xAhIAUYYdvWrEqFfBzd9S-4E-ZdyUGfxG7fLQuLZKQJeYBbGCssLGSIXLOb15sK OopIgqCTU7M5EN_F7zW0IwJ4-b8OVf_J80-hW1e043RlzBoMr3aGdXFIaLmVbEIzTNeZrulYTTWWLbQlcLTXqAM 0yFlKmIrpq55VruvVR8i_iju5MFzzTYuLut9ecvYbFFeUkUaUBihNXg4Np57Ix23gaJuMcPBgUqkH3nCTZQE7yQ OynzO-lho_jAHy1xcwV_DJhhAJnACO5HUDAjVKmr-GKqxvDZWVzrqjFkPArX81eRSnn9Dr2Ahozehn9FTB37AJV 3BEC2i7WMvAbQE1EpPVGTdvVDhH2xlLAHqHTBeQakzY4e81h2L3EDCmdjx_yZdZOUUSG3mLQSp864OV5pHc2X22 ZRadGbrLwnA-m2W1oDZIzh2t5nZdJhePnNzHbNXTf0xWSklxdgJdfG52FVSH-cKiJQnDhmCH6nPVK7NKnL0vRuZ -uuOa4PJQDoT2H8eSjpvo8fo9rwfLYmQJa042t7OSE95bER9k1oJTUm83LNA3bxhWk5en2UFgcip3z3KlOmFwPL VNCpzitULzAEHwBJlrB0aGXkQi1bJMxo9XZNREnFyYAlX3-aruXIe47pwAyOEX-hd-3Y7UsxBVYB86se51q2-VU ldR0zj6cwZvrTxhFM_gAsD0HisAGa6E3n3n3w1JAvjuZdHRoQqaT00YFmTdSbocmTOEUammYmBjagKKycOzgmoZ SaYpffQl_R06tEZke6uhJrPQuTwLwivZMtnWE8O16VIRX4cG3OfzaRYs0GvPWumDlrSbM8FugMIEaUTng5T9Cdk ixegRmszDELzNjNTJLe2WwxJG4Kb_1-yGMRlhFys4FEwVMk8AWJJRDpwG0jdmHkBz9l7z1PFdIcidbIpmgH7m5R D6kwRSxaG_BJWDc2IkIFyNa2G_-gHjQh_utablUOL9CXxxFCKD9UHojtsHneFt1bhV2P_sfYYhtZo5XloKAAEXq mOSY2boYyj0hMlKNuVqukrnWG6-bV-LBf9DvpYNKO9YeU6rYD_WOxSQlliqVvEK8n9xLCmQQKsK2Xj2WGh7wWTQ TMh18hcsNENN3Loq9DofAbOrCXqdREAshxg_MOI5vGe0JvIR9Gj6kAhKGFf2DYBqMynbb9jWJnjCzFXBCqXXjTO uCoZdzlV9RbLxIBOOojIfLfdtVLGKPLKizXaSQ8YrLiBATarkpO7WFSSF66lvezwDZlfDErA-0kij1n2poKqDLY L3vNfX8vU33ef96VQc9I3auTpiWd0NLa5yw0RWREAjqa4pHYTEZDiLcD0vETt84_aon3U7co_8fAYrztokTIJ2O RuhN_xA0rV1MbOZIwW6m-duqYLFLQlcwjxNwTdaberNy6bCg9otljd5l7nSbzZ6UpHrHDF02LrM41NmQUx9tZFH ypYjFdgiKKgqk-kTe3pq6ithsTPvcDvDkNgCSb9H_X30qm2-0VXaGIcYBcmJdsbBt7VJuYVZ1I_2l4-_6glgvgQ z9d5KaHyZeJimSXqOsbqUQzNKWC7_K81Z5XmqCPJByrOiROkO6iEe_poqRgVzHETHYmstAzUlgUvPD3XocZdlHu PHArQe6GddVmxnhTDV1M0TmXwK03f0jGg7LMjWjU1k15X8xYZTk_HMo76IetUOdf9BIoaMBqMHJkk936uzjIeiW 1DbEb4ExLtpIeSoq_fnelAWoVEDMa_XoVkWCR5R7wTJjGyZKjJJkJ6UqYQguS9oO95MZp8N0Qa41wKCvztLbFKt EU7sPz3pU5oUVbn9cZS7WCzCUNWGxb3PO0nTzPsP_MhD71JcuAEFSLS05m1hkoNiYe_6pmLv8Rrgp71kFsTOIOU rcUvwdJRikDOLdNbO5b-_6HjczDPzx9PaM_Zn-34mfOQPthWAfum3YvpmthuKxAWfdBChZXe9oCMeBGewGl7mKM h9H5SP6su5yw-IFe7iBd338LVVPjRXif1rNsU631YXBu9Lz-l6o4cuGuYPVHPhHf4lifFXvlvi702wD7fbYn3cZ 55_yGVJvcFPq6OMUGJUSy5ncj-n7a8-IcGmSFpMtgnMc1ycJa_0N1vtwyjm0WvdzkUrBNC_OoCmHlLaG3XTRenL _WYhzxDUdQQBuSC3acFu28x3NL8cmR5iqy7sBGUKcwt_ogX9ZoQyFzUTFOw.QqKIuF8EnuhOTM8PvGEs8A
Example Java Code
This Java example includes the code that can be used to generate the JWE data object:
package com.
cybersource
.example.service; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.
cybersource
.example.config.ApplicationProperties; import com.
cybersource
.example.domain.CaptureContextResponseBody; import com.
cybersource
.example.domain.CaptureContextResponseHeader; import com.
cybersource
.example.domain.JWK; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.math.BigInteger; import java.security.KeyFactory; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAPublicKeySpec; import java.util.Base64; import java.util.Base64.Decoder; @Service @RequiredArgsConstructor public class JwtProcessorService { @Autowired private final ApplicationProperties applicationProperties; @SneakyThrows public String verifyJwtAndGetDecodedBody(final String jwt) { // Parse the JWT response into header, payload, and signature final String[] jwtChunks = jwt.split("\\."); final Decoder decoder = Base64.getUrlDecoder(); final String header = new String(decoder.decode(jwtChunks[0])); final String body = new String(decoder.decode(jwtChunks[1])); // Normally you'd want to cache the header and JWK, and only hit /flex/v2/public-keys/{kid} when the key rotates. // For simplicity and demonstration's sake let's retrieve it every time final JWK publicKeyJWK = getPublicKeyFromHeader(header); // Construct an RSA Key out of the response we got from the /public-keys endpoint final BigInteger modulus = new BigInteger(1, decoder.decode(publicKeyJWK.n())); final BigInteger exponent = new BigInteger(1, decoder.decode(publicKeyJWK.e())); final RSAPublicKey rsaPublicKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new RSAPublicKeySpec(modulus, exponent)); // Verify the JWT's signature using the public key final Algorithm algorithm = Algorithm.RSA256(rsaPublicKey, null); final JWTVerifier verifier = JWT.require(algorithm).build(); // This will throw a runtime exception if there's a signature mismatch. verifier.verify(jwt); return body; } @SneakyThrows public String getClientVersionFromDecodedBody(final String jwtBody) { // Map the JWT Body to a POJO final CaptureContextResponseBody mappedBody = new ObjectMapper().readValue(jwtBody, CaptureContextResponseBody.class); // Dynamically retrieve the client library return mappedBody.ctx().stream().findFirst() .map(wrapper -> wrapper.data().clientLibrary()) .orElseThrow(); } @SneakyThrows private JWK getPublicKeyFromHeader(final String jwtHeader) { // Again, this process should be cached so you don't need to hit /public-keys // You'd want to look for a difference in the header's value (e.g. new key id [kid]) to refresh your cache final CaptureContextResponseHeader mappedJwtHeader = new ObjectMapper().readValue(jwtHeader, CaptureContextResponseHeader.class); final RestTemplate restTemplate = new RestTemplate(); final ResponseEntity<String> response = restTemplate.getForEntity( "https://" + applicationProperties.getRequestHost() + "/flex/v2/public-keys/" + mappedJwtHeader.kid(), String.class); return new ObjectMapper().readValue(response.getBody(), JWK.class); } }

Populating the Token Request

When you have created the JWE data object, insert that object into the body of a request, and send it to the
token
endpoint.
Production Endpoint:
GET
https://api.cybersource.com
/flex/v2/token
Test Endpoint:
GET
https://apitest.cybersource.com
/flex/v2/token
Request
IMPORTANT
Line breaks have been added for readability and formatting.
{eyJraWQiOiIwOHBNSnRoMnFRazBGZDZNcWtHamZRS0FrOFZ0aDNncCIsImVuYyI6IkEyNTZHQ00iLCΩ hbGciOiJSU0EtT0FFUCJ9.CXY9bqD1uFtK40xcJiENdI6vkKusaW8xa5kzWLfg1zyCgijwv1EYvZleqv Un4VgNQPuj5cVHZLJJNIqR4EI-kAIULsSxnq5xeyEwIH0DX9suEIICAs8p9dDiUDts67lfzLsQvUHkdT nk2z4dpnctz5DrF3YXlDOghkn3M74N2Fq_H8lp0C5e5uc8oE-B0jDWNjY4zpDZO3wFoSTKRjJZ6mALAJ 5tf-GAGGl1HxVIm4THRGud-tR1IqRpmx0RDNgBXe55JVhT7_5wA-9sOSk16ylricRqnI0BeKchB_B1Z6 v8K3pyl363EUDRSHj9TlG951h6Jcv_dpTYHbiqcx9kjA.c2M3S4GcXaQtSKB8.dCiqN1XaPb8owIz56z zIEenXd7wlfJwWdXwj_n_rMsufiQXf3_nKSLJaH0B_3f0DEz_AIkXdfmfPkMtwxTZcBXvQVcgBv1I1wN 18FNEmEi059b0CD73ODPyXlx7NFnnNmsEeu90PQfe6C_vsnQuSMMBgYddeYn1yOmQDxmsRJjB8_fJckq SnW91hP7HeJZny-s1EQHlYpg0CZkePCndgBGEG1BrQDfZc5iKbn4nRb9fW7XC_7OV0AjN-r2Wkf1jTI5 w6fZbmseqrpKBEsMKM44Vs_8cTyzbrDU2jome3U42fc8vMVYq2Z6Z_tMSOR_7Qrt8IErzR02E-24wO4d qPolGhJKVFcvn3fGW590QOW0qc0Q4oMWFQemYgN_LdTWfEX5KAE-FVSRwcHQCHFAYO_SK4Tk4iTexitF G4w4GXQsrKf1FhUZto6AGU62RCPzYuSY3TWosuAcYP5wVhMaajCd23sSSkdFR2uGtyru88UwEwVBpU5t Ypc3_Je80LX6aZVJS73JDYky8IYhKLYEDIamI3bkIOFZUtGFWJ2ybM20JLIMGbkvV1_1wHEqpj6upCh3 JNC9rMatRjb4hsXwlzLLQ0BYizNDNgqkbIjM_uBbu692ymYNgbtfInP0Tt6I_am5_ZYsoj9X88mqOlvU dM8-LYlrMA2hEXc5ALxh6cm2njMbUXxBFjrjEXko6znH9O5v8tzH0BhR154MWMrer8FXHtvrl7bbZQg9 ioRUsrRL6ubTLaFFeHfihAA9DK4qmiQtrMIHyIzIr5d7nPhZMHcgItGZS3jQUOu8_f-Md4QH9Hd6356k sQut60MYFDqS0BOXNxeRCKA2eQtusP8LBJLHlJJSiBvjs_XzLDXei9uo22lPl8TpPHFmtxFuAb--fs0M T7TOUQMaLAnJMCCdP95KGpIOixCVoE2mnmCBoebEC698hlV_93w2uslHN3nF2arFmn4V6qRsST2pMNfc 0c_3Oi80-g-e2IPgajmE-hQRo3BGqICFx0P4XC0GMtJhfYADhA9q60wjFSpJqCIcA0TJkuE8yP3i5hUl e8ELPKr-OYQHUWN9LJM7c6ypDtSjtoehFC5-w54sMEExY9LiM3bI4VmYPIrwMdliD0iHhXJTFQBMDKiu S0G0v4yPMsu5RSQn1Ow5rK8V4lA-Q4uVcJQOyGlZO1wTbIAVEFeEUKaApWiEGN9g0CewSSou09aLcQXe Owiv8MaBvza4MHW-NGYfxCbTJpMYDpT1ax3L_Lht3xsPURupAJj-0_z3jdvNFV3Q6-DQfPD1gOcDqVKG MHgnH3tUBi24_1hlJ8Mv9ji0YveaewQJgYFXHmJ11PLpRGE9jDLrPwXtdYUMpb-Jg4EZ6Ba4O_U4zly6 KUJFlxyJ9hh74CGgzbiVSz-OO7K1_7-zUPeI_gkFRfd2TaRB3PaqtW6w6-B50SGQpHkshLX_hbRKupcQ nFeKbTd_BySBKIV0zBIGxsOGXyA0OeBygK-frFFE21dM3hbKEHvHKa2JsCgeeHztRPOi3747iT8v41Xa 2pV0PtzzKbDEJVPSFYm6B2pF9vX4uvWXS8DizsPm8CNwgzhUXYJBXxaXI498ZQzwuwBPPmx2ovJoN-rh kVZzG4NkqVRRDLA-fcfuUkxCHzVTxdFi65LBQ-SJJ5_g4NMhWkpsvD5HbS3simIM3qke2GHeDz0V6MbT ZNck4CJC0Qdh6ZTyQMILP12Q5SUnxhuHVQouFllJV14nm3SpifhiVkKao26sj7drn8x6TR5PhGylwys3 Z96fXG9cyBZGvne5Keigu5hLY7g0GQR8SQu989m55MRnWtFfESY08Qafg6jax54opR34K320PZtPyZgi S0vX3TRI6QiKeI3_OW5phuqUgxnK-UhU259r9E3ckDuFM22IlZEXWWjmK0bQqwE_FGZHIxUfuXxzMmM_ I7BI6nQgxZ4KQR8ZmZOIDoPq7VdOSpIZ-7PqcJO7SE-LFFP4nGYMPeXVS3eLsOXqoRxoweho06HdKQS5 RoFC8srmO-LC-wxXHMowF_L63PDEY_ppO1YZnAZQHJatt337OCqvDrgw6SOsYxCTuroqJAaqzbcFUXBA ZvI7JZ_df0f8fGLbyJmul2SmB-G_J0CKoFtr-fQ9GwJba1ERZHUzyBWF9-cK06lSyhbLxlD3Dl_KkmPp piz8cGhrNSUfjNNi1CzTSxCmRCQK7Igv05Y9HVnu4SSTZi2NHqxFsEradx_9wO77ZHAQ6Mxsx0_xqk9L 19ooJBhgZXL8zsCouJWkLr1-sf5hBQO_zmyqDJFUyQzeFJhaeO8jn5xV0IBS9gEPfeogn5xP5-HLY3MQ TpceBXobVvhfiTfKdaBkqEAUUdmAEuou6Jwwy24FbAugrhdjaXr2_5RLdmy7xuy6EGAs_T7HgkMgCrLk r9w3zpTXSjiiBfqaoLFwUEvCFczeW33YUn0h05cjGfpw9lIE8nQ-A6Tv3TXKzrxIdRJWwGmUKE--fPi8 4LS0GmLLI_cB1_lKXKsTw9-Q-mEwk99PYr8L-W0Q0v_zlEVgq3LlGSshefKySXUKV4-CxtthRcMOZhw4 eKIMh4dtYuqlcmTaSK5YXtLIsc5bGcWAx0AM_KOx9EwlX_Ug4W71tFHanGQ-MXnoPG2atLJSmwODD2yW ftB2zedcU3epXK83K9LZG3xoeYVh_j-9Xmd-ToaN4firdX4WhVU4h0rAOTBqgQm-pJ5U-NztXu2mdCgN tx5ZwKIb1wzGTs8ZkbkeqJIXtPlFO1BRAq9NGcg2777ognoy21ehJZiPQTESRhe7wQ_Y0niIWylP9AV3 PJVY3Pk-GpRctZOc8WkBdTPhOyczVZs5GbBAsOeYweo9i3EKlVwloxIFMY6MQD7e300K2_OEyfq961gq GYCJf4IzJsoP4zJAKBr71NPpqLKZbkJRPerzHwmDFCfoCfy9Sp7cHLBACwUMD32JIjIyVUC0Cjt8q0W5 zoszUDBnPNchII2mXWYfFxxc_bN_cdpuBCXW5R42u6p_J8OgQxLM7PCd9lQQ9WgS1cKG_1rabKdMIYKl 1eDi7DKK_FPBxEFbf9wMwXo2U0kaQEMEQbeLb-cMn60jiQ0pyPVMsMBFrvkiS3gLaDebu-03hShHg52C CZsA66l_Y4ZXgNPZ5EeJeczUTftj_L827f_SDPX2m40LLeDh_8zs1EfRh2x-_PrFt2JGGZTjQ0WzDHpr H6DWEGPCEokQqV1v3RGYaz58VcBptWS16dXZExnRA9M-Pf2hwjy32pjTodIvcT2AARbWDeb-oOMUXpGl B1Cuk1hrqtpWES-N15ONPWRJ6VK8XWcarrz7x_LESs9pS8mrWLDNXIsFd0MUd6ZTEwlN5eaS_CtuQGcC TIAMSSpt6DHDt24bVLIPjl9X3LzU3PgCei8wObEYOHNqsrLpM8Ps3Enuca6bbSFRT8h1pVedRSRWUN2V 4C6CROeTuid7P-PorYoV8McomHuVcPqS6kvIi5gPwi8T-pybnjyDPgcQ50JAYHWVqVw0EeC3hPMGxlU5 T9IWeC2qvhzSZ8-Iov2k3MnqNnhiLsxTuPVHNLnPhZ6UP-LHLE6vyA-4oSVQ2d5O0tiFOt4H3PQ8B-jD zjFPEPQ-qv6K8fxtdNLja2beJyvO2v5ymYhCVjgL6DKLL4xD3JD30SJ4WmSKBPtzScFrBHitlJdyGEEt xjYE9FLXeoJi4RplleOEXn6WH_7wqSxk9jGT78CeNIZCGZMavKUESG8oUF-vxoRX1sh1LXD26T_B3q6l 5TLaAiCF-STJI5_P99-8tWvzmdfDbXDYIAg6OMs94ohiOMhNccT-IH8AUQpauPLaX9V06w7bU28Qt8uq SnkImQKbicr7LJ_MTIeqogfGjpnV9PWolWQ3QoKSb72Ed9OahV1mYl3fPFdMS8GKiKN1NI8sRPUbIM7D 8IOBfTZovesPcFhf80z9MP1IUXti9qpJ_T-axjhtMbZOKmQVCfoc0DP4h09vySPiRkwx7bjQZnCV6fZs 4qLrKxTxpy6mbihIKAM-v3eZMU4-UoV_mzWP_Q5nclH0jO19omLrFszXEXuIUrY1_7AUkNBiV7vjQ7F6 E7f4wQDjE1azCYwuULc7QiJ_Q5JrL5Ql_UY9iG0dkyLGA6XKUTbtZF01VgCOMuCQN677LmvXkkqGxlvY WDpQq9TuwNzcnIUoE.Wb8jG4qNmCGq8M9cOTnfnQ
Response to Successful Request
JWT is returned.