Sample code for 30+ languages & platforms
PowerShell

Automatically Refresh Token for 401 Unauthorized

See more Google Calendar Examples

Demonstrates how to automatically refresh an access token (without user interaction) when the token expires and a 401 Unauthorized response is received.

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$tokenFilePath = "qa_data/tokens/googleCalendar.json"

# Get our current access token.
$jsonToken = New-Object Chilkat.JsonObject
$success = $jsonToken.LoadFile($tokenFilePath)
if ($jsonToken.HasMember("access_token") -eq $false) {
    $("No access token found.")
    exit
}

$http = New-Object Chilkat.Http
$http.AuthToken = $jsonToken.StringOf("access_token")

$jsonResponse = $http.QuickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList")
if ($http.LastMethodSuccess -ne $true) {

    if ($http.LastStatus -ne 401) {
        $($http.LastErrorText)
        $("----")
        $($http.LastResponseBody)
        exit
    }

    # The access token must've expired. 
    # Refresh the access token and then retry the request.
    $oauth2 = New-Object Chilkat.OAuth2

    $oauth2.TokenEndpoint = "https://www.googleapis.com/oauth2/v4/token"

    # Replace these with actual values.
    $oauth2.ClientId = "GOOGLE-CLIENT-ID"
    $oauth2.ClientSecret = "GOOGLE-CLIENT-SECRET"

    # Get the "refresh_token"
    $oauth2.RefreshToken = $jsonToken.StringOf("refresh_token")

    # Send the HTTP POST to refresh the access token..
    $success = $oauth2.RefreshAccessToken()
    if ($success -ne $true) {
        $($oauth2.LastErrorText)
        exit
    }

    # 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.
    $jsonToken.UpdateString("access_token",$oauth2.AccessToken)

    # Save the new JSON access token response to a file.
    $sbJson = New-Object Chilkat.StringBuilder
    $jsonToken.EmitCompact = $false
    $jsonToken.EmitSb($sbJson)
    $sbJson.WriteFile($tokenFilePath,"utf-8",$false)

    $("OAuth2 authorization granted!")
    $("New Access Token = " + $oauth2.AccessToken)

    # re-try the original request.
    $http.AuthToken = $oauth2.AccessToken
    $jsonResponse = $http.QuickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList")
    if ($http.LastMethodSuccess -ne $true) {
        $($http.LastErrorText)
        exit
    }

}

$($jsonResponse)
$("-----------------------------")