可能有时只应用TransportWithMessageCredential吗?

时间:2017-05-18 13:36:43

标签: c# wcf

我有一个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时的方法,如果是,我应该在哪里实现这个?

0 个答案:

没有答案