我面臨的一個問題是,當使用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,並且這種方式也沒有任何問題。
感謝Darrel,現在有道理。我一直試圖從後臺讀取證書,但沒有多少運氣。也許我需要繼續挖掘以瞭解如何在ASPNET Core中驗證此證書。我所使用的所有示例似乎只是驗證Web層的證書 – Srini
@Srini它看起來像您的ASP.NET Core應用程序正在做這樣的事情https://github.com/kaevans/ClientCertDemo/blob/master/ src/ClientCertWeb/ClientCertificateMiddleware.cs,它依賴於在啓用了ARR的IIS中託管。我不確定Kestrel是否具有相同的功能。 –
@Srini看起來像是有可能https://stackoverflow.com/questions/38665934/asp-net-core-kestrel-server-ssl-client-certificate-only-for-specific-routes-or-c –