Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(VB.NET UWP/WinRT) 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 = cert.LoadFromFile("qa_data/certs_and_keys/ING/example_client_tls.cer") If (success = False) Then Debug.WriteLine(cert.LastErrorText) Exit Sub 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 Debug.WriteLine("Failed to load example_client_tls.key") Exit Sub 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 Debug.WriteLine(privKey.LastErrorText) Exit Sub End If ' Associate the private key with the certificate. success = cert.SetPrivateKey(privKey) If (success = False) Then Debug.WriteLine(cert.LastErrorText) Exit Sub End If Dim http As New Chilkat.Http success = http.SetSslClientCert(cert) If (success = False) Then Debug.WriteLine(http.LastErrorText) Exit Sub 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 = "grant_type=client_credentials" Dim payloadDigest As String = 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 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 = "POST" Dim reqPath As String = "/oauth2/token" Dim sbStringToSign As New 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) Dim signingPrivKey As New Chilkat.PrivateKey success = signingPrivKey.LoadPemFile("qa_data/certs_and_keys/ING/example_client_signing.key") If (success = False) Then Debug.WriteLine(signingPrivKey.LastErrorText) Exit Sub End If Dim rsa As New Chilkat.Rsa success = rsa.ImportPrivateKeyObj(signingPrivKey) If (success = False) Then Debug.WriteLine(rsa.LastErrorText) Exit Sub End If rsa.EncodingMode = "base64" Dim b64Signature As String = rsa.SignStringENC(sbStringToSign.GetAsString(),"SHA256") Dim sbAuthHdrVal As New 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("""") Dim sbDigestHdrVal As New 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" 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 = Await http.PostUrlEncodedAsync("https://api.sandbox.ing.com/oauth2/token",req) If (http.LastMethodSuccess = False) Then Debug.WriteLine(http.LastErrorText) Exit Sub End If ' If successful, the status code = 200 Debug.WriteLine("Response Status Code: " & resp.StatusCode) Debug.WriteLine(resp.BodyStr) Dim json As New Chilkat.JsonObject json.Load(resp.BodyStr) json.EmitCompact = False Debug.WriteLine(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 = json.StringOf("access_token") Dim expires_in As Integer = json.IntOf("expires_in") Dim scope As String = json.StringOf("scope") Dim token_type As String = json.StringOf("token_type") Dim client_id As String = json.StringOf("client_id") Dim i As Integer = 0 Dim count_i As Integer = 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 End While ' 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-2022 Chilkat Software, Inc. All Rights Reserved.