У меня есть простой веб-сервис, который размещен внутри консольного приложения. Это работает, с одной проблемой: аутентификация не работает должным образом.
Мой app.config выглядит следующим образом:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="NewBinding0">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="Mg">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="TSOWS.UserValidator,TSOWS" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />-->
<services >
<service name="TSOWS.TSOWS" behaviorConfiguration="Mg" >
<endpoint address="/MyAddress" binding="wsHttpBinding" contract="TSOWS.ITSOWS" />
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<host>
<baseAddresses >
<add baseAddress="http://10.120.170.181:8181/TSOWS.svc" />
</baseAddresses>
</host>
</service >
</services>
</system.serviceModel>
и мой валидатор:
public class UserValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (null == userName || null == password)
{
throw new ArgumentNullException();
}
if (!(userName == "TSOWSUser" && password == "password"))
{
throw new SecurityTokenException("Unknown Username or Password");
}
}
}
UserValidator.Validate никогда не вызывается, и веб-служба открыта, и нет необходимости указывать имя пользователя или пароль.
Есть идеи, почему это происходит?
Нужен ли мне сертификат сервера, чтобы можно было использовать аутентификацию?