我正在关注office-js-helpers以启用SSO登录,然后使用访问令牌来调用Graph API。
但是,即使我已经在manifest.xml中添加了Authentication,也会在新选项卡中打开登录窗口
<AppDomain>https://login.windows.net</AppDomain>
<AppDomain>https://login.microsoftonline.com</AppDomain>
编辑: 对于SSO登录,是否应该在Outlook加载项中重定向而不是打开新的Web浏览器窗口?
这是演示项目OutlookOneDriveGraphAddIn。
我想在我的Outlook web插件中启用graph api,graph api将需要登录过程,我希望能够在我的web插件中请求访问令牌。
如果有任何不清楚的地方,请告诉我。
嘿,我遇到了同样的问题。我还在开发一个Outlook Addin,它需要访问令牌来从GraphAPI请求资源。经过长时间的搜索,我找到了最好的方法,并完成了我的Addin的实现。
尝试Access token without user中的步骤。我的方式是使用nodejs中间件进行身份验证及其工作。现在我可以使用它访问大多数GraphApi资源。希望这可以帮助。
请注意,使用此方法您应该启用应用程序权限,而不是委派。
这里有2个问题。
问题1:对于SSO登录,是否应该在Outlook加载项中重定向而不是打开新的Web浏览器窗口?
它不应该在Office加载项中重定向,原因很简单,这是针对OAuth的。使用OAuth身份验证,您必须向用户显示URL - 否则您可以欺骗与您的加载项中的Microsoft登录类似的UI并窃取用户的凭据。显然这不安全。因此,当您调用getAccessTokenAsync
时,如果用户未登录,则应弹出一个对话框。登录由Microsoft处理,之后,令牌可通过相同的方法getAccessTokenAsync
获得。
问题2:如何从我的加载项中获取访问令牌?
Office.context.auth.getAccessTokenAsync(function (result) {
if (result.status === "succeeded") {
// Use this token to call Web API
var ssoToken = result.value;
...
} else {
if (result.error.code === 13003) {
// SSO is not supported for domain user accounts, only
// work or school (Office 365) or Microsoft Account IDs.
} else {
// Handle error
}
}
});