我有一个WCF服务,定义如下:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehaviour">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyNamespace.MyUserNamePasswordValidator, MyAssembly" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="MyNamespace.MyServiceAuthorizationManager, MyAssembly">
<authorizationPolicies>
<add policyType="MyNamespace.MyAuthorizationPolicy, MyAssembly" />
</authorizationPolicies>
</serviceAuthorization>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="MyServiceBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyNamespace.Service" behaviorConfiguration="MyServiceBehaviour">
<endpoint address="" contract="MyNamespace.Service" binding="basicHttpBinding" bindingConfiguration="MyServiceBinding" />
</service>
</services>
这使用TransportWithMessageCredential
要求每个服务操作请求都提供了用户名/密码组合。但是,只有一项操作,服务的用户需要能够在不提供凭据的情况下访问,并且我无法终身了解如何实现此功能。
我们有自定义的用户名和密码验证程序,以及自定义授权策略,但在凭据标头中未提供用户名或密码时,这些类上的所有方法都不会被触发;服务器立即返回错误500错误的文本&#34;验证消息的安全性时发生错误&#34;。
是否有可能拥有&#34;大多数但不是全部&#34;使用TransportWithMessageCredential
时的方法,如果是,我应该在哪里实现这个?