在不同环境上加载Azure AD MSAL app.module.ts动态配置

时间:2019-07-19 20:50:08

标签: angular azure-active-directory

我正在使用MSAL,这是我的角度项目的Microsoft身份验证库。在我的app.module.ts中,我在import部分中添加了msalModule,如下所示:

这在编码和确定如何使其在开发过程中正常工作时很好,但是我需要将redirectUripostLogoutRediectUriclientID之类的变量动态设置为生产环境。我尝试使用类似这样的对象:

Object.getClientID()Object.getRedirectUri(),但是我收到一个错误,指出装饰器中不允许使用功能。

在调用app.module.ts之前,是否可以设置静态变量?还是有另一种方式为MSAL动态加载正确的环境变量?

谢谢

salModule.forRoot({

  clientID: "<my-client-id>",

  authority: "https://tenant.b2clogin.com/tfp/tenant.onmicrosoft.com/B2C_1_Signin",

  redirectUri: "http://localhost:4200/dashboard",

  /* default is true */
  validateAuthority: false, 


  cacheLocation : "localStorage", 

  postLogoutRedirectUri: "http://localhost:4200/", 


  popUp: false,            
})

1 个答案:

答案 0 :(得分:0)

我认为您面临的问题与异步提供程序https://github.com/angular/angular/issues/23279

有关

我在使用MSAL时遇到了同样的问题,我的解决方法是禁用aot并使用全局范围,这不是一个优雅的解决方案,但是它可以工作(我希望我记得所有步骤):

  1. 在HTML页面头部内,使用<script src="assets/conf/config.js"></script>加载自定义js,该文件的内容应类似于以下内容:window.MY_CONF = { MY_VAR:'my var value here' };

  2. angular.json文件中的配置中
  3. 将aot设置为false

  4. 在您的角度模块中,使用MsalModule.forRoot(window['MY_CONF'].MY_VAR)

  5. 导入MSAL

现在,您可以在启动构建任务之前替换config.js并获得与环境有关的MSAL配置。

注意:这篇文章Angular load external configuration before AppModule loads使用useFactory功能在角度上实现了相同的结果,但是AFAIK Msal lib不支持该功能。这里有一个特定的github问题,您可能需要检查一下:https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/481