Authentication 403.7禁止在Owin自托管Web API 2中使用客户端证书身份验证
长期读者,第一次海报 目标: 我们希望创建一个Owin自托管Web API 2服务,该服务专门使用客户端证书进行身份验证。出于开发目的,数据服务层将与客户端层在同一台计算机上运行 环境/配置:Authentication 403.7禁止在Owin自托管Web API 2中使用客户端证书身份验证,authentication,ssl,asp.net-web-api,client-certificates,owin,Authentication,Ssl,Asp.net Web Api,Client Certificates,Owin,长期读者,第一次海报 目标: 我们希望创建一个Owin自托管Web API 2服务,该服务专门使用客户端证书进行身份验证。出于开发目的,数据服务层将与客户端层在同一台计算机上运行 环境/配置: 已创建Web API 2数据服务。 这项服务并不复杂。它确实使用DelegatingHandler来验证客户端证书。 Web API 2服务已通过四种不同的方式“部署” 情节: IIS快车 此部署模式已正确配置。正在使用SSL证书,安全设置为。 非法移民 此模式还正确配置了SSL证书,并且需
- 已创建Web API 2数据服务。
这项服务并不复杂。它确实使用DelegatingHandler来验证客户端证书。 - Web API 2服务已通过四种不同的方式“部署”
情节:
- IIS快车
此部署模式已正确配置。正在使用SSL证书,安全设置为
。 - 非法移民
此模式还正确配置了SSL证书,并且需要通过IIS管理器设置客户端证书。 - “传统”Web API 2自托管控制台应用程序
SSL证书已通过设置为“clientcertnegotiation=true”的netsh正确绑定到端口。
配置已将ClientCredentialType设置为Certificate。 - OWIN Web API 2自托管控制台应用程序
SSL证书已通过netsh正确绑定到端口,设置为
。clientcertnegotiation=true
- IIS快车
- 客户端应用程序是一个WPF应用程序。
对于服务调用,我们使用的是HTTPClient。
操作顺序如下:
WebRequestHandler=newwebrequesthandler(); handler.ClientCertificateOptions=ClientCertificateOptions.Manual; handler.ClientCertificates.Add(MyCertificates.OfType).FirstOrDefault(cert=>cert.Thumbprint==SelectedCertificateThumbprint)作为X509Certificate2); handler.UseDefaultCredentials=true; HttpClient=新的HttpClient(处理程序); client.BaseAddress=SetServiceBaseAddress(客户端); var results=client.PostAsync(,mediaTypeFormatter).Result;
- 使用Fiddler代理IIS Express和IIS托管数据时
服务:
- 由于SSL的名称不匹配,Fiddler将提示一个证书警告(我们尚未关闭此功能或为localhost.Fiddler生成一个)
- Fiddler将提示“请求使用密钥的权限”。我们认为,这是一个基于Fiddler目录中存储的证书(.cer)访问当前用户\个人存储中存储的.pfx的请求,以便Fiddler使用适当的私钥对请求进行签名
- 输入正确的密码后,请求成功。
- 使用Fiddler代理Owin或“传统”自托管数据服务时:
- 由于SSL的名称不匹配,Fiddler将提示一个证书警告(我们尚未关闭此功能或为localhost.Fiddler生成一个)李>
- 立即收到403.7-禁止。
- 使用所有四种主机模型而不使用Fiddler代理时:
- 收到成功的响应李>
我正忙于一个类似的问题,我想我偶尔也能找到你第二个问题的答案 这完全是关于如何使用netsh工具将服务器证书绑定到端口 将clientnegotiation参数设置为enabled时,如下所示:
netsh http add sslcert ipport=0.0.0.0:443 certhash=<cert_thumbprint> appid={some_guid} clientcertnegotiation=enable
netsh http add sslcert ipport=0.0.0:443 certhash=appid={some_guid}clientcertnegotiation=enable
,OWIN主机开始要求客户端提供某种类型的客户端证书(可以是任何类型的证书)
将该参数设置为禁用或忽略它时,OWIN主机不需要客户端提供任何信息
netsh http add sslcert ipport=0.0.0.0:443 certhash=<cert_thumbprint> appid={some_guid} clientcertnegotiation=enable