Office js 在Excel加载项中获取Sharepoint令牌

Office js 在Excel加载项中获取Sharepoint令牌,office-js,Office Js,对于一些调用SharePoint REST API的函数,我们的Excel加载项需要OAUTH令牌 外接程序使用功能区命令,我们没有任务窗格。我们有以下代码从其他项目获取令牌: var-dhi=dhi |{}; dhi.adal=(函数(mod){ 变量设置={ 客户ID:“xxxyyyzzz”, url:“https://company.sharepoint.com" }; mod.getToken=函数(){ var dfd=$.Deferred(); //确定IE的来源 如果(!windo

对于一些调用SharePoint REST API的函数,我们的Excel加载项需要OAUTH令牌

外接程序使用功能区命令,我们没有任务窗格。我们有以下代码从其他项目获取令牌:

var-dhi=dhi |{};
dhi.adal=(函数(mod){
变量设置={
客户ID:“xxxyyyzzz”,
url:“https://company.sharepoint.com"
};
mod.getToken=函数(){
var dfd=$.Deferred();
//确定IE的来源
如果(!window.location.origin){
window.location.origin=window.location.protocol+“/”+window.location.hostname+(window.location.port?):“+window.location.port:”;
}
var配置选项={
clientId:settings.clientId,
postLogoutRedirectUri:window.location.origin,
cacheLocation:'localStorage',
}
window.authContext=新的AuthenticationContext(配置选项);
var isCallback=authContext.isCallback(window.location.hash);
authContext.HandleIndowCallback();
var user=authContext.getCachedUser();
如果(!用户){
authContext.login();
}否则{
var cachedToken=authContext.getCachedToken(user.profile.aud);
如果(!cachedToken){
authContext.login();
}否则{
var url=settings.url;
var tok=authContext.acquireToken(url,函数(错误,标记){
console.log(错误);
if(令牌!=null){
console.log(令牌);
sharedtoken=令牌;
解析(令牌);
}否则{
if(cachedToken!=“”&&cachedToken!=null&&cachedToken!=未定义){
dfd.resolve(cachedToken);
}否则{
dfd.reject(“无法获取令牌。请联系hotline@dhigroup.com出现以下错误:“+错误”;
}
}
});
}
}
返回dfd.promise();
}
返回模式;
})(dhi.adal | |{});
functions.js
文件(其中定义了功能区按钮的处理程序)中,我们将此初始化称为:

(函数(){
“严格使用”;
$(文档).ready(函数(){
那么,dhi.adal.getToken(
功能(令牌){
sharedtoken=令牌;
Office.initialize=函数(原因){
//这里有一些代码
}
},
函数(错误){
app.showNotification(“出现问题”,错误);
});
});
})();
我们面临以下问题:

1) 如果令牌已经被缓存,它就可以工作。但是,当它需要调用
authContext.login()
时,它会挂起(没有消息)。我们相信不知道在哪里显示登录对话框(在这个插件的第一个版本中,我们使用了一个任务窗格,它在那里显示了登录页面,但是,出于几个原因,我们需要使用这些命令

2) 我们必须在调用
Office.initialize
之前调用它,否则它将无法工作(我试图将
getToken
仅用于需要它的函数,但没有成功)-不知道为什么。这有一个副作用,我们必须始终调用
getToken()
,当不需要令牌时,按钮操作也是如此

3) 我试图创建一个对话框来获取令牌,但是还有一些其他问题-在
adal.js
中有一些问题

所以,我想问-有没有简单的方法可以从Office.jas中的Active directory获取SharePoint令牌


如果有样品的话,对我们会有很大帮助

没有用于获取SharePoint令牌的内置方法

至于打开身份验证对话框,您应该为此使用。有一个PowerPoint加载项示例,它使用对话框API对图形进行身份验证:。此处使用的主体和组件应易于转换为Excel和SharePoint

对于身份验证库,我建议看一下


您还需要确保您的函数文件分配给Office。加载页面时立即初始化。这不是对init函数的出站调用,而是您正在分配init函数的属性。Office将自动调用此方法,如果尚未分配函数,则会导致错误

没有用于获取SharePoint令牌的内置方法

至于打开身份验证对话框,您应该为此使用。有一个PowerPoint加载项示例,它使用对话框API对图形进行身份验证:。此处使用的主体和组件应易于转换为Excel和SharePoint

对于身份验证库,我建议看一下

您还需要确保您的函数文件分配给Office。加载页面时立即初始化。这不是对init函数的出站调用,而是您正在分配init函数的属性。Office将自动调用此方法,如果尚未分配函数,则会导致错误