Visual FoxPro
Visual FoxPro
Get Access Token using a Pre-Created JSON Web Token
See more ABN AMRO Examples
Demonstrates how to get an access token using a pre-created JSON Web Token (JWT).Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loPrivkey
LOCAL loJwt
LOCAL loJsonHeader
LOCAL loJsonPayload
LOCAL lnCurDateTime
LOCAL lcJwtStr
LOCAL loHttp
LOCAL loReq
LOCAL loResp
LOCAL loJson
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
* We're going to duplicate this CURL statement:
* curl -X POST https://api-sandbox.abnamro.com/v1/oauth/token \
* -H "Content-Type: application/x-www-form-urlencoded" \
* -H "API-Key: xxxxxx" \
* -d 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&grant_type=client_credentials&client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ4eHh4eHgiLCJleHAiOiIxNDk5OTQ3NjY4IiwiaXNzIjoibWUiLCJhdWQiOiJodHRwczovL2F1dGgtc2FuZGJveC5hYm5hbXJvLmNvbS9vYXV0aC90b2tlbiJ9.jGwHKG_YjgKpR8NPpaLu6nJ97obeP2vcxg6fOWBKdJ0&scope=tikkie'
* Load our pre-creaed private key PEM file.
* 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.
loPrivkey = CreateObject('Chilkat.PrivateKey')
lnSuccess = loPrivkey.LoadPemFile("qa_data/pem/abnAmroPrivateKey.pem")
IF (lnSuccess = 0) THEN
? loPrivkey.LastErrorText
RELEASE loPrivkey
CANCEL
ENDIF
* Create the JWT.
loJwt = CreateObject('Chilkat.Jwt')
* Create the header:
* {
* "typ": "JWT",
* "alg": "RS256"
* }
loJsonHeader = CreateObject('Chilkat.JsonObject')
loJsonHeader.UpdateString("typ","JWT")
loJsonHeader.UpdateString("alg","RS256")
* Create the payload:
* {
* "nbf": 1499947668,
* "exp": 1499948668,
* "iss": "me",
* "sub": "anApiKey",
* "aud": "https://auth-sandbox.abnamro.com/oauth/token"
* }
loJsonPayload = CreateObject('Chilkat.JsonObject')
lnCurDateTime = loJwt.GenNumericDate(0)
* Set the "not process before" timestamp to now.
lnSuccess = loJsonPayload.AddIntAt(-1,"nbf",lnCurDateTime)
* Set the timestamp defining an expiration time (end time) for the token
* to be now + 1 hour (3600 seconds)
lnSuccess = loJsonPayload.AddIntAt(-1,"exp",lnCurDateTime + 3600)
loJsonPayload.UpdateString("iss","me")
loJsonPayload.UpdateString("sub","anApiKey")
loJsonPayload.UpdateString("aud","https://auth-sandbox.abnamro.com/oauth/token")
* Produce the smallest possible JWT:
loJwt.AutoCompact = 1
lcJwtStr = loJwt.CreateJwtPk(loJsonHeader.Emit(),loJsonPayload.Emit(),loPrivkey)
IF (loJwt.LastMethodSuccess = 0) THEN
? loJwt.LastErrorText
RELEASE loPrivkey
RELEASE loJwt
RELEASE loJsonHeader
RELEASE loJsonPayload
CANCEL
ENDIF
loHttp = CreateObject('Chilkat.Http')
loReq = CreateObject('Chilkat.HttpRequest')
loReq.AddParam("client_assertion_type","urn:ietf:params:oauth:client-assertion-type:jwt-bearer")
loReq.AddParam("grant_type","client_credentials")
loReq.AddParam("client_assertion",lcJwtStr)
loReq.AddParam("scope","tikkie")
loReq.HttpVerb = "POST"
loReq.ContentType = "application/x-www-form-urlencoded"
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpReq("https://api-sandbox.abnamro.com/v1/oauth/token",loReq,loResp)
IF (lnSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loPrivkey
RELEASE loJwt
RELEASE loJsonHeader
RELEASE loJsonPayload
RELEASE loHttp
RELEASE loReq
RELEASE loResp
CANCEL
ENDIF
IF (loResp.StatusCode <> 200) THEN
? loResp.BodyStr
RELEASE loPrivkey
RELEASE loJwt
RELEASE loJsonHeader
RELEASE loJsonPayload
RELEASE loHttp
RELEASE loReq
RELEASE loResp
CANCEL
ENDIF
* Get the JSON result:
* {
* "access_token": "{your access token}",
* "expires_in": "{duration of validity in seconds}",
* "scope": "{scope(s) for which the access token is valid}",
* "token_type": "{it is always Bearer}"
* }
loJson = CreateObject('Chilkat.JsonObject')
loJson.Load(loResp.BodyStr)
? "access_token: " + loJson.StringOf("access_token")
? "token_type: " + loJson.StringOf("token_type")
? "expires_in: " + loJson.StringOf("expires_in")
? "scope: " + loJson.StringOf("scope")
RELEASE loPrivkey
RELEASE loJwt
RELEASE loJsonHeader
RELEASE loJsonPayload
RELEASE loHttp
RELEASE loReq
RELEASE loResp
RELEASE loJson