WCF: Der Antrag auf Sicherheitstoken nicht zufrieden sein könnte, weil Authentifizierung fehlgeschlagen

StackOverflow https://stackoverflow.com/questions/1639035

Frage

Ich habe zwei WCF-Dienste auf der gleichen Maschine. Eine davon ist der Verleger und man ist der Hörer.

Der Verlag ist dynamisch Proxies basiert auf und Endpunkt zu schaffen. Ich bin der Proxy in Code wie folgt zu konfigurieren:

            WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message, true);
            binding.Security.Message.NegotiateServiceCredential = true;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
            binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
            binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
            binding.Security.Message.EstablishSecurityContext = true;
            binding.ReliableSession.Enabled = true;
            binding.TransactionFlow = true;
            return binding;

und dann ...

            Binding binding = GetBindingFromAddress(address);

            ChannelFactory<T> factory = new ChannelFactory<T>(binding);
            factory.Credentials.UserName.UserName = "an account on the machine";
            factory.Credentials.UserName.Password = "a password for that account";

            T proxy = factory.CreateChannel(new EndpointAddress(address));

Wenn ich auf meinen Anruf erhalte ich den obigen Fehler. Hier ist meine Zuhörer Konfigurationsdatei:

   <service behaviorConfiguration="MEX Enabled" name="InvoiceSubscriber">
<endpoint binding="wsHttpBinding"
          bindingConfiguration="ReliableTransactionalHTTP"
          contract="AtlanticBT.SubscriptionService.Contracts.v1.IAtlanticEvents">
 <identity>
  <dns value="localhost" />
 </identity>
</endpoint>

        <bindings>
        <wsHttpBinding>
            <binding name="ReliableTransactionalHTTP" transactionFlow="true">
                <reliableSession enabled="true"/>
      <security mode="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
                 algorithmSuite="Default" establishSecurityContext="true"/>
      </security>
            </binding>
  </wsHttpBinding>
    </bindings>

Ich habe alle meine ACL auf die Verzeichnisse überprüft, die die Dienste hosten und sie korrekt zu sein scheinen. IIS-Sicherheit zu anonymen Zugriffs und die Windows-Authentifizierung festgelegt.

Also, wenn ich ausdrücklich die Anmeldeinformationen in Code-Einstellung bin, warum nicht meine Zuhörer authentifizieren?

War es hilfreich?

Lösung

Als erster Diese Nachricht bedeutet in der Regel der Maschinen sind nicht in der gleichen Domäne und somit kann mit Windows-Sicherheit nicht kommunizieren. Sind die beiden Server sind auf der gleichen Domain?

Zweitens haben Sie Ihren Endpunkt konfiguriert Windows-Sicherheit zu verwenden. Sie verwenden Windows-Sicherheit nicht nur auf Nachrichtenebene, sondern auf der Transportebene. Beide scheinen übertrieben, Sie wollen wahrscheinlich nur Transport tun.

Drittens, alles, was man so konfiguriert haben, sagt: „Ich möchte die Windows-Authentifizierung verwenden“, aber dann werden Sie die UsernameClientCredentials Eigenschaften der ClientCredentials Einstellung. Diese Eigenschaften sind nur für den Nickname Token Sicherheit verwendet wird, nicht unter Windows. Windows-Sicherheit wird die Identität des aktuellen Threads zu übernehmen und leitet es weiter.

Angenommen, Ihre Absicht Sicherheit Windows verwenden wurde, dann müssen Sie entweder auf:

  1. Führen Sie Ihren Publisher Prozess unter einem Windows-Identität Sie es mit den Teilnehmern zu kommunizieren sein wollen wie.
  2. Verwenden Sie Identitätswechsel innerhalb des Verlegers Prozess für jeden Anruf, den Sicherheitskontext zu ändern (schauen Sie in WindowsIdentity.Impersonate für weitere Informationen)

Im Moment Sie technisch tun # 1, auch wenn Sie denken, Sie tun # 2 durch die Benutzername / Passwort Eigenschaften festlegen, da sie ignoriert werden.

Schließlich hier einige gute Dokumentation, wie Sie Ihre Bindungen für verschiedene Arten von Windows-Authentifizierung Szenarien einrichten:


Darüber hinaus, ich bin nicht sicher, was kann ich sonst ohne weitere Informationen von Ihnen. Wenn Sie Ihre Frage revidieren einige weitere Informationen / beantworten einige meiner Fragen zu finden Ich werde meine Antwort revidieren, um hoffentlich gerne machen es sinnvoller.

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