Sample code for 30+ languages & platforms
Unicode C

ABN AMRO Create Signed JSON Web Token

See more ABN AMRO Examples

Demonstrates how to create a signed JWT to be used for authenticating requests to the ABN AMRO REST API's.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkRsaW.h>
#include <C_CkPrivateKeyW.h>
#include <C_CkPublicKeyW.h>
#include <C_CkJwtW.h>
#include <C_CkJsonObjectW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkRsaW rsa;
    HCkPrivateKeyW privkey;
    HCkPublicKeyW pubkey;
    HCkJwtW jwt;
    HCkJsonObjectW jsonHeader;
    HCkJsonObjectW jsonPayload;
    int curDateTime;
    const wchar_t *jwtStr;

    success = FALSE;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Create public/private key pair (RSA)
    rsa = CkRsaW_Create();

    // Generate a 2048-bit key.
    privkey = CkPrivateKeyW_Create();
    success = CkRsaW_GenKey(rsa,2048,privkey);
    if (success == FALSE) {
        wprintf(L"%s\n",CkRsaW_lastErrorText(rsa));
        CkRsaW_Dispose(rsa);
        CkPrivateKeyW_Dispose(privkey);
        return;
    }

    // Export the key to PEM files.
    // Write one PEM file for the private key, and one for the public key.
    success = CkPrivateKeyW_SavePemFile(privkey,L"qa_data/pem/abnAmroPrivateKey.pem");

    pubkey = CkPublicKeyW_Create();
    CkPrivateKeyW_ToPublicKey(privkey,pubkey);
    success = CkPublicKeyW_SavePemFile(pubkey,TRUE,L"qa_data/pem/abnAmroPublicKey.pem");
    // Note: Please share your public key along with your app name and developer email id at api.support@nl.abnamro.com. 
    // Token generation will not work unless public key is associated with your app.

    // Create the JWT.
    jwt = CkJwtW_Create();

    // Create the header:
    // {
    //     "typ": "JWT",
    //     "alg": "RS256"
    // }
    jsonHeader = CkJsonObjectW_Create();
    CkJsonObjectW_UpdateString(jsonHeader,L"typ",L"JWT");
    CkJsonObjectW_UpdateString(jsonHeader,L"alg",L"RS256");

    // Create the payload:
    // {
    //     "nbf": 1499947668,
    //     "exp": 1499948668,
    //     "iss": "me",
    //     "sub": "anApiKey",
    //     "aud": "https://auth-sandbox.abnamro.com/oauth/token"
    // }
    jsonPayload = CkJsonObjectW_Create();

    curDateTime = CkJwtW_GenNumericDate(jwt,0);

    // Set the "not process before" timestamp to now.
    success = CkJsonObjectW_AddIntAt(jsonPayload,-1,L"nbf",curDateTime);

    // Set the timestamp defining an expiration time (end time) for the token
    // to be now + 1 hour (3600 seconds)
    success = CkJsonObjectW_AddIntAt(jsonPayload,-1,L"exp",curDateTime + 3600);

    CkJsonObjectW_UpdateString(jsonPayload,L"iss",L"me");
    CkJsonObjectW_UpdateString(jsonPayload,L"sub",L"anApiKey");
    CkJsonObjectW_UpdateString(jsonPayload,L"aud",L"https://auth-sandbox.abnamro.com/oauth/token");

    // Produce the smallest possible JWT:
    CkJwtW_putAutoCompact(jwt,TRUE);

    jwtStr = CkJwtW_createJwtPk(jwt,CkJsonObjectW_emit(jsonHeader),CkJsonObjectW_emit(jsonPayload),privkey);
    if (CkJwtW_getLastMethodSuccess(jwt) == FALSE) {
        wprintf(L"%s\n",CkJwtW_lastErrorText(jwt));
        CkRsaW_Dispose(rsa);
        CkPrivateKeyW_Dispose(privkey);
        CkPublicKeyW_Dispose(pubkey);
        CkJwtW_Dispose(jwt);
        CkJsonObjectW_Dispose(jsonHeader);
        CkJsonObjectW_Dispose(jsonPayload);
        return;
    }

    // Here is the JWT:
    wprintf(L"%s\n",jwtStr);


    CkRsaW_Dispose(rsa);
    CkPrivateKeyW_Dispose(privkey);
    CkPublicKeyW_Dispose(pubkey);
    CkJwtW_Dispose(jwt);
    CkJsonObjectW_Dispose(jsonHeader);
    CkJsonObjectW_Dispose(jsonPayload);

    }