用户名和密码验证wcf

时间:2013-08-18 09:21:57

标签: wcf session service

“看起来容易”的任务不能由我自己完成。我有一个WCF服务,应该受用户名和密码凭证保护,并保持会话模式。

所以,这是激活函数接口的一部分。

<ServiceContract(SessionMode:=SessionMode.Required, ProtectionLevel:= ProtectionLevel.EncryptAndSign)>
Public Interface ServiceS

  <OperationContract()>
  Function Activation(A As String) As String

End Interface

背景课

Public Class Service1
Implements ServiceS

  Function Activation(A As String) As String Implement ServiceS.Activation
    Return "Hello, " & A & "!"
  End Function

End Class

接下来是web.config。

<services>
  <service name="MyServiceS.Service1" behaviorConfiguration="MyBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="MyServiceS.ServiceS" />
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="MyBinding" useDefaultWebProxy="false">
      <security mode="Message" />
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="MyBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

<protocolMapping>
  <add scheme="https" binding="wsHttpBinding"/> 
  <add scheme="http" binding="wsHttpBinding"/> 
</protocolMapping>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>

</system.serviceModel>

客户端代码。

Dim wcfTest As New MyService.ServiceSClient
wcfTest.ClientCredentials.Windows.ClientCredential.UserName = "Name"
wcfTest.ClientCredentials.Windows.ClientCredential.Password = "Password"
Dim Reply as String = wcfTest.Activation("Alex")

我期待什么?我需要我的WPF应用程序连接到我的服务并传递用户名和密码。如果它们是正确的,用户可以访问激活功能,如果没有 - 会话应该关闭。所以,我通过登录和密码服务,但不知道如何检查。它应该是接口或背景类的一部分吗?

我在互联网上看到了大量的例子,但大多数都是关于其他事情的。

  • 使用ASP的建议。我不需要ASP。这项服务应该是纯WCF。
  • 使用证书。我不需要任何证书。它应该只是用户名和密码验证。
  • 角色。不需要角色。只有用户名和密码验证。
  • basicHttpBinding的。不,只有wsHttpBinding。
  • .Net 3.5或4.5。针对.Net 3.5的许多解决方案。我使用4.0(过去使用4.5但是已经集成了新技术,几乎没有完整的例子)。

如果你知道如何只通过wsHttpBinding只检查用户名和密码来保持会话,只有WCF只有4.0,请提供建议。或者说,如果是这样的话,为什么不可能。多克斯很多!

1 个答案:

答案 0 :(得分:0)

您应该首先将客户端凭据类型设置为UserName,如下所示。

    <wsHttpBinding>
      <binding name="Binding1">
        <security mode="Message">
          <message clientCredentialType="UserName" />
        </security>
      </binding>        
    </wsHttpBinding>

然后,您可以实现自定义用户名&amp;密码验证器,如this文章和实施身份验证。