Objective-C
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
#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);