![]() |
Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(PowerShell) ING Open Banking OAuth2 Client CredentialsDemonstrates how to get an access token for the ING Open Banking APIs using client credentials. For more information, see https://developer.ing.com/openbanking/get-started/openbanking
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll" # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $cert = New-Object Chilkat.Cert $success = $cert.LoadFromFile("qa_data/certs_and_keys/ING/example_client_tls.cer") if ($success -eq $false) { $($cert.LastErrorText) exit } $bdPrivKey = New-Object Chilkat.BinData $success = $bdPrivKey.LoadFile("qa_data/certs_and_keys/ING/example_client_tls.key") if ($success -eq $false) { $("Failed to load example_client_tls.key") exit } # 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. $privKey = New-Object Chilkat.PrivateKey $success = $privKey.LoadAnyFormat($bdPrivKey,"") if ($success -eq $false) { $($privKey.LastErrorText) exit } # Associate the private key with the certificate. $success = $cert.SetPrivateKey($privKey) if ($success -eq $false) { $($cert.LastErrorText) exit } $http = New-Object Chilkat.Http $success = $http.SetSslClientCert($cert) if ($success -eq $false) { $($http.LastErrorText) exit } # 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 $crypt = New-Object Chilkat.Crypt2 $crypt.HashAlgorithm = "SHA256" $crypt.EncodingMode = "base64" $payload = "grant_type=client_credentials" $payloadDigest = $crypt.HashStringENC($payload) # 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") $dt = New-Object Chilkat.CkDateTime $dt.SetFromCurrentSystemTime() # The desire date/time format is the "RFC822" format. $http.SetRequestHeader("Date",$dt.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` $httpMethod = "POST" $reqPath = "/oauth2/token" $sbStringToSign = New-Object Chilkat.StringBuilder $sbStringToSign.Append("(request-target): ") $sbStringToSign.Append($httpMethod) $sbStringToSign.ToLowercase() $sbStringToSign.Append(" ") $sbStringToSign.AppendLine($reqPath,$false) $sbStringToSign.Append("date: ") $sbStringToSign.AppendLine($dt.GetAsRfc822($false),$false) $sbStringToSign.Append("digest: SHA-256=") $sbStringToSign.Append($payloadDigest) $signingPrivKey = New-Object Chilkat.PrivateKey $success = $signingPrivKey.LoadPemFile("qa_data/certs_and_keys/ING/example_client_signing.key") if ($success -eq $false) { $($signingPrivKey.LastErrorText) exit } $rsa = New-Object Chilkat.Rsa $success = $rsa.ImportPrivateKeyObj($signingPrivKey) if ($success -eq $false) { $($rsa.LastErrorText) exit } $rsa.EncodingMode = "base64" $b64Signature = $rsa.SignStringENC($sbStringToSign.GetAsString(),"SHA256") $sbAuthHdrVal = New-Object Chilkat.StringBuilder $sbAuthHdrVal.Append("Signature keyId=`"e77d776b-90af-4684-bebc-521e5b2614dd`",") $sbAuthHdrVal.Append("algorithm=`"rsa-sha256`",") $sbAuthHdrVal.Append("headers=`"(request-target) date digest`",") $sbAuthHdrVal.Append("signature=`"") $sbAuthHdrVal.Append($b64Signature) $sbAuthHdrVal.Append("`"") $sbDigestHdrVal = New-Object Chilkat.StringBuilder $sbDigestHdrVal.Append("SHA-256=") $sbDigestHdrVal.Append($payloadDigest) # 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" $req = New-Object Chilkat.HttpRequest $req.AddParam("grant_type","client_credentials") $req.AddHeader("Accept","application/json") $req.AddHeader("Date",$dt.GetAsRfc822($false)) $req.AddHeader("Digest",$sbDigestHdrVal.GetAsString()) $req.AddHeader("Authorization",$sbAuthHdrVal.GetAsString()) $resp = $http.PostUrlEncoded("https://api.sandbox.ing.com/oauth2/token",$req) if ($http.LastMethodSuccess -eq $false) { $($http.LastErrorText) exit } # If successful, the status code = 200 $("Response Status Code: " + $resp.StatusCode) $($resp.BodyStr) $json = New-Object Chilkat.JsonObject $json.Load($resp.BodyStr) $json.EmitCompact = $false $($json.Emit()) # 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 $access_token = $json.StringOf("access_token") $expires_in = $json.IntOf("expires_in") $scope = $json.StringOf("scope") $token_type = $json.StringOf("token_type") $client_id = $json.StringOf("client_id") $i = 0 $count_i = $json.SizeOfArray("keys") while ($i -lt $count_i) { $json.I = $i $kty = $json.StringOf("keys[i].kty") $n = $json.StringOf("keys[i].n") $e = $json.StringOf("keys[i].e") $use = $json.StringOf("keys[i].use") $alg = $json.StringOf("keys[i].alg") $x5t = $json.StringOf("keys[i].x5t") $i = $i + 1 } # 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. $json.WriteFile("qa_data/tokens/ing_access_token.json") |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.