|
|
(JavaScript) Refresh Expiring OAuth2 Access Token for Azure Registered App
Shows how to renew an Azure App's access token using the refresh token when it's near expiration.
var 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.
var json = new CkJsonObject();
success = json.LoadFile("qa_data/tokens/_myAzureApp.json");
if (success !== true) {
console.log("Failed to load the access token.");
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.
var dtExpire = new CkDateTime();
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) {
console.log("No need to refresh, the access token won't expire within the next 10 minutes.");
return;
}
// OK, we need to refresh the access token..
var oauth2 = new CkOAuth2();
// Note: The endpoint depends on the Azure App Registration.
// See How to Choose the Correct Endpoints for your Azure App Registration
oauth2.TokenEndpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
// Use your client ID.
oauth2.ClientId = "CLIENT_ID";
// Get the existing refresh token.
oauth2.RefreshToken = json.StringOf("refresh_token");
// Send the HTTP POST to refresh the access token.
success = oauth2.RefreshAccessToken();
if (success == false) {
console.log(oauth2.LastErrorText);
return;
}
console.log("OAuth2 authorization granted!");
console.log("Access Token = " + oauth2.AccessToken);
// Get the full JSON response:
json.Load(oauth2.AccessTokenResponse);
json.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));
}
console.log(json.Emit());
// Save the new access token JSON to a file for future requests.
var fac = new CkFileAccess();
fac.WriteEntireTextFile("qa_data/tokens/_myAzureApp.json",json.Emit(),"utf-8",false);
|