Pergunta

Eu tenho um serviço WCF que será necessário para receber credenciais do cliente, e manter algum tipo de dados com base na função, com base no meu método de autenticação.

Os clientes irão residir em muitos sistemas diferentes e, como tal, cada cliente terá um userID única e PW.

Eu estou usando basicHttpBinding e ter lido alguns artigos, como este, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/ , que descrevem o processo.

Então o que eu estou procurando é se alguém tem um cliente / servidor completo configurado como este para dar uma olhada para que eu possa derivar minha própria solução com isso.

O que eu gostaria de fazer é ter o nome de usuário e senha passou nos cabeçalhos para cada pedido, devolvendo algum tipo de SecurityTokenValidationException em falhar, ou continuar se passando.

Graças.

Atualizar

Eu estou usando o WSHttpBinding com a seguinte configuração no cliente e servidor:

  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding" >
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>

E a chamada para o servidor do cliente da seguinte forma:

ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();

myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";

Response.Write("Data from WCF Service: " + myClient.GetData(1));

Eu acho que preciso de um pouco de uma mão com ligando-se a CustomUsernamePasswordValidator no servidor como eu ainda estou recebendo o '... não pôde ser ativado.' erro.

Foi útil?

Solução

Você é obrigado a usar o basicHttpBinding? Que a ligação é realmente apenas para fornecer suporte para implementações legado WS-BasicProfile (ou seja ASMX). Se seus clientes são também .NET / WCF, eu recomendo usar wsHttpBinding, que oferece uma infinidade de opções de segurança para fora da caixa. Você pode usar certificados, nome de usuário / senha, etc, com transporte e / ou a segurança da mensagem e não precisa escrever qualquer uma das coisas de segurança mesmo. Apenas configure-and-go (CAG).

Segurança informações de credencial está disponível para o serviço em si através da OperationContext, no caso de você precisar acessá-lo diretamente do seu código. Se o seu código faz necessidade de acessá-lo, no entanto, eu recomendaria escrevendo um comportamento para extrair as informações pertinentes do OperationContext e colocá-lo em algo mais específico do aplicativo para que você não tem de fazer referência System.ServiceModel em todos os lugares que você precisa para o acesso informações sobre OperationContext.

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