当我尝试调用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>
我收到同样的错误消息,结果是由于我的工作站机器和托管WCF服务的服务器之间的时间差异。服务器在我的机器后面大约10分钟,WCF安全性似乎不太喜欢。
为了找到根问题,我在服务器的配置文件中打开了serviceSecurityAuditing。将以下内容添加到服务的configuration / system.serviceModel / behavior / serviceBehaviors / behavior部分:
<serviceSecurityAudit
auditLogLocation="Application"
serviceAuthorizationAuditLevel="Failure"
messageAuthenticationAuditLevel="Failure"
suppressAuditFailure="true"/>
以下网站有助于解决这个问题:
此消息的另一个原因是您的某些计算机未及时同步。默认情况下,WCF允许五分钟的差距;除此之外,如果事情不同步,它会抛出错误。
解决方案是同步所有机器。 time.windows.com
因不工作而臭名昭着,所以我建议使用别的东西。 (如果您在公司环境中,本地域控制器可能是正确的选择。)
这最终成为消费方面的问题,而不是服务本身。 Software AG的webMethods 8正在使用此服务器,但没有向服务添加安全处理程序,因此凭据未添加到标头中,从而导致上述错误。
我在IIS 7.5服务器上遇到了同样的错误。我忘了将证书私钥的读取权限添加到app pool virtual account(例如IIS AppPool \ ASP.NET v4.0)。
有关信息,在测试帐户和权限的各种组合时,我注意到,一旦检索到应用程序池,就需要回收它以失去对密钥的访问权限。
(0x80131501 - 验证邮件的安全性时发生错误。)
我得到了同样的错误,上面没有任何帮助。
我最终在父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
我得到了同样的错误。我忘了将成员资格数据库aspnetdb的读取权限添加到(IIS APPPOOL \ DefaultAppPool)。
邮件验证失败。服务:....
行动:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
CLIENTIDENTITY:
ActivityId:
SqlException:无法打开登录请求的数据库“aspnetdb”。登录失败。
用户'IIS APPPOOL \ DefaultAppPool'登录失败。
我有一个类似的问题。我使用当地时间构建我的日期时间格式化字符串,但我的服务/服务器期待GMT。
我需要获得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));
用户名和密码是您连接的服务器,而不是您的系统登录用户名和密码。