验证邮件的安全性时发生错误

时间:2010-09-21 23:26:15

标签: wcf web-config wcf-binding servicebehavior

当我尝试调用WCF服务时,我收到以下消息“验证邮件的安全性时发生错误。”

当我删除自定义身份验证时,该服务没有问题。虽然我在web.config中配置错误,但我无法弄清楚。任何见解都将不胜感激。

  <system.serviceModel>
     <services>
        <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
          name="NAThriveExtensions.nableAPI">
           <endpoint 
             address="" 
             binding="basicHttpBinding" 
             bindingConfiguration="basicHttpBinding_Secure"
             contract="NAThriveExtensions.InableAPI">
           </endpoint>
           <endpoint 
             address="mex" 
             binding="mexHttpsBinding" 
             contract="IMetadataExchange" />
        </service>
     </services>
     <behaviors>
        <serviceBehaviors>
          <behavior name="NAThriveExtensions.nableAPIBehavior">
            <serviceMetadata httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
            <serviceCredentials>
              <userNameAuthentication 
                userNamePasswordValidationMode="Custom" 
              customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
     </behaviors>
     <bindings>
       <basicHttpBinding>
         <binding name="basicHttpBinding_Secure">
           <security mode="TransportWithMessageCredential">
             <message clientCredentialType="UserName"/>
           </security>
         </binding>
       </basicHttpBinding>
     </bindings>
  </system.serviceModel>

8 个答案:

答案 0 :(得分:32)

我收到同样的错误消息,结果是由于我的工作站机器和托管WCF服务的服务器之间存在时间差异。服务器在我的机器后面大约10分钟,WCF安全性似乎不太喜欢。

要查找根问题,我在服务器的配置文件中打开了 serviceSecurityAuditing 。将以下内容添加到您的服务的configuration / system.serviceModel / behavior / serviceBehaviors / behavior部分:

<serviceSecurityAudit 
    auditLogLocation="Application" 
    serviceAuthorizationAuditLevel="Failure" 
    messageAuthenticationAuditLevel="Failure" 
    suppressAuditFailure="true"/>

以下网站有助于解决这个问题:

http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

答案 1 :(得分:17)

此消息的另一个原因是您的某些计算机未及时同步。默认情况下,WCF允许五分钟的差距;除此之外,如果事情不同步,它会抛出错误。

解决方案是同步所有机器。 time.windows.com因不工作而臭名昭着,所以我建议使用别的东西。 (如果您在公司环境中,本地域控制器可能是正确的选择。)

答案 2 :(得分:7)

这最终成为消费方面的问题,而不是服务本身。 Software AG的webMethods 8正在使用此服务器,但没有向服务添加安全处理程序,因此凭据未添加到标头中,从而导致上述错误。

答案 3 :(得分:0)

我的IIS 7.5服务器上出现了同样的错误。我忘了将证书私钥的读取权限添加到app pool virtual account(例如IIS AppPool \ ASP.NET v4.0)。

有关信息,在测试帐户和权限的各种组合时,我注意到应用程序池需要被回收,以便在检索到密钥后无法访问密钥。

(0x80131501 - 验证邮件的安全性时发生错误。)

答案 4 :(得分:0)

我遇到了同样的错误,上面没有任何帮助。

我最终将其跟踪到父web.config中的connectionStrings(我的服务已部署到子应用程序到管理站点)。

是的听起来很荒谬,但只要我在父web.config中包含连接字符串并且一个位置元素全部开始工作。

为清楚起见,在父web.config中,我更改了此

<connectionStrings>
    <add name="..." />
</connectionStrings>

到这个

<location path="." inheritInChildApplications="false">
    <connectionStrings>
        <add name="..." />
    </connectionStrings>
</location>

请注意,此错误还会导致这条非常无用的serviceSecurityAudit日志消息:

  

消息验证失败    服务:...
   行动:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
   CLIENTIDENTITY:
   ActivityId:
   ArgumentNullException:值不能为null   参数名称:manager

答案 5 :(得分:0)

我得到了同样的错误。我忘了将成员资格数据库aspnetdb的读取权限添加到(IIS APPPOOL \ DefaultAppPool)。

  

邮件身份验证失败。服务:....

     

行动:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

     

ClientIdentity:

     

ActivityId:

     

SqlException:无法打开数据库&#34; aspnetdb&#34;登录请求。登录失败。

     

用户&#IIS;登录失败   APPPOOL \默认应用&#39;

答案 6 :(得分:0)

我有一个类似的问题。 我正在使用本地时间构建日期时间格式的字符串,但是我的服务/服务器期望使用 GMT

我需要获取格林尼治标准时间(JAVA):

final Date currentTime = new Date();    
final SimpleDateFormat sdf = 
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(currentTime));

答案 7 :(得分:-4)

  

用户名和密码您连接的服务器,而不是您的   系统登录用户名和密码。