Frage

Einige Hintergrundinformationen:  um die Authentifizierung zu schaffen, ich bin für alle Clients Zertifikate auf Client- und Serverseite (WCF) und verwenden ein Zertifikat (manuell von Anwendungsverzeichnis geladen - nicht der sicherste Weg, aber es erfordert keine Zertifikatspeicher zu verwalten und zu machen Installation schwieriger):

        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)});

Dies ist Client-Seite, und serverseitige Host sieht wie folgt einrichten:

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});
    }

Das funktioniert gut und erlaubt es, Nachrichten zu unterschreiben, aber soweit Sicherheitsmodus in folgenden Weise festgelegt:

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

Aber ich brauche

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

irgendwie Windows in ServiceSecurityContext zu erhalten.  Mixed (Transport- und Nachrichten) Sicherheitsmodus ist nicht hilfreich, weil ich weiß nicht warum, aber selbst wenn ich Windows ClientCredentials für Transport Teilmodus Infrastruktur in Config gesetzt versucht SSL-Verbindung aufzubauen.

Alle Ideen ????


Die Zertifikate werden für Nachrichtensignierung verwendet, d.h. was beweist, dass andere Seite entweder real Client oder Dienst (man-in-the-middle) ist. Aber Zulassung in System teilweise verlässt sich in ServiceSecurityContect auf Windows entwickelt. Alles, was ich Windows in sec.context-wollen gehören mittlerweile PrimaryIdentity ist X509CertIdentity. Also muss ich auf server wissen, welche Domain-Benutzer-Service-Operation angefordert.

War es hilfreich?

Lösung

Versuchen Sie diesen Link re: Identitätswechsel:

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

Abschnitt - „Zuordnen eines Client-Zertifikat auf einem Windows-Konto“, scheint, wie, was Sie nach

.

mit Config auf Client:

authentication mapClientCertificateToWindowsAccount="true" 

Client-Code:

‘Erstellen Sie eine Bindung, die ein Zertifikat als Client Legitimierungsart setzt.

Dim b As WSHttpBinding = New WSHttpBinding()

b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate

‘Erstellen Sie einen Service-Host, der das Zertifikat auf einem Windows-Konto zugeordnet ist.

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

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

sh.Credentials.ClientCertificate.Authentication.MapClientCertificateToWindowsAccount = True

Ich hoffe, das hilft

Andere Tipps

Wenn Sie mit Nachrichtensicherheit mit Zertifikaten an jedem Ende es zu sichern, ich bin mir nicht ganz sicher, warum Sie eine Windows-Identität benötigen würden? Was ist die Begründung dahinter?

Vielleicht wird dieser Link von Nutzen sein - Abschnitte 6 und 7 haben Details von Konfigurationseinstellungen für Zertifikat authentiaction, die ähnlich wie SSL funktionieren:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top