2017-08-11 66 views
0

我面臨的一個問題是,當使用Azure API管理服務使用客戶端證書身份驗證時,我無法看到客戶端證書傳遞到後端。Azure API管理服務不會將標頭中的客戶端證書傳遞到後端

我已經創建了一個https後端,用於驗證證書並將日誌記錄查看標題和值。

在我的API管理網關,我有以下我的API

<policies> 
 
    <inbound> 
 
     <base/> 
 
     <authentication-certificate thumbprint="AB4495609DEEE612E9DF25CBC9EB4D7064D6EA97"/> 
 
    </inbound> 
 
    <backend> 
 
     <forward-request/> 
 
    </backend> 
 
    <outbound> 
 
     <base/> 
 
    </outbound> 
 
    <on-error> 
 
     <base/> 
 
    </on-error> 
 
</policies>

中的「所有操作」應用在API調用的政策我有策略定義

以下
<policies> 
<inbound> 
    <base/> 
</inbound> 
<backend> 
    <base/> 
</backend> 
<outbound> 
    <base/> 
</outbound> 

現在,當我做出了API的調用,我可以從我的後端,我得到了以下信息

2017年8月12日6點24分57秒AMOcp-APIM-訂閱密鑰看到:dbxxxx991a3b4b8aa19a4fxxxxxxx 8/12/2017 6:24:57 AMX-ARR-ClientCert標題丟失

如果我在API網關中添加該標題作爲策略,並設置證書的base 64編碼值,它可以正常工作。我想要使​​用配置的證書,而不是在標題中設置證書,如果我可以避免它。

我已經嘗試設置http以及https後端。兩者似乎都給出了相同的結果。

只是一些額外的信息,我的後端是一個運行在docker容器(託管在azure ubuntu機器中)的aspnet核心Web API項目。我嘗試通過在頭中傳入客戶端證書直接在沒有API管理網關的情況下直接訪問URL,並且這種方式也沒有任何問題。

回答

1

當使用Microsoft ARR來執行SSL卸載時,會創建-ARR-ClientCert標頭。當API管理(APIM)使用客戶端證書對後端服務器進行身份驗證時,它將在TLS層提供客戶端證書來執行此操作。這意味着對後端的調用需要使用HTTPS。 APIM不會發送ARR頭,因爲它根本不提供任何安全性。任何人都可以僞造該標題。

我不確定您的後端在抱怨直接提供證書時未收到ARR標題。通常,其中一個或另一個應該足夠用於ASP.NET Web API安全管道。

+0

感謝Darrel,現在有道理。我一直試圖從後臺讀取證書,但沒有多少運氣。也許我需要繼續挖掘以瞭解如何在ASPNET Core中驗證此證書。我所使用的所有示例似乎只是驗證Web層的證書 – Srini

+0

@Srini它看起來像您的ASP.NET Core應用程序正在做這樣的事情https://github.com/kaevans/ClientCertDemo/blob/master/ src/ClientCertWeb/ClientCertificateMiddleware.cs,它依賴於在啓用了ARR的IIS中託管。我不確定Kestrel是否具有相同的功能。 –

+0

@Srini看起來像是有可能https://stackoverflow.com/questions/38665934/asp-net-core-kestrel-server-ssl-client-certificate-only-for-specific-routes-or-c –

相關問題