Angular 角度运行时配置不与用户管理器创建一起使用(oidc客户端)

Angular 角度运行时配置不与用户管理器创建一起使用(oidc客户端),angular,identityserver4,openid-connect,Angular,Identityserver4,Openid Connect,我不是一个棱角分明的专家,但我需要解决这个问题,所以任何帮助都将不胜感激 我们已经建立了一个angular应用程序(使用angular 7.x版)。由于此应用程序将在全球部署,我选择不对我们的环境变量使用environment.X.ts,因为我必须多次构建该应用程序才能发布。相反,我发现一篇文章解释了如何通过JSON文件设置“运行时”配置,该文件将在应用程序安装到用户设备上后下载 今天,我们开始集成oidc客户端,但遇到了一个奇怪的问题。当我们尝试访问运行时配置以设置用户管理器设置时,我们会收到

我不是一个棱角分明的专家,但我需要解决这个问题,所以任何帮助都将不胜感激

我们已经建立了一个angular应用程序(使用angular 7.x版)。由于此应用程序将在全球部署,我选择不对我们的环境变量使用environment.X.ts,因为我必须多次构建该应用程序才能发布。相反,我发现一篇文章解释了如何通过JSON文件设置“运行时”配置,该文件将在应用程序安装到用户设备上后下载

今天,我们开始集成oidc客户端,但遇到了一个奇怪的问题。当我们尝试访问运行时配置以设置用户管理器设置时,我们会收到数据为空的错误。这让我们感到奇怪,因为我们正在将这个AppConfigureService毫无问题地注入其他部分。是否有人使用oidc客户端设置了angular应用程序,该客户端使用动态加载的配置

下面是我们目前正在使用的一些代码

app config.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AppConfigService {
  private appConfig;

  constructor(private http: HttpClient) { }

  loadAppConfig() {
    return this.http.get('/assets/config/appConfig.json')
      .toPromise()
      .then(data => {
        this.appConfig = data;
      });
  }

  getConfig() : AppConfig {
    return this.appConfig;
  }
}

export class AppConfig {
  auth_authority: string;
  auth_redirect_uri: string;
  auth_post_logout_redirect_uri: string;
  oc_api_url: string;
  comm_api_url: string;
}
验证服务.ts
为了节省空间,省略了一些代码

import { Injectable } from '@angular/core';

import { UserManager, UserManagerSettings, User } from 'oidc-client';
import { fail } from 'assert';

import { AppConfigService, AppConfig } from '../services/app-config.service';
import { environment } from '../environments/environment';
import { debug } from 'util';

@Injectable()
export class AuthService {
  private appConfigService: AppConfigService = null;
  private manager: UserManager = null;
  private user: User = null;

  constructor(private appConfig: AppConfigService) {
    this.appConfigService = appConfig;
    this.appConfigService.loadAppConfig()
    .then(()=>{
      this.manager = new UserManager(getClientSettings(this.appConfigService.getConfig()))
      this.manager.getUser().then(user => {
        this.user = user;
      });
    });
.
.
.
  }
.
.
.
}

export function getClientSettings(appConfig: AppConfig): UserManagerSettings {
  return {
    authority: appConfig.auth_authority,
    client_id: environment.auth_client_id,
    redirect_uri: appConfig.auth_redirect_uri,
    post_logout_redirect_uri: appConfig.auth_post_logout_redirect_uri,
    response_type: "id_token token",
    scope: environment.auth_scope,
    filterProtocolClaims: true,
    loadUserInfo: true
    //automaticSilentRenew: true,
    //silent_redirect_uri: 'http://localhost:4200/silent-refresh.html'
  };
}