使用https協議進行通信的時候能夠設置雙向證書認證,客戶端驗證服務端證書的方法前面已經介紹過了,如今說一下在服務端驗證客戶端證書的方案。對象
這裏給出的方案比較簡單,只須要在Service端的配置文件中配置好Client端的證書的Thumbprint(一個或者多個),姑且稱之爲證書白名單。當有Client端的Http請求的時候,blog
只須要使用HttpRequestMessage的擴展方法GetClientCertificate()方法獲取該請求所攜帶的證書,並驗證該證書的Thumbprint是否包含在配置文件的白名單中,若是不包含在白名單中,it
在攔截該請求,並報401(未受權)錯誤便可;不然,繼續執行該請求。io
注意:class
GetClientCertificate()方法是HttpRequestmessage對象的擴展方法,該方法定義在System.Net.Http命名空間下的HttpRequestMessageExtensions類中。該方法返回的是一個X509Certificate對象。cli
客戶端攜帶證書發出請求:擴展
var clientCertificate = ...;//獲取本地證書對象
using (WebRequestHandler handler = new WebRequestHandler()) { handler.ClientCertificates.Add(clientCertificate); using (HttpClient httpClient = new HttpClient(handler)) { var request = new HttpRequestMessage(method: httpMethod, requestUri: requestUri); if (requestContent != null) { request.Content = requestContent; } return await httpClient.SendAsync(request); } }