代码之家  ›  专栏  ›  技术社区  ›  David

每个端点的WCF不同身份验证方法

  •  1
  • David  · 技术社区  · 14 年前

    我有WCF服务。我的服务有两个端点,每个端点都有不同的联系人。服务使用自定义用户名身份验证(在下的customUsernamePasswordValidatorType属性中定义),问题是两个端点将使用相同的Anthentication方法。

    我是否可以为每个端点定义不同的驱虫方法?

    每个端点都由不同且只有一个应用程序访问。因此,如果我可以将应用程序名传递给身份验证方法,那么什么也可以工作。

    这是我的app.config

        <services>
          <service behaviorConfiguration="Behavior1" name="MyServer.Service">
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
            <endpoint address="" binding="netTcpBinding" bindingConfiguration="Binding1" contract="MyServer.IService" />
            <endpoint address="service2" binding="netTcpBinding" bindingConfiguration="Binding1" contract="MyServer.ISecondService" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:37100/" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="Behavior1">
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceMetadata />
              <serviceCredentials>
                <userNameAuthentication customUserNamePasswordValidatorType="MyServer.Authentication" userNamePasswordValidationMode="Custom" />
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    

    这是自定义身份验证方法。如果我能在某个地方传递第三个名为appname的参数,那也可以。

    public class Authentication : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
    
        }
    }
    

    谢谢

    2 回复  |  直到 14 年前
        1
  •  1
  •   David    14 年前

    看来除了分割服务没有别的办法了。我将通过将用户名作为“user@app”传递给服务器来破解它。

        2
  •  0
  •   DaveB    14 年前

    将您的服务拆分为单独的服务元素,然后您可以为每个元素创建一个行为。