在 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 方法,您可以在其中添加自定义验证(或执行策略)验证服务器证书时 使用 X509Certificate2X509Certificate2Collection 类代替 (see here why)

【讨论】:

嘿,谢谢@AlinG 我还需要配置证书详细信息,除了我在上面的帖子中提到的方法之外,还有其他方法吗? app.config 和查询证书存储是一种方法,因为这是一个客户端应用程序,您可能还希望添加对从文件加载证书的支持;为此,您可以使用X509Certificate2 Ctor 并可选择允许他们提供密码来访问证书(这样用户就不需要安装证书)。

以上是关于在 web.config C# 中配置 Rest API 客户端的主要内容,如果未能解决你的问题,请参考以下文章

C#远程连接MySQL,配置文件Web.config如何写连接字符串?

C#项目 App.config 配置文件不同使用环境配置

C#连接数据库的新方法(通过web.config配置文件)

在 WCF REST Web 服务上启用 HTTPS

C# IIS7.0+ Web.Config 配置Session过期时间

从Web.Config获取多个connectionStrings到字典c#没有循环