Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerBuilder) Automatically Refresh Token for 401 UnauthorizedDemonstrates how to automatically refresh an access token (without user interaction) when the token expires and a 401 Unauthorized response is received.
integer li_rc string ls_TokenFilePath oleobject loo_JsonToken integer li_Success oleobject loo_Http string ls_JsonResponse oleobject loo_Oauth2 oleobject loo_SbJson // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. ls_TokenFilePath = "qa_data/tokens/googleCalendar.json" // Get our current access token. loo_JsonToken = create oleobject // Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 li_rc = loo_JsonToken.ConnectToNewObject("Chilkat.JsonObject") if li_rc < 0 then destroy loo_JsonToken MessageBox("Error","Connecting to COM object failed") return end if li_Success = loo_JsonToken.LoadFile(ls_TokenFilePath) if loo_JsonToken.HasMember("access_token") = 0 then Write-Debug "No access token found." destroy loo_JsonToken return end if loo_Http = create oleobject // Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 li_rc = loo_Http.ConnectToNewObject("Chilkat.Http") loo_Http.AuthToken = loo_JsonToken.StringOf("access_token") ls_JsonResponse = loo_Http.QuickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList") if loo_Http.LastMethodSuccess <> 1 then if loo_Http.LastStatus <> 401 then Write-Debug loo_Http.LastErrorText Write-Debug "----" Write-Debug loo_Http.LastResponseBody destroy loo_JsonToken destroy loo_Http return end if // The access token must've expired. // Refresh the access token and then retry the request. loo_Oauth2 = create oleobject // Use "Chilkat_9_5_0.OAuth2" for versions of Chilkat < 10.0.0 li_rc = loo_Oauth2.ConnectToNewObject("Chilkat.OAuth2") loo_Oauth2.TokenEndpoint = "https://www.googleapis.com/oauth2/v4/token" // Replace these with actual values. loo_Oauth2.ClientId = "GOOGLE-CLIENT-ID" loo_Oauth2.ClientSecret = "GOOGLE-CLIENT-SECRET" // Get the "refresh_token" loo_Oauth2.RefreshToken = loo_JsonToken.StringOf("refresh_token") // Send the HTTP POST to refresh the access token.. li_Success = loo_Oauth2.RefreshAccessToken() if li_Success <> 1 then Write-Debug loo_Oauth2.LastErrorText destroy loo_JsonToken destroy loo_Http destroy loo_Oauth2 return end if // The response contains a new access token, but we must keep // our existing refresh token for when we need to refresh again in the future. loo_JsonToken.UpdateString("access_token",loo_Oauth2.AccessToken) // Save the new JSON access token response to a file. loo_SbJson = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_SbJson.ConnectToNewObject("Chilkat.StringBuilder") loo_JsonToken.EmitCompact = 0 loo_JsonToken.EmitSb(loo_SbJson) loo_SbJson.WriteFile(ls_TokenFilePath,"utf-8",0) Write-Debug "OAuth2 authorization granted!" Write-Debug "New Access Token = " + loo_Oauth2.AccessToken // re-try the original request. loo_Http.AuthToken = loo_Oauth2.AccessToken ls_JsonResponse = loo_Http.QuickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList") if loo_Http.LastMethodSuccess <> 1 then Write-Debug loo_Http.LastErrorText destroy loo_JsonToken destroy loo_Http destroy loo_Oauth2 destroy loo_SbJson return end if end if Write-Debug ls_JsonResponse Write-Debug "-----------------------------" destroy loo_JsonToken destroy loo_Http destroy loo_Oauth2 destroy loo_SbJson |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.