JHipster:在向微服务进行API调用时接收401 Unauthorized

Mic*_*elS 6 lazy-loading axon angular

我目前正在使用Jhipster生成以下组件:

  • UAA - Auth服务器
  • API网关
  • 微服务 - 产品1
  • 服务发现 - 领事

其他组件:

  • 自定义前端(Angular 4) - 在一个单独的项目中

另外需要注意的是,自定义前端使用的是Jhipster angular 4代码,可以在vanilla Jhipster Api Gateway中找到.这包括customHttpProvider.

所包含的课程如下图所示: 在此输入图像描述

目前我能够使用此设置成功登录并在UAA上调用API,但是,当我尝试在产品上调用任何APIS时,我会获得401 Unauthorized,例如Post to Product1/api/zcd.

Consul中的服务都是可见的和绿色的,Gateway也有UAA和Product1作为注册和可用路线.

在此输入图像描述

到目前为止,我发现当我对Product进行api调用时,似乎没有调用AuthInterceptor.我尝试手动将jwt令牌附加到方法,这解决了问题,但我不明白为什么customHttpProvider不被用于拦截请求和附加令牌.

如下所示,当我手动插入令牌时,我的ProductService工作正常,但这显然不是正确的方法.

@Injectable()
export class ProductService {

    private options = new Headers();

    constructor(private http: Http) {
        this.options.append('Authorization', 'Bearer ' + 'token is inserted here');
    }

    priceProduct(productPriceRequest: productPriceRequest): Observable<IdResponse> {
        return this.http.post('Product1/api/zcd', productPriceRequest, { headers: this.options })
            .map(response => response.json());
    }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*elS 2

解决了:

有两件事给我带来了问题。需要注意的是,它们与 JHipster 没有直接关联,而是与 Jhipster 集成时发生的问题:

问题:

  1. 轴突3
  2. 具有延迟加载模块的自定义 Angular 4 前端。

解决方案:

    • 我已将 axon 3 包含到产品微服务中,作为 axon 配置的一部分,它初始化一个令牌存储(与安全性无关)。
    • MicroserviceSecurityConfiguration 中本来属于 JwtTokenStore 类型的 tokenStore bean 被重写为 InMemoryTokenStore。
    • 解决方案是将 MicroserviceSecurityConfiguration 中的 tokenStore bean 重命名为 jwtTokenStore。
    • 我有许多延迟加载的模块。根据这种情况下的文档,有一个 SharedServiceModule 使用 forRoot() 并在 AppModule 中导入。
    • 但是,当我在 ProductModule 中导入服务 .eg ProductService 时,它​​会覆盖在 SharedServiceModule 中导入的 Http Factory(在 AppModule 中导入 Http Factory 时的行为相同)。
    • 解决方案是创建一个与 customHttpProvider 函数(在 SharedServiceModule 中)同一级别提供的 HttpProviderService。然后,这将管理应用程序中较低级别的所有其他服务的 Http。 共享服务模块 HttpProvider服务