[英]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.