Excelアドインには、SharePoint REST APIを呼び出す一部の関数のOAUTHトークンが必要です。ExcelアドインでSharepointトークンを取得する
アドインはリボンコマンドを使用しており、タスクペインはありません。
var dhi = dhi || {};
dhi.adal = (function (mod) {
var settings = {
clientId: "xxxyyyyzzzz",
url: "https://company.sharepoint.com"
};
mod.getToken = function() {
var dfd = $.Deferred();
//fix origin for IE
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
}
var configOptions = {
clientId: settings.clientId,
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage',
}
window.authContext = new AuthenticationContext(configOptions);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
var user = authContext.getCachedUser();
if (!user) {
authContext.login();
} else {
var cachedToken = authContext.getCachedToken(user.profile.aud);
if (!cachedToken) {
authContext.login();
} else {
var url = settings.url;
var tok = authContext.acquireToken(url, function (error, token) {
console.log(error);
if (token != null) {
console.log(token);
sharedtoken = token;
dfd.resolve(token);
} else {
if (cachedToken != "" && cachedToken != null && cachedToken != undefined) {
dfd.resolve(cachedToken);
} else {
dfd.reject("Unable to obtain token. Please contact [email protected] with the following error : " + error);
}
}
});
}
}
return dfd.promise();
}
return mod;
})(dhi.adal || {});
、私たちはこの初期化を呼び出す(リボンボタンのハンドラが定義されている)functions.js
ファイル内:
(function() {
"use strict";
$(document).ready(function() {
dhi.adal.getToken.then(
function (token) {
sharedtoken = token;
Office.initialize = function (reason) {
// some code here
}
},
function (error) {
app.showNotification("Problem occured", error);
});
});
})();
我々が直面していると私たちは他のプロジェクトからトークンを取得するには、次のコードを持っています次のような問題が発生します。
1)トークンがすでにキャッシュされている場合、それは機能します。ただし、authContext.login()
に電話する必要があるときは、メッセージは表示されません。ログインダイアログをどこに表示するのかはわかりません(このアドインの最初のバージョンでは作業ウィンドウを使用していましたが、ログインページが表示されましたが、いくつかの理由からコマンドを使用する必要があります)
2)Office.initialize
が呼び出される前に呼び出す必要があります。それ以外の場合は機能しません(私はgetToken
を必要とする機能だけに入れようとしましたが、成功しませんでした)。これには副作用があり、トークンを必要としないときには、ボタンアクションに対しても常にgetToken()
と呼ぶ必要があります。
3)トークンを取得するためのダイアログを作成しようとしましたが、いくつかの問題があります。 adal.js
...
だから、私はお願いしたいと思います - いくつかのサンプルがあった場合Office.jas
にActive DirectoryからSharePointのトークンを取得するためにどのように任意の簡単な方法があり、それは私たちの助けになりますロット。