簡體   English   中英

JHipster:在向微服務進行API調用時接收401 Unauthorized

[英]JHipster: Receive 401 Unauthorized when making API call to microservice

我目前正在使用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());
    }
}

解決了:

有兩件事給我帶來了問題。 需要注意的是,它們與JHipster沒有直接聯系,而是與Jhipster集成的問題:

問題:

  1. Axon 3
  2. 具有延遲加載模塊的自定義Angular 4前端。

解決方案:

    • 我將axon 3包含在產品微服務中,作為軸突配置的一部分,它初始化了一個令牌存儲(與安全性無關)。
    • MicroserviceSecurityConfiguration中的tokenStore bean(其類型為JwtTokenStore)被重寫為InMemoryTokenStore。
    • 解決方案是將MicroserviceSecurityConfiguration中的tokenStore bean重命名為jwtTokenStore。
    • 我有一些延遲加載的模塊。 根據這種情況下的文檔,有一個SharedServiceModule使用forRoot()並在AppModule中導入。
    • 但是,當我有一個在ProductModule中導入的服務.eg ProductService時,它覆蓋了在SharedServiceModule中導入的Http Factory(在AppModule中導入Http Factory時的行為相同)。
    • 解決方案是創建一個HttpProviderService,它與customHttpProvider函數(在SharedServiceModule中)提供相同的級別。 然后,它為應用程序中較低級別的所有其他服務管理Http。 SharedServiceModule HttpProviderService

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM