Sample code for 30+ languages & platforms
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 C Downloads

C
#include <C_CkRsa.h>
#include <C_CkPrivateKey.h>
#include <C_CkPublicKey.h>
#include <C_CkJwt.h>
#include <C_CkJsonObject.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkRsa rsa;
    HCkPrivateKey privkey;
    HCkPublicKey pubkey;
    HCkJwt jwt;
    HCkJsonObject jsonHeader;
    HCkJsonObject jsonPayload;
    int curDateTime;
    const char *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 = CkRsa_Create();

    // Generate a 2048-bit key.
    privkey = CkPrivateKey_Create();
    success = CkRsa_GenKey(rsa,2048,privkey);
    if (success == FALSE) {
        printf("%s\n",CkRsa_lastErrorText(rsa));
        CkRsa_Dispose(rsa);
        CkPrivateKey_Dispose(privkey);
        return;
    }

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

    pubkey = CkPublicKey_Create();
    CkPrivateKey_ToPublicKey(privkey,pubkey);
    success = CkPublicKey_SavePemFile(pubkey,TRUE,"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 = CkJwt_Create();

    // Create the header:
    // {
    //     "typ": "JWT",
    //     "alg": "RS256"
    // }
    jsonHeader = CkJsonObject_Create();
    CkJsonObject_UpdateString(jsonHeader,"typ","JWT");
    CkJsonObject_UpdateString(jsonHeader,"alg","RS256");

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

    curDateTime = CkJwt_GenNumericDate(jwt,0);

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

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

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

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

    jwtStr = CkJwt_createJwtPk(jwt,CkJsonObject_emit(jsonHeader),CkJsonObject_emit(jsonPayload),privkey);
    if (CkJwt_getLastMethodSuccess(jwt) == FALSE) {
        printf("%s\n",CkJwt_lastErrorText(jwt));
        CkRsa_Dispose(rsa);
        CkPrivateKey_Dispose(privkey);
        CkPublicKey_Dispose(pubkey);
        CkJwt_Dispose(jwt);
        CkJsonObject_Dispose(jsonHeader);
        CkJsonObject_Dispose(jsonPayload);
        return;
    }

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


    CkRsa_Dispose(rsa);
    CkPrivateKey_Dispose(privkey);
    CkPublicKey_Dispose(pubkey);
    CkJwt_Dispose(jwt);
    CkJsonObject_Dispose(jsonHeader);
    CkJsonObject_Dispose(jsonPayload);

    }