This GAS sample is for retrieving access token to use OneDrive APIs using Google Apps Script.
In this script, the authorization code is automatically retrieved.
In order to use this, both accounts of Google and OneDrive (MSN) are required.
- Copy and paste the sample script to your script editor. You can use the standalone script for this.
- Deploy Web Apps.
- On the Script Editor
- File
- -> Manage Versions
- -> Save New Version
- Publish
- -> Deploy as Web App
- -> At Execute the app as, select "your account"
- -> At Who has access to the app, select "Only myself"
- -> Click "Deploy"
- -> Copy URL of "latest code" (This is important!)
- -> Click "OK"
- On the Script Editor
- URL of "latest code" is
https://script.google.com/macros/s/###/dev
. So please modify this URL. Replace from "dev" to "usercallback" for the URL. And copy this modified URL.- From :
https://script.google.com/macros/s/###/dev
- To :
https://script.google.com/macros/s/###/usercallback
- From :
- Add new application at https://apps.dev.microsoft.com.
- Enable "Guided Setup".
- Retrieve application ID. This is client ID.
- By creating new password, retrieve application secret. This is client secret.
- Add platform. Select WEB.
- Input
https://script.google.com/macros/s/###/usercallback
as redirect uri. This URL is from "Google side". - Click save button.
By above operation, the preparation is done.
In order to run the script, please launch as follows.
At first, please input "application ID" and "application secret" from OneDrive to setProp()
. And run setProp()
.
As a next step, launch as follows.
- On the Script Editor
- Publish
- -> Deploy as Web App
- -> Click
Test web app for your latest code.
.
Refresh token can be retrieved by including offline_access
in the Scope.
This is Google Apps Script.
function setProp(){
PropertiesService.getScriptProperties().setProperties({
clientId: '### application ID ###',
clientSecret: '### application secret ###',
scope: "offline_access files.readwrite.all", // This is sample. So please modify for your environment.
});
}
function doGet() {
var prop = PropertiesService.getScriptProperties().getProperties();
var url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
var param = {
"response_type" : "code",
"client_id" : prop.clientId,
"redirect_uri" : getCallbackURL(),
"state" : ScriptApp.newStateToken().withMethod("callback").withTimeout(300).createToken(),
"scope" : prop.scope,
};
var params = [];
for(var name in param){
params.push(name + "=" + encodeURIComponent(param[name]));
}
var html = "<input type=\"button\" value=\"auth\" onclick=\"window.open('" + url + "?" + params.join("&") + "', 'Authorization', 'width=500,height=600');\">"
return HtmlService.createHtmlOutput(html)
}
function getCallbackURL() {
var url = ScriptApp.getService().getUrl();
if (url.indexOf("/exec") >= 0) {
url = url.slice(0, -4) + 'usercallback';
}
url = url.slice(0, -3) + 'usercallback';
PropertiesService.getScriptProperties().setProperties({
redirect_uri: url,
});
return url
}
function callback(e) {
var credentials = fetchAccessToken(e.parameter.code);
return HtmlService.createHtmlOutput(JSON.stringify(credentials, null, " "));
}
function fetchAccessToken(code) {
var prop = PropertiesService.getScriptProperties().getProperties();
var payload = {
"code" : code,
"client_id" : prop.clientId,
"client_secret" : prop.clientSecret,
"redirect_uri" : prop.redirect_uri,
"grant_type" : "authorization_code"
}
var res = UrlFetchApp.fetch("https://login.microsoftonline.com/common/oauth2/v2.0/token", {
"method" : "POST",
payload : payload,
muteHttpExceptions : true
});
return JSON.parse(res.getContentText());
}