WCF WebHttpBinding com autenticação de provedor de associação
-
15-11-2019 - |
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>
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