WCF - The HTTP request is unauthorized with client authentic
От: RendeRR Россия nothing
Дата: 18.12.09 23:58
Оценка:
Сервер:
    <system.serviceModel>
        <services>
            <service name="Service" behaviorConfiguration="md">
                <!-- Service Endpoints -->
                <endpoint address="SslService" binding="basicHttpBinding" bindingConfiguration="security" contract="IService"/>
                <host>
                    <baseAddresses>
                        <add baseAddress="https://pc:8080/Service.svc"/>
                    </baseAddresses>
                </host>
            </service>
        </services>
        <bindings>
            <basicHttpBinding>
                <binding name="security">
                    <security mode="Transport">
                        <transport clientCredentialType="Basic"/>
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="md">
          <serviceCredentials>
            <userNameAuthentication
              userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="ClassLibrary1.CustomUserNameValidator, ClassLibrary1" />
          </serviceCredentials>
                    <serviceMetadata httpsGetEnabled="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>


ClassLibrary1.CustomUserNameValidato — что то типа:
namespace ClassLibrary1

{
    public class CustomUserNameValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if (userName != "111" || password != "111")
            {
                
                throw new System.ServiceModel.FaultException("Unknown username or incorrect password");
            }
        }
    }
}



Клиент:

    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="">
                            <extendedProtectionPolicy policyEnforcement="Never" />
                        </transport>
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://pc:8080/Service.svc/SslService" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService"
                name="BasicHttpBinding_IService" />
        </client>
    </system.serviceModel>

Собственно, цель всего этого: соединиться по HttpS а авторизоваться по произвольному логину паролю.
При:

            ServiceReference1.ServiceClient s = new WindowsFormsApplication1.ServiceReference1.ServiceClient();
            
            s.ClientCredentials.UserName.UserName = "111";
            s.ClientCredentials.UserName.UserName = "111";
            MessageBox.Show(s.GetData(3)); // <---- при вызове

Такая ошибка:

The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was 'Basic realm="pc"'.

Не знаешь как правильно – делай, как знаешь…
wcf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.