Pergunta

Alguns antecedentes: a fim de fornecer autenticação Estou usando certificados de cliente e do lado do servidor (WCF) e usar um certificado para todos os clientes (carregá-lo manualmente a partir do directório de aplicações - não a maneira mais segura, mas não necessita de gerir o armazenamento de certificados e tomada instalação mais difícil):

        AddressHeader hostHdr = AddressHeader.CreateAddressHeader(ServiceFactory.CLIENT_HOST_HEADER, ServiceFactory.NAMESPACE, hostName);
        builder.Headers.Add(hostHdr);
        builder.Identity = new X509CertificateEndpointIdentity(GetServiceCertificate(name));


        _factory = new ChannelFactory<T>(name, builder.ToEndpointAddress());
        _factory.Credentials.ClientCertificate.Certificate = GetClientCertificate(name);
        X509ServiceCertificateAuthentication auth = _factory.Credentials.ServiceCertificate.Authentication;

        auth.CertificateValidationMode =X509CertificateValidationMode.Custom;
        auth.CustomCertificateValidator = new CustomCertificateValidator(new[] {GetServiceCertificate(name)});

Esta é do lado do cliente, ea criação de olhares como este alojamento serverside:

private void CertificateSetup(ServiceHost host)
    {
        if (ServiceCertificate != null)
            host.Credentials.ServiceCertificate.Certificate = ServiceCertificate;

        X509ClientCertificateAuthentication authentication =
                        host.Credentials.ClientCertificate.Authentication;

        authentication.CertificateValidationMode =
            X509CertificateValidationMode.Custom;

        authentication.CustomCertificateValidator =
            new CustomCertificateValidator(new [] {ClientCertificate});
    }

Isso funciona bem e permite a assinar mensagens, mas, tanto quanto set modo de segurança no seguinte forma:

      <security mode="Message">            
        <message clientCredentialType="Certificate" />
      </security>

Mas eu preciso

string name = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;

de alguma forma obter WindowsIdentity em ServiceSecurityContext. modo de segurança Misto (Transportes e Mensagem) não é útil, porque eu não sei porquê, mas mesmo se eu definir ClientCredentials do Windows na configuração para transporte tentativas de infra-estrutura modo de parte para estabelecer a conexão SSL.

Todas as idéias ????


Os certificados são usados ??para assinatura de mensagens, i. provando que outro lado é ou verdadeiro cliente ou serviço (man-in-the-middle). Mas autorização no sistema que está sendo desenvolvido parcialmente depende WindowsIdentity em ServiceSecurityContect. Tudo que eu quero-incluem WindowsIdentity em sec.context, entretanto PrimaryIdentity é X509CertIdentity. Então eu preciso saber sobre serverside que usuário de domínio solicitado operação de serviço.

Foi útil?

Solução

Tente este link re: Representação:

http://msdn.microsoft.com/en-us/library /ms730088.aspx

seção sobre -. "Mapeando um certificado de cliente para uma conta do Windows", parece que você está depois

com configuração no cliente:

authentication mapClientCertificateToWindowsAccount="true" 

O código do cliente:

' Criar uma ligação que define um certificado como o tipo de credencial do cliente.

Dim b As WSHttpBinding = New WSHttpBinding()

b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate

' Criar um host de serviço que mapeia o certificado para uma conta do Windows.

Dim httpUri As Uri = New Uri("http://localhost/Calculator")

Dim sh As ServiceHost = New ServiceHost(GetType(HelloService), httpUri)

sh.Credentials.ClientCertificate.Authentication.MapClientCertificateToWindowsAccount = True

Espero que ajude

Outras dicas

Se você estiver usando segurança de mensagens com certificados em cada extremidade prendendo-o, eu não estou muito certo porque você precisaria de uma identidade do Windows? Qual é o raciocínio por trás disso?

Talvez este link vai ser de uso - seções 6 e 7 tem detalhes sobre as definições de configuração para authentiaction certificado, que funciona de forma semelhante ao SSL:

http://www.codeproject.com/KB/WCF/wcf_certificates.aspx

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