Notre complément Excel nécessite un jeton OAUTH pour certaines fonctions qui appellent l'API REST SharePoint.Obtenir le jeton Sharepoint dans le complément Excel
Le complément utilise les commandes du ruban et nous n'avons pas de volet de tâches. Nous avons le code suivant pour obtenir le jeton d'autres projets:
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 || {});
et dans le fichier functions.js
(où les gestionnaires de boutons de ruban sont définis) que nous appelons cette initialisation:
(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);
});
});
})();
Nous sommes face à problèmes suivants:
1) Si le jeton est déjà mis en cache, cela fonctionne. Cependant, quand il doit appeler authContext.login()
, il se bloque (aucun message nulle part). Nous croyons ne pas savoir où afficher la boîte de dialogue de connexion (dans la toute première version de ce complément, nous avons utilisé un volet de tâches et affiché la page de connexion, cependant, pour plusieurs raisons, nous devons utiliser les commandes.)
2) Nous devons l'appeler avant que le Office.initialize
soit appelé, sinon il ne fonctionne pas (j'ai essayé de mettre getToken
seulement aux fonctions qui en ont besoin mais sans succès) - aucune idée pourquoi. Cela a un effet secondaire, que nous devons toujours appeler getToken()
, également pour les actions de bouton, quand aucun jeton n'est nécessaire
3) J'ai essayé de créer une boîte de dialogue pour obtenir le jeton, mais il y a d'autres problèmes - certains problèmes dans adal.js
...
Alors, je voudrais demander - est-il un moyen simple comment obtenir un jeton SharePoint à partir de active Directory dans Office.jas
S'il y avait un échantillon, il nous aiderait lot.