DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vPrivkey
Handle hoPrivkey
Handle hoJwt
Handle hoJsonHeader
Handle hoJsonPayload
Integer iCurDateTime
String sJwtStr
Handle hoHttp
Variant vReq
Handle hoReq
Variant vResp
Handle hoResp
Handle hoJson
String sTemp1
String sTemp2
Integer iTemp1
Boolean bTemp1
Move False To iSuccess
// 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.
Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivkey
If (Not(IsComObjectCreated(hoPrivkey))) Begin
Send CreateComObject of hoPrivkey
End
Get ComLoadPemFile Of hoPrivkey "qa_data/pem/abnAmroPrivateKey.pem" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPrivkey To sTemp1
Showln sTemp1
Procedure_Return
End
// Create the JWT.
Get Create (RefClass(cComChilkatJwt)) To hoJwt
If (Not(IsComObjectCreated(hoJwt))) Begin
Send CreateComObject of hoJwt
End
// Create the header:
// {
// "typ": "JWT",
// "alg": "RS256"
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonHeader
If (Not(IsComObjectCreated(hoJsonHeader))) Begin
Send CreateComObject of hoJsonHeader
End
Get ComUpdateString Of hoJsonHeader "typ" "JWT" To iSuccess
Get ComUpdateString Of hoJsonHeader "alg" "RS256" To iSuccess
// Create the payload:
// {
// "nbf": 1499947668,
// "exp": 1499948668,
// "iss": "me",
// "sub": "anApiKey",
// "aud": "https://auth-sandbox.abnamro.com/oauth/token"
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonPayload
If (Not(IsComObjectCreated(hoJsonPayload))) Begin
Send CreateComObject of hoJsonPayload
End
Get ComGenNumericDate Of hoJwt 0 To iCurDateTime
// Set the "not process before" timestamp to now.
Get ComAddIntAt Of hoJsonPayload -1 "nbf" iCurDateTime To iSuccess
// Set the timestamp defining an expiration time (end time) for the token
// to be now + 1 hour (3600 seconds)
Get ComAddIntAt Of hoJsonPayload -1 "exp" (iCurDateTime + 3600) To iSuccess
Get ComUpdateString Of hoJsonPayload "iss" "me" To iSuccess
Get ComUpdateString Of hoJsonPayload "sub" "anApiKey" To iSuccess
Get ComUpdateString Of hoJsonPayload "aud" "https://auth-sandbox.abnamro.com/oauth/token" To iSuccess
// Produce the smallest possible JWT:
Set ComAutoCompact Of hoJwt To True
Get ComEmit Of hoJsonHeader To sTemp1
Get ComEmit Of hoJsonPayload To sTemp2
Get pvComObject of hoPrivkey to vPrivkey
Get ComCreateJwtPk Of hoJwt sTemp1 sTemp2 vPrivkey To sJwtStr
Get ComLastMethodSuccess Of hoJwt To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoJwt To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
End
Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
If (Not(IsComObjectCreated(hoReq))) Begin
Send CreateComObject of hoReq
End
Send ComAddParam To hoReq "client_assertion_type" "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
Send ComAddParam To hoReq "grant_type" "client_credentials"
Send ComAddParam To hoReq "client_assertion" sJwtStr
Send ComAddParam To hoReq "scope" "tikkie"
Set ComHttpVerb Of hoReq To "POST"
Set ComContentType Of hoReq To "application/x-www-form-urlencoded"
Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
If (Not(IsComObjectCreated(hoResp))) Begin
Send CreateComObject of hoResp
End
Get pvComObject of hoReq to vReq
Get pvComObject of hoResp to vResp
Get ComHttpReq Of hoHttp "https://api-sandbox.abnamro.com/v1/oauth/token" vReq vResp To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComStatusCode Of hoResp To iTemp1
If (iTemp1 <> 200) Begin
Get ComBodyStr Of hoResp To sTemp1
Showln sTemp1
Procedure_Return
End
// 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}"
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get ComBodyStr Of hoResp To sTemp1
Get ComLoad Of hoJson sTemp1 To iSuccess
Get ComStringOf Of hoJson "access_token" To sTemp1
Showln "access_token: " sTemp1
Get ComStringOf Of hoJson "token_type" To sTemp1
Showln "token_type: " sTemp1
Get ComStringOf Of hoJson "expires_in" To sTemp1
Showln "expires_in: " sTemp1
Get ComStringOf Of hoJson "scope" To sTemp1
Showln "scope: " sTemp1
End_Procedure