PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkJwt.pb"
IncludeFile "CkPublicKey.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkRsa.pb"
Procedure ChilkatExample()
success.i = 0
; 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.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Generate a 2048-bit key.
privkey.i = CkPrivateKey::ckCreate()
If privkey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRsa::ckGenKey(rsa,2048,privkey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privkey)
ProcedureReturn
EndIf
; Export the key to PEM files.
; Write one PEM file for the private key, and one for the public key.
success = CkPrivateKey::ckSavePemFile(privkey,"qa_data/pem/abnAmroPrivateKey.pem")
pubkey.i = CkPublicKey::ckCreate()
If pubkey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkPrivateKey::ckToPublicKey(privkey,pubkey)
success = CkPublicKey::ckSavePemFile(pubkey,1,"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.i = CkJwt::ckCreate()
If jwt.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Create the header:
; {
; "typ": "JWT",
; "alg": "RS256"
; }
jsonHeader.i = CkJsonObject::ckCreate()
If jsonHeader.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckUpdateString(jsonHeader,"typ","JWT")
CkJsonObject::ckUpdateString(jsonHeader,"alg","RS256")
; Create the payload:
; {
; "nbf": 1499947668,
; "exp": 1499948668,
; "iss": "me",
; "sub": "anApiKey",
; "aud": "https://auth-sandbox.abnamro.com/oauth/token"
; }
jsonPayload.i = CkJsonObject::ckCreate()
If jsonPayload.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
curDateTime.i = CkJwt::ckGenNumericDate(jwt,0)
; Set the "not process before" timestamp to now.
success = CkJsonObject::ckAddIntAt(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::ckAddIntAt(jsonPayload,-1,"exp",curDateTime + 3600)
CkJsonObject::ckUpdateString(jsonPayload,"iss","me")
CkJsonObject::ckUpdateString(jsonPayload,"sub","anApiKey")
CkJsonObject::ckUpdateString(jsonPayload,"aud","https://auth-sandbox.abnamro.com/oauth/token")
; Produce the smallest possible JWT:
CkJwt::setCkAutoCompact(jwt, 1)
jwtStr.s = CkJwt::ckCreateJwtPk(jwt,CkJsonObject::ckEmit(jsonHeader),CkJsonObject::ckEmit(jsonPayload),privkey)
If CkJwt::ckLastMethodSuccess(jwt) = 0
Debug CkJwt::ckLastErrorText(jwt)
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privkey)
CkPublicKey::ckDispose(pubkey)
CkJwt::ckDispose(jwt)
CkJsonObject::ckDispose(jsonHeader)
CkJsonObject::ckDispose(jsonPayload)
ProcedureReturn
EndIf
; Here is the JWT:
Debug jwtStr
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privkey)
CkPublicKey::ckDispose(pubkey)
CkJwt::ckDispose(jwt)
CkJsonObject::ckDispose(jsonHeader)
CkJsonObject::ckDispose(jsonPayload)
ProcedureReturn
EndProcedure