在 web.config C# 中配置 Rest API 客户端
Posted
技术标签:
【中文标题】在 web.config C# 中配置 Rest API 客户端【英文标题】:Rest API Client configuration in web.config C# 【发布时间】:2017-04-17 08:48:13 【问题描述】:我需要在 REST API 客户端中使用 Https 相互身份验证,因为我们只能获取 URI,我们无法像为 WCF 那样添加客户端证书。 所以我在我的 web .config 中添加了如下密钥:
<appSettings>
<add key="URI" value="https://localhost:8080/RestfulAPI/RestfulService.svc/restfulData" />
<add key="CertificateValue" value="certficatename"/>
<add key="CertificateLocation" value="LocalMachine"/>
<add key="CertificateStoreName" value="My"/>
<add key="CertificateFindType" value="FindBySubjectName"/>
</appSettings>
我在我的客户端代码中使用它,如下所示:
X509Store store = new X509Store(ConfigurationManager.AppSettings["CertificateStoreName"], ConfigurationManager.AppSettings["CertificateLocation"]);
store.Open(OpenFlags.ReadOnly);
X509CertificateCollection certificates = store.Certificates.Find(ConfigurationManager.AppSettings["CertificateFindType"], ConfigurationManager.AppSettings["CertificateValue"], true);
X509Certificate certificate = certificates[0];
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.ClientCertificates.Add(certificate);
HttpWebResponse response = request.GetResponse() as HttpWebResponse
这是在 REST API 客户端中实现相互身份验证的正确方法吗?
或者如果没有,请有人帮助我正确的方法?
【问题讨论】:
【参考方案1】:相互身份验证是一种安全功能,其中客户端进程 必须向服务器证明其身份,并且服务器必须证明其身份 在发送任何应用程序流量之前,向客户端提供身份 客户端到服务器的连接。
(source)
这有时也称为 2-way SSL 身份验证。
你正在做的事情表明了实现这一目标的正确意图,因为:
-
您在创建请求时添加客户端证书
您使用 HTTPS 与服务器通信
我唯一的建议是(如果这是一个严格的要求)通过以下方式执行此过程:
-
确保在未找到客户端证书时不发出请求
提供
ServerCertificateValidationCallback
方法,您可以在其中添加自定义验证(或执行策略)验证服务器证书时
使用 X509Certificate2
和 X509Certificate2Collection
类代替 (see here why)
【讨论】:
嘿,谢谢@AlinG 我还需要配置证书详细信息,除了我在上面的帖子中提到的方法之外,还有其他方法吗? app.config 和查询证书存储是一种方法,因为这是一个客户端应用程序,您可能还希望添加对从文件加载证书的支持;为此,您可以使用X509Certificate2 Ctor 并可选择允许他们提供密码来访问证书(这样用户就不需要安装证书)。以上是关于在 web.config C# 中配置 Rest API 客户端的主要内容,如果未能解决你的问题,请参考以下文章
C#远程连接MySQL,配置文件Web.config如何写连接字符串?