AutoIt Requires Chilkat v11.0.0+
AutoIt
ING Open Banking OAuth2 Client Credentials
See more OAuth2 Examples
Demonstrates how to get an access token for the ING Open Banking APIs using client credentials.Chilkat AutoIt Downloads
Local $bSuccess = False
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
$oCert = ObjCreate("Chilkat.Cert")
$bSuccess = $oCert.LoadFromFile("qa_data/certs_and_keys/ING/example_client_tls.cer")
If ($bSuccess = False) Then
ConsoleWrite($oCert.LastErrorText & @CRLF)
Exit
EndIf
$oBdPrivKey = ObjCreate("Chilkat.BinData")
$bSuccess = $oBdPrivKey.LoadFile("qa_data/certs_and_keys/ING/example_client_tls.key")
If ($bSuccess = False) Then
ConsoleWrite("Failed to load example_client_tls.key" & @CRLF)
Exit
EndIf
; The OAuth 2.0 client_id for these certificates is e77d776b-90af-4684-bebc-521e5b2614dd.
; Please note down this client_id since you will need it in the next steps to call the API.
$oPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oPrivKey.LoadAnyFormat($oBdPrivKey,"")
If ($bSuccess = False) Then
ConsoleWrite($oPrivKey.LastErrorText & @CRLF)
Exit
EndIf
; Associate the private key with the certificate.
$bSuccess = $oCert.SetPrivateKey($oPrivKey)
If ($bSuccess = False) Then
ConsoleWrite($oCert.LastErrorText & @CRLF)
Exit
EndIf
$oHttp = ObjCreate("Chilkat.Http")
$bSuccess = $oHttp.SetSslClientCert($oCert)
If ($bSuccess = False) Then
ConsoleWrite($oHttp.LastErrorText & @CRLF)
Exit
EndIf
; Calculate the Digest and add the "Digest" header. Do the equivalent of this:
; payload="grant_type=client_credentials"
; payloadDigest=`echo -n "$payload" | openssl dgst -binary -sha256 | openssl base64`
; digest=SHA-256=$payloadDigest
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oCrypt.HashAlgorithm = "SHA256"
$oCrypt.EncodingMode = "base64"
Local $sPayload = "grant_type=client_credentials"
Local $sPayloadDigest = $oCrypt.HashStringENC($sPayload)
; Calculate the current date/time and add the Date header.
; reqDate=$(LC_TIME=en_US.UTF-8 date -u "+%a, %d %b %Y %H:%M:%S GMT")
$oDt = ObjCreate("Chilkat.CkDateTime")
$oDt.SetFromCurrentSystemTime()
; The desire date/time format is the "RFC822" format.
$oHttp.SetRequestHeader "Date",$oDt.GetAsRfc822(False)
; Calculate signature for signing your request
; Duplicate the following code:
; httpMethod="post"
; reqPath="/oauth2/token"
; signingString="(request-target): $httpMethod $reqPath
; date: $reqDate
; digest: $digest"
; signature=`printf "$signingString" | openssl dgst -sha256 -sign "${certPath}example_client_signing.key" -passin "pass:changeit" | openssl base64 -A`
Local $sHttpMethod = "POST"
Local $sReqPath = "/oauth2/token"
$oSbStringToSign = ObjCreate("Chilkat.StringBuilder")
$oSbStringToSign.Append("(request-target): ")
$oSbStringToSign.Append($sHttpMethod)
$oSbStringToSign.ToLowercase()
$oSbStringToSign.Append(" ")
$oSbStringToSign.AppendLine($sReqPath,False)
$oSbStringToSign.Append("date: ")
$oSbStringToSign.AppendLine($oDt.GetAsRfc822(False),False)
$oSbStringToSign.Append("digest: SHA-256=")
$oSbStringToSign.Append($sPayloadDigest)
$oSigningPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oSigningPrivKey.LoadPemFile("qa_data/certs_and_keys/ING/example_client_signing.key")
If ($bSuccess = False) Then
ConsoleWrite($oSigningPrivKey.LastErrorText & @CRLF)
Exit
EndIf
$oRsa = ObjCreate("Chilkat.Rsa")
$bSuccess = $oRsa.UsePrivateKey($oSigningPrivKey)
If ($bSuccess = False) Then
ConsoleWrite($oRsa.LastErrorText & @CRLF)
Exit
EndIf
$oRsa.EncodingMode = "base64"
Local $sB64Signature = $oRsa.SignStringENC($oSbStringToSign.GetAsString(),"SHA256")
$oSbAuthHdrVal = ObjCreate("Chilkat.StringBuilder")
$oSbAuthHdrVal.Append("Signature keyId=""e77d776b-90af-4684-bebc-521e5b2614dd"",")
$oSbAuthHdrVal.Append("algorithm=""rsa-sha256"",")
$oSbAuthHdrVal.Append("headers=""(request-target) date digest"",")
$oSbAuthHdrVal.Append("signature=""")
$oSbAuthHdrVal.Append($sB64Signature)
$oSbAuthHdrVal.Append("""")
$oSbDigestHdrVal = ObjCreate("Chilkat.StringBuilder")
$oSbDigestHdrVal.Append("SHA-256=")
$oSbDigestHdrVal.Append($sPayloadDigest)
; Do the following CURL statement:
; curl -i -X POST "${httpHost}${reqPath}" \
; -H 'Accept: application/json' \
; -H 'Content-Type: application/x-www-form-urlencoded' \
; -H "Digest: ${digest}" \
; -H "Date: ${reqDate}" \
; -H "authorization: Signature keyId=\"$keyId\",algorithm=\"rsa-sha256\",headers=\"(request-target) date digest\",signature=\"$signature\"" \
; -d "${payload}" \
; --cert "${certPath}tlsCert.crt" \
; --key "${certPath}tlsCert.key"
$oReq = ObjCreate("Chilkat.HttpRequest")
$oReq.AddParam "grant_type","client_credentials"
$oReq.AddHeader "Accept","application/json"
$oReq.AddHeader "Date",$oDt.GetAsRfc822(False)
$oReq.AddHeader "Digest",$oSbDigestHdrVal.GetAsString()
$oReq.AddHeader "Authorization",$oSbAuthHdrVal.GetAsString()
$oReq.HttpVerb = "POST"
$oReq.ContentType = "application/x-www-form-urlencoded"
$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpReq("https://api.sandbox.ing.com/oauth2/token",$oReq,$oResp)
If ($bSuccess = False) Then
ConsoleWrite($oHttp.LastErrorText & @CRLF)
Exit
EndIf
; If successful, the status code = 200
ConsoleWrite("Response Status Code: " & $oResp.StatusCode & @CRLF)
ConsoleWrite($oResp.BodyStr & @CRLF)
$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.Load($oResp.BodyStr)
$oJson.EmitCompact = False
ConsoleWrite($oJson.Emit() & @CRLF)
; A successful response contains an access token such as:
; {
; "access_token": "eyJhbGc ... bxI_SoPOBH9xmoM",
; "expires_in": 905,
; "scope": "payment-requests:view payment-requests:create payment-requests:close greetings:view virtual-ledger-accounts:fund-reservation:create virtual-ledger-accounts:fund-reservation:delete virtual-ledger-accounts:balance:view",
; "token_type": "Bearer",
; "keys": [
; {
; "kty": "RSA",
; "n": "3l3rdz4...04VPkdV",
; "e": "AQAB",
; "use": "sig",
; "alg": "RS256",
; "x5t": "3c396700fc8cd709cf9cb5452a22bcde76985851"
; }
; ],
; "client_id": "e77d776b-90af-4684-bebc-521e5b2614dd"
; }
; Use this online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
Local $sKty
Local $sN
Local $sE
Local $sUse
Local $sAlg
Local $sX5t
Local $sAccess_token = $oJson.StringOf("access_token")
Local $iExpires_in = $oJson.IntOf("expires_in")
Local $scope = $oJson.StringOf("scope")
Local $sToken_type = $oJson.StringOf("token_type")
Local $sClient_id = $oJson.StringOf("client_id")
Local $i = 0
Local $iCount_i = $oJson.SizeOfArray("keys")
While $i < $iCount_i
$oJson.I = $i
$sKty = $oJson.StringOf("keys[i].kty")
$sN = $oJson.StringOf("keys[i].n")
$sE = $oJson.StringOf("keys[i].e")
$sUse = $oJson.StringOf("keys[i].use")
$sAlg = $oJson.StringOf("keys[i].alg")
$sX5t = $oJson.StringOf("keys[i].x5t")
$i = $i + 1
Wend
; This example will save the JSON containing the access key to a file so that
; a subsequent example can load it and then use the access key for a request, such as to create a payment request.
$oJson.WriteFile("qa_data/tokens/ing_access_token.json")