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

Objective-C
#import <CkoRsa.h>
#import <CkoPrivateKey.h>
#import <CkoPublicKey.h>
#import <CkoJwt.h>
#import <CkoJsonObject.h>
#import <NSString.h>

BOOL success = NO;

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

// Create public/private key pair (RSA)
CkoRsa *rsa = [[CkoRsa alloc] init];

// Generate a 2048-bit key.
CkoPrivateKey *privkey = [[CkoPrivateKey alloc] init];
success = [rsa GenKey: [NSNumber numberWithInt: 2048] privKey: privkey];
if (success == NO) {
    NSLog(@"%@",rsa.LastErrorText);
    return;
}

// Export the key to PEM files.
// Write one PEM file for the private key, and one for the public key.
success = [privkey SavePemFile: @"qa_data/pem/abnAmroPrivateKey.pem"];

CkoPublicKey *pubkey = [[CkoPublicKey alloc] init];
[privkey ToPublicKey: pubkey];
success = [pubkey SavePemFile: YES path: @"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.
CkoJwt *jwt = [[CkoJwt alloc] init];

// Create the header:
// {
//     "typ": "JWT",
//     "alg": "RS256"
// }
CkoJsonObject *jsonHeader = [[CkoJsonObject alloc] init];
[jsonHeader UpdateString: @"typ" value: @"JWT"];
[jsonHeader UpdateString: @"alg" value: @"RS256"];

// Create the payload:
// {
//     "nbf": 1499947668,
//     "exp": 1499948668,
//     "iss": "me",
//     "sub": "anApiKey",
//     "aud": "https://auth-sandbox.abnamro.com/oauth/token"
// }
CkoJsonObject *jsonPayload = [[CkoJsonObject alloc] init];

int curDateTime = [[jwt GenNumericDate: [NSNumber numberWithInt: 0]] intValue];

// Set the "not process before" timestamp to now.
success = [jsonPayload AddIntAt: [NSNumber numberWithInt: -1] name: @"nbf" value: [NSNumber numberWithInt: curDateTime]];

// Set the timestamp defining an expiration time (end time) for the token
// to be now + 1 hour (3600 seconds)
success = [jsonPayload AddIntAt: [NSNumber numberWithInt: -1] name: @"exp" value: [NSNumber numberWithInt: (curDateTime + 3600)]];

[jsonPayload UpdateString: @"iss" value: @"me"];
[jsonPayload UpdateString: @"sub" value: @"anApiKey"];
[jsonPayload UpdateString: @"aud" value: @"https://auth-sandbox.abnamro.com/oauth/token"];

// Produce the smallest possible JWT:
jwt.AutoCompact = YES;

NSString *jwtStr = [jwt CreateJwtPk: [jsonHeader Emit] payload: [jsonPayload Emit] key: privkey];
if (jwt.LastMethodSuccess == NO) {
    NSLog(@"%@",jwt.LastErrorText);
    return;
}

// Here is the JWT:
NSLog(@"%@",jwtStr);