Angular运行时配置不适用于用户管理器创建(OIDC客户端)

时间:2019-02-21 19:40:32

标签: angular identityserver4 oidc

我不是专家,但是我需要解决这个问题,以便任何帮助。

我们已经构建了一个角度应用程序(使用角度版本7.x)。由于此应用程序将在全球范围内部署,因此我选择不对环境变量使用environment.X.ts,因为我必须多次构建该应用程序才能发布。取而代之的是,我找到了一篇文章,该文章解释了如何通过JSON文件设置“运行时”配置,该应用程序在用户设备上下载后便会下载。

今天,我们开始集成oidc客户端,但遇到了麻烦。当我们尝试访问运行时配置以设置用户管理器设置时,我们收到数据为空的错误。这让我们感到很奇怪,因为我们正在将该AppConfigureService注入其他部分而没有问题。有人用使用动态加载配置的oidc客户端设置了角度应用程序吗?

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

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;
}

auth.service.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'
  };
}

0 个答案:

没有答案