Pergunta

Eu tenho um serviço WebHttpBinding que usa o modo de autenticação HTTP básico, no entanto, por algum motivo estranho, ele valida o nome de usuário/senha fornecido em contas do Windows, embora eu tenha especificado userNamePasswordValidationMode = "MembershipProvider".

Encontrei outros posts que relatam esse problema também, mas nenhuma resposta para essa situação foi dada.

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="WebBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="EPWeb">
          <webHttp helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlProvider" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="Foo">
        <endpoint address="Test" behaviorConfiguration="EPWeb"
            binding="webHttpBinding" bindingConfiguration="WebBinding"
            contract="Foo.IService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:3456/" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
Foi útil?

Solução

Esta configuração não funcionará.Mas existem soluções alternativas para esse problema:

  • Crie o método Login() e use o token de autenticação, que você passa para cada método de serviço.
  • Use o modo de validação personalizado e valide nome de usuário\senha por código, usando Membership.ValidateUser()

Outras dicas

O token passou no login ou em um módulo de autenticação http personalizado.

Aqui está um link para um módulo de autenticação personalizado. http://custombasicauth.codeplex.com/

Para base em token, você pode usar uma implementação OAuth.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top