我有一个 SPA,它可以作为独立的 Web 应用程序或 Outlook 加载项运行。我希望用户能够使用他们的 Microsoft 帐户登录。但是,当使用 Outlook 加载项时,我想让 Outlook 向我们提供用户的身份(并且不显示弹出窗口)和访问令牌,因为用户已经登录。
我尝试将 msal-react 的功能 (MsalAuthenticationTemplate) 与 office.js 一起使用,但 MSAL 不支持 Outlook 身份验证。
我尝试将 Outlook 访问令牌注入到 MSAL 缓存中以模拟登录,但 MSAL 无法使用这些令牌。
msalInstance.initialize()
.then(() => {
// Account selection logic is app dependent. Adjust as needed for different use cases.
const accounts = msalInstance.getAllAccounts()
if (accounts.length >= 0 && msalInstance.getActiveAccount() === undefined) {
msalInstance.setActiveAccount(accounts[0])
} else if (isOfficeInitialized()) {
Office.auth.getAccessToken({ allowConsentPrompt: false, allowSignInPrompt: false })
.then(result => {
const token = result && jwtDecode<AzureTokenPayload>(result)
msalInstance.hydrateCache(payload, {}).then(() => msalInstance.setActiveAccount(account))
})
}
})
我知道可以显示内联弹出窗口,但用户已经登录到 Outlook,所以这不是我正在寻找的解决方案。
我也尝试寻找任何其他图书馆,但无济于事。还有其他库能够实现我想要的功能吗?
注意:MSAL.js 不直接支持 Outlook 身份验证。
acquireTokenSilent
方法尝试静默获取令牌。使用以下代码检查用户的 Office 环境是否支持 NAA:
Office.context.requirements.isSetSupported("NestedAppAuth", "1.1");
如果 NAA 可用,您可以使用它直接从用户的 Outlook 会话获取访问令牌。
此外,不要尝试将令牌注入 MSAL 缓存,这一点至关重要,因为 MSAL.js 是为了处理其自己的令牌生命周期而构建的。相反,请优先考虑 NAA 方法以获得流畅的身份验证体验。