从WebApi调用WCF服务会引发MessageSecurityException

eXavier

我使用第三方客户端库,该客户端库使用WCF与服务器(在云中的某个地方)进行内部通信(我只能配置一些键/值设置,该库在其代码内创建了所有WCF客户端代理堆栈)。

如果我在WinForms或控制台应用程序中使用该库,则它可以很好地工作,但是从WebApi内调用该库API会导致错误:

An exception of type 'System.ServiceModel.Security.MessageSecurityException' occurred in mscorlib.dll but was not handled in user code

Additional information: The Identity check failed for the outgoing message. 
The remote endpoint did not provide a domain name system (DNS) claim and therefore did not satisfied DNS identity 'serverName'. 
This may be caused by lack of DNS or CN name in the remote endpoint X.509 certificate's distinguished name.

为什么有区别?服务器端是相同的,这是否意味着在WinForms应用程序中运行时不执行身份检查?还是在WebApi中运行时身份验证的执行方式有所不同?我该如何解决?

我从VS2015内部运行代码,WebApi托管在IISExpress中。该库NetTcpBindingTransportWithMessageCredential和一起使用MessageCredentialType.UserName

杰弗·博拉克(Jf Beaulac)

尝试将其添加到您的app.config文件中

<configuration>
    <runtime>
        <AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true" />
    </runtime>
</configuration>

从MSDN:

从针对.NET Framework 4.6.1的应用程序开始,X509CertificateClaimSet.FindClaims方法将尝试将ClaimType参数与其SAN字段中的所有DNS完整匹配。影响

此更改仅影响面向.NET Framework 4.6.1的应用程序。

对于面向.NET Framework早期版本的应用程序,X509CertificateClaimSet.FindClaims方法尝试仅将ClaimType参数与最后一个DNS条目进行匹配。减轻

如果不希望进行此更改,则针对.NET Framework 4.6.1的应用程序可以通过在应用程序配置文件的部分中添加以下配置设置来选择退出:

https://msdn.microsoft.com/zh-CN/library/mt620030%28v=vs.110%29.aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章