簡體   English   中英

使用來自另一個Web API的客戶端證書調用Web API

[英]Calling web api with client certificate from another web api

場景:angularjs客戶端與WebApi交談,稱為“網關”。 “網關”就像一個外觀或代理,因此所有來自用戶對“網關”的請求都將轉發到另一個WebApis。

安全性詳細信息:“網關” WebApi和所有其他WebApis通過HTTPS綁定放置在IIS中,並且SSL客戶端證書選項為“接受”。 因此,用戶將向IIS提供有效的客戶端證書,並且在驗證之后,請求將由WebApi處理。

問題:當“網關” WebApi收到請求時,客戶端證書會顯示在“請求”對象中。 然后,我只是使用HttpClient將此請求轉發到另一個WebApi。 但是,當另一個WebApi終結點接收到請求時,便不再附加客戶端證書。

下面是請求轉發的代碼片段:

var request = Request; // income request from angularjs

var handler = new WebRequestHandler();
handler.ClientCertificates.Add(request.GetClientCertificate()); // setting up client certificate from user's request
using (var httpClient = new HttpClient(handler))
{
    request.RequestUri = *chaning request address here*;
    var response = await httpClient.SendAsync(request);
    return ResponseMessage(response);
}

注意:如果我嘗試直接轉到另一個WebApi,則會按預期顯示客戶端證書。 如果我嘗試通過“網關”訪問,則在“網關”請求中也會顯示客戶端證書,但是在成功附加並發送請求之后,另一個WebApi不會收到任何附加證書。

有任何想法嗎? 謝謝。

在網關服務器上,您需要將身份驗證密鑰導入“計算機”證書存儲中(MMC.exe,添加管理單元“證書”,“計算機帳戶”,Certficates-個人證書,導入)。
將權限(用於身份驗證證書)授予您的IIS池所使用的帳戶。 (右鍵單擊證書,所有任務,管理私鑰。添加,高級,位置= [計算機名稱],立即查找,(可能)網絡服務,已讀)。

在您的web.config(在網關服務器上)中,檢查system.serviceModel / behaviors / endpointBehaviors / behavior / clientCredentials / clientCertificate 確保屬性: storeLoction =“ LocalMachine”,以使用計算機密鑰庫中的證書。

暫無
暫無

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

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