![]() |
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
(Xojo Plugin) 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
// This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Dim cert As New Chilkat.Cert Dim success As Boolean success = cert.LoadFromFile("qa_data/certs_and_keys/ING/example_client_tls.cer") If (success = False) Then System.DebugLog(cert.LastErrorText) Return End If Dim bdPrivKey As New Chilkat.BinData success = bdPrivKey.LoadFile("qa_data/certs_and_keys/ING/example_client_tls.key") If (success = False) Then System.DebugLog("Failed to load example_client_tls.key") Return End If // 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. Dim privKey As New Chilkat.PrivateKey success = privKey.LoadAnyFormat(bdPrivKey,"") If (success = False) Then System.DebugLog(privKey.LastErrorText) Return End If // Associate the private key with the certificate. success = cert.SetPrivateKey(privKey) If (success = False) Then System.DebugLog(cert.LastErrorText) Return End If Dim http As New Chilkat.Http success = http.SetSslClientCert(cert) If (success = False) Then System.DebugLog(http.LastErrorText) Return End If // 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 Dim crypt As New Chilkat.Crypt2 crypt.HashAlgorithm = "SHA256" crypt.EncodingMode = "base64" Dim payload As String payload = "grant_type=client_credentials" Dim payloadDigest As String 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") Dim dt As New Chilkat.CkDateTime success = 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` Dim httpMethod As String httpMethod = "POST" Dim reqPath As String reqPath = "/oauth2/token" Dim sbStringToSign As New Chilkat.StringBuilder success = sbStringToSign.Append("(request-target): ") success = sbStringToSign.Append(httpMethod) success = sbStringToSign.ToLowercase() success = sbStringToSign.Append(" ") success = sbStringToSign.AppendLine(reqPath,False) success = sbStringToSign.Append("date: ") success = sbStringToSign.AppendLine(dt.GetAsRfc822(False),False) success = sbStringToSign.Append("digest: SHA-256=") success = sbStringToSign.Append(payloadDigest) Dim signingPrivKey As New Chilkat.PrivateKey success = signingPrivKey.LoadPemFile("qa_data/certs_and_keys/ING/example_client_signing.key") If (success = False) Then System.DebugLog(signingPrivKey.LastErrorText) Return End If Dim rsa As New Chilkat.Rsa success = rsa.ImportPrivateKeyObj(signingPrivKey) If (success = False) Then System.DebugLog(rsa.LastErrorText) Return End If rsa.EncodingMode = "base64" Dim b64Signature As String b64Signature = rsa.SignStringENC(sbStringToSign.GetAsString(),"SHA256") Dim sbAuthHdrVal As New Chilkat.StringBuilder success = sbAuthHdrVal.Append("Signature keyId=""e77d776b-90af-4684-bebc-521e5b2614dd"",") success = sbAuthHdrVal.Append("algorithm=""rsa-sha256"",") success = sbAuthHdrVal.Append("headers=""(request-target) date digest"",") success = sbAuthHdrVal.Append("signature=""") success = sbAuthHdrVal.Append(b64Signature) success = sbAuthHdrVal.Append("""") Dim sbDigestHdrVal As New Chilkat.StringBuilder success = sbDigestHdrVal.Append("SHA-256=") success = 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" Dim req As New 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() Dim resp As Chilkat.HttpResponse resp = http.PostUrlEncoded("https://api.sandbox.ing.com/oauth2/token",req) If (http.LastMethodSuccess = False) Then System.DebugLog(http.LastErrorText) Return End If // If successful, the status code = 200 System.DebugLog("Response Status Code: " + Str(resp.StatusCode)) System.DebugLog(resp.BodyStr) Dim json As New Chilkat.JsonObject success = json.Load(resp.BodyStr) json.EmitCompact = False System.DebugLog(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 Dim kty As String Dim n As String Dim e As String Dim use As String Dim alg As String Dim x5t As String Dim access_token As String access_token = json.StringOf("access_token") Dim expires_in As Int32 expires_in = json.IntOf("expires_in") Dim scope As String scope = json.StringOf("scope") Dim token_type As String token_type = json.StringOf("token_type") Dim client_id As String client_id = json.StringOf("client_id") Dim i As Int32 i = 0 Dim count_i As Int32 count_i = json.SizeOfArray("keys") While i < 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 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. success = json.WriteFile("qa_data/tokens/ing_access_token.json") |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.