在 Outlook 加载项中使用 MSAL.js 和 Office.js 身份验证

问题描述 投票:0回答:1

我有一个 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,所以这不是我正在寻找的解决方案。

我也尝试寻找任何其他图书馆,但无济于事。还有其他库能够实现我想要的功能吗?

reactjs outlook office-js msal
1个回答
0
投票

注意:MSAL.js 不直接支持 Outlook 身份验证。

  • 您可以使用
    acquireTokenSilent
    方法尝试静默获取令牌。
  • 如果您想避免弹出窗口,请检查 NAA for SSO、检查 NAA 支持并获取访问令牌。
  • 嵌套应用程序身份验证 (NAA) 使您的加载项能够利用用户当前的 Outlook 会话来获取访问令牌,而无需用户再次输入其凭据。

使用以下代码检查用户的 Office 环境是否支持 NAA:

Office.context.requirements.isSetSupported("NestedAppAuth", "1.1");

如果 NAA 可用,您可以使用它直接从用户的 Outlook 会话获取访问令牌。

此外,不要尝试将令牌注入 MSAL 缓存,这一点至关重要,因为 MSAL.js 是为了处理其自己的令牌生命周期而构建的。相反,请优先考虑 NAA 方法以获得流畅的身份验证体验。

© www.soinside.com 2019 - 2024. All rights reserved.