C++
C++
Refresh Expiring OAuth2 Access Token for Azure Registered App
See more OAuth2 Examples
Shows how to renew an Azure App's access token using the refresh token when it's near expiration.Chilkat C++ Downloads
#include <CkJsonObject.h>
#include <CkDateTime.h>
#include <CkOAuth2.h>
#include <CkFileAccess.h>
void ChilkatSample(void)
{
bool success = false;
// We previously obtained an access token and saved the JSON to a file using this example:
// Get OAuth2 Access Token for Azure Registered App
// This example will examine the JSON and expiration date, and if near expiration will
// refresh the access token.
CkJsonObject json;
success = json.LoadFile("qa_data/tokens/_myAzureApp.json");
if (success != true) {
std::cout << "Failed to load the access token." << "\r\n";
return;
}
// The contents of the JSON look like this:
// {
// "token_type": "Bearer",
// "scope": "User.Read Mail.ReadWrite Mail.Send",
// "expires_in": 3600,
// "ext_expires_in": 0,
// "access_token": "EwBAA8l6B...",
// "refresh_token": "MCRMdbe6Cd...",
// "id_token": "eyJ0eXAiOiJ...",
// "expires_on": "1494112119"
// }
// The "expires_on" value is a Unix time.
CkDateTime dtExpire;
dtExpire.SetFromUnixTime(false,json.IntOf("expires_on"));
// If this date/time expires within 10 minutes of the current system time, refresh the token.
if (dtExpire.ExpiresWithin(10,"minutes") != true) {
std::cout << "No need to refresh, the access token won't expire within the next 10 minutes." << "\r\n";
return;
}
// OK, we need to refresh the access token..
CkOAuth2 oauth2;
// Note: The endpoint depends on the Azure App Registration.
// See How to Choose the Correct Endpoints for your Azure App Registration
oauth2.put_TokenEndpoint("https://login.microsoftonline.com/common/oauth2/v2.0/token");
// Use your client ID.
oauth2.put_ClientId("CLIENT_ID");
// Get the existing refresh token.
oauth2.put_RefreshToken(json.stringOf("refresh_token"));
// Send the HTTP POST to refresh the access token.
success = oauth2.RefreshAccessToken();
if (success == false) {
std::cout << oauth2.lastErrorText() << "\r\n";
return;
}
std::cout << "OAuth2 authorization granted!" << "\r\n";
std::cout << "Access Token = " << oauth2.accessToken() << "\r\n";
// Get the full JSON response:
json.Load(oauth2.accessTokenResponse());
json.put_EmitCompact(false);
// If an "expires_on" member does not exist, then add the JSON member by
// getting the current system date/time and adding the "expires_in" seconds.
// This way we'll know when the token expires.
if (json.HasMember("expires_on") != true) {
dtExpire.SetFromCurrentSystemTime();
dtExpire.AddSeconds(json.IntOf("expires_in"));
json.AppendString("expires_on",dtExpire.getAsUnixTimeStr(false));
}
std::cout << json.emit() << "\r\n";
// Save the new access token JSON to a file for future requests.
CkFileAccess fac;
fac.WriteEntireTextFile("qa_data/tokens/_myAzureApp.json",json.emit(),"utf-8",false);
}