Probleme mit WCF-Authentifizierung
-
22-07-2019 - |
Frage
Ich habe einen sehr einfachen WCF-Dienst, die ich öffentlich aussetzen möchte. Ich habe den Dienst und legen Sie es ohne viel Aufwand über unseren Server auf. Das Problem ist, dass wir in der Lage sind, von den Service zu nutzen innerhalb unseres privaten Netzwerk, aber wenn wir es von außerhalb des Netzwerks zu verwenden versuchen, wird folgende Fehler ist werfen:
Die Security Support Provider Interface (SSPI) konnte nicht ausgehandelt werden.
Ich habe eine wenig Forschung und es klingt wie WCF Windows-Authentifizierung verwendet standardmäßig. Ich möchte es ändern keine Authentifizierung zu verwenden, aber ich bin mir nicht ganz sicher, wie. Hier ist, wie mein Config sieht jetzt.
<system.serviceModel>
<services>
<service behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior"
name="XX.ZZ.WebService.MyService">
<endpoint address="" binding="wsHttpBinding" contract="XX.ZZ.WebService.IMyService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="XX.ZZ.WebService.MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Ich würde einige Hinweise zu schätzen wissen, oder stupst in der richtigen Richtung.
Lösung
Nun, Ihr Dienst verwendet den wsHttpBinding, die standardmäßig wird Windows-Benutzeranmeldeinformationen erforderlich ist - die externen Benutzer offensichtlich nicht haben. Es ist nicht in sich selbst WCF, die Windows-Anmeldeinformationen standardmäßig verwendet (wie Sie angeben), aber wirklich diese besondere Bindung (wsHttpBinding.) - andere auf andere Einstellungen Standard könnte
Sie haben ein paar Möglichkeiten:
- konfiguriert wsHttpBinding (die eher „Schwergewicht“) überhaupt keine Sicherheit zu verwenden, oder Benutzername / Passwort-Sicherheit zu verwenden, welche die Anrufer bereitstellen müßten
- Verwendung Basichttpbinding ohne Sicherheit statt (das ist das ASMX-Modell, im Grunde)
So deaktivieren Sie die Sicherheit vollständig von wsHttpBinding, umfassen diese in Ihrer config:
<bindings>
<wsHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
und konfigurieren Sie Ihre Endpunkte, die Bindungskonfiguration verwenden:
<system.serviceModel>
<services>
<service name="XX.ZZ.WebService.MyService"
behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="NoSecurity"
contract="XX.ZZ.WebService.IMyService">
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
Sie könnten das gleiche mit <basicHttpBinding>
statt <wsHttpBinding>
tun, wenn Sie wollen (es gibt keinen Nutzen wsHttpBinding vs. Basichttpbinding in Verwendung, wenn Sie die Sicherheit und alle anderen erweiterten Funktionen ausgeschaltet, dass WSHttpBinding Angebote).
Es gibt auch eine wirklich gute Blog-Post-Serie diesem Vortrag über die Grundlagen der WCF Sicherheit in Bezug auf fünf verschiedene, typische Szenarien - ausgezeichnete lesen
Marc
Andere Tipps
Das gibt Ihnen Transport Level Security ohne Authentifizierung:
<configuration> <system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors> </system.serviceModel>
</configuration>
Für andere Szenarien hätte ich einen Blick auf die Microsoft WCF Proben .
WCF kann ein echten Schmerzen, wenn es über die Konfiguration kommt. Schauen Sie sich auf WCFSecurity es gute Arbeitsproben für verschiedene Konfigurations Umgebungen.