使用allowRedirectInIframe标志在iframe内重定向流

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

我的应用程序 B 托管在另一个应用程序 A 的 iframe 内。用户旅程是用户登录到父应用程序 A,然后单击导航菜单,将我的应用程序 B 加载到 iframe 中。该应用程序 B 是 Angular SPA,后端托管在不同的域上。在获取带有重定向流的会话后,我尝试在此应用程序 B 中使用承载令牌。我也使用“allowRedirectInIframe”标志。但这不起作用。 B 启动重定向流程返回并重新启动,但失败并出现以下错误 enter image description here

我可以看到一些问题/文档,其中明确指出重定向流在 iframe 中是不可能的。例如 https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/3759 https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/iframe-usage.md

但是“allowRedirectInIframe”标志的存在让我相信这已经过时了。如果我错了,请纠正我。否则你能告诉我我做错了什么吗?我已在下面附加了我的 msal 配置和 app.module.ts 文件。

MSAL 配置

auth: {
    clientId: 'xxxxxxxxxxxx',
    authority: b2cPolicies.authorities.signUpSignIn.authority,
    knownAuthorities: [b2cPolicies.authorityDomain],
    redirectUri: https://my.redirect.uri,
    postLogoutRedirectUri: '/logged-out'
  },
  cache: {
    cacheLocation: BrowserCacheLocation.LocalStorage,
    storeAuthStateInCookie: false
  },
  system: {
    loggerOptions: {
      logLevel: LogLevel.Error,
      piiLoggingEnabled: false,
    },
    allowRedirectInIframe: true,
  },

相关代码片段

// app.module.ts code
  providers: [
    ConfigService,
    {provide: HTTP_INTERCEPTORS, useClass: RequestHeaderInterceptor, multi: true},
    {provide: HTTP_INTERCEPTORS, useClass: ConfigServiceInterceptor, multi: true, deps: [ConfigService]},
    {provide: HTTP_INTERCEPTORS, useClass: RequestErrorInterceptor, multi: true, deps: [ToastrService]},
    {provide: ErrorHandler, useClass: AppErrorHandler},
    {
      provide: HTTP_INTERCEPTORS,
      useClass: MsalInterceptor,
      multi: true,
    },
    {
      provide: MSAL_INSTANCE,
      useFactory: MSALInstanceFactory,
    },
    {
      provide: MSAL_GUARD_CONFIG,
      useFactory: MSALGuardConfigFactory,
    },
    {
      provide: MSAL_INTERCEPTOR_CONFIG,
      useFactory: MSALInterceptorConfigFactory,
    },
    MsalService,
    MsalGuard,
    MsalBroadcastService,
    // {
    //   provide: APP_INITIALIZER,
    //   multi: true,
    //   deps: [MsalService],
    //   useFactory: (authService: MsalService) => {
    //     return () => {
    //       return authService.ssoSilent({
    //         scopes: []
    //       }).toPromise();
    //     };
    //   }
    // },
  ],
  bootstrap: [AppComponent]
})

核心库 MSAL.js v2 (@azure/msal-browser)

核心库版本 2.22.0

包装库 MSAL 角度 (@azure/msal-angular)

包装库版本 2.1.1

身份提供商:Azure B2C 自定义策略 来源:外部(客户)

angular iframe azure-ad-msal msal.js msal-angular
1个回答
0
投票

是的,iframe 所在的父应用程序有自己的登录名,因此流程在此应用程序中完成登录,并在 iframe 内的应用程序中完成登录。这些应用程序位于不同的服务器中,但它们具有相同的登录名,所以你说我可以在 iframe 内的应用程序中执行 ssoSilent 吗?谢谢! :)

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