You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Office Word插件Mac端(Safari WebKit 1.0)MSAL登录重定向失效问题

问题描述

基于Angular 14.1.2开发的Office Word插件,采用Azure B2C结合MSAL库实现用户认证,该方案在Windows端运行完全正常,但在Mac端出现异常:插件对话框内调用登录重定向后流程卡住,仅写入Cookie和本地存储,无法跳转到Azure B2C登录页面。

特殊现象:

  • 在loginRedirect()执行前设置断点,调试继续后流程可正常运行
  • 提前设置代码延时无法解决问题
  • 关闭Safari的ITP(智能跟踪预防)机制后仍无改善

环境版本

  • Angular: 14.1.2
  • @azure/msal-angular: 2.5.1
  • @azure/msal-browser: 2.32.1

调用代码

this.msalService.loginRedirect().subscribe();

MSAL配置代码

export function msalInstanceFactory(appConfigService: AppConfigService): IPublicClientApplication {
  const appConfig = appConfigService.config;
  return new PublicClientApplication({
    auth: {
      clientId: appConfig.aadB2CClientId,
      authority: `https://${appConfig.aadB2CDomain}/${appConfig.aadB2CTenant}/${appConfig.aadB2CSIPolicy}`,
      redirectUri: appConfig.aadB2CRedirectUri,
      postLogoutRedirectUri: getLocationOriginWithPath('logout'),
      knownAuthorities: [appConfig.aadB2CDomain],
      navigateToLoginRequestUrl: false,
    },
    cache: {
      cacheLocation: BrowserCacheLocation.LocalStorage,
      storeAuthStateInCookie: isIE,
    },
    system: {
      loggerOptions: {
        loggerCallback: msalLoggerCallback,
        logLevel: LogLevel.Verbose,
        piiLoggingEnabled: true,
      },
    },
  });
}

export function msalGuardConfigFactory(appConfigService: AppConfigService): MsalGuardConfiguration {
  return {
    interactionType: InteractionType.Redirect,
    authRequest: {
      scopes: appConfigService.config.aadB2CConsentScopes,
      loginHint: getLoginHint(),
    },
  };
}
可能的解决方案

1. 确保DOM完全就绪后执行重定向

Mac端Office插件的WebView环境存在事件循环或DOM渲染延迟,断点能正常运行说明逻辑本身无问题,但即时执行时可能被异步操作阻塞。可将重定向调用放在Angular的AfterViewInit钩子中,通过微任务队列延迟执行:

import { AfterViewInit, Component } from '@angular/core';

@Component({...})
export class AuthComponent implements AfterViewInit {
  constructor(private msalService: MsalService) {}

  ngAfterViewInit(): void {
    queueMicrotask(() => {
      this.msalService.loginRedirect().subscribe();
    });
  }
}

2. 强制启用Cookie存储认证状态

Mac端Office WebView对LocalStorage的访问可能存在隐性限制,尝试强制开启Cookie存储:

cache: {
  cacheLocation: BrowserCacheLocation.LocalStorage,
  storeAuthStateInCookie: true, // 覆盖原isIE判断,强制启用Cookie存储
  secureCookies: true, // 若redirectUri为HTTPS,开启此项增强安全性
},

3. 手动触发重定向跳转

绕开MSAL的自动导航逻辑,手动获取认证URL并跳转:

// 先构建认证请求,再获取重定向URL并手动跳转
this.msalService.getAuthRequest({
  scopes: appConfigService.config.aadB2CConsentScopes,
  loginHint: getLoginHint(),
}).then((authRequest) => {
  this.msalService.getLoginRedirectUrl(authRequest).then((url) => {
    window.location.href = url;
  });
});

4. 检查Office插件Manifest权限配置

确保插件manifest.xml中添加了Azure B2C域名的授权,允许WebView导航到该域名:

<Permissions>ReadWriteDocument</Permissions>
<AppDomains>
  <AppDomain>https://your-b2c-domain.com</AppDomain>
</AppDomains>

5. 升级MSAL库版本

当前使用的msal-browser版本较旧,升级到兼容Angular 14的最新2.x版本,可能修复了Mac WebView下的重定向兼容问题:

npm install @azure/msal-angular@^2.8.0 @azure/msal-browser@^2.38.0

内容的提问来源于stack exchange,提问作者Edgar Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:45:47