Sichere WCF-Dienst gehostet in IIS 7 die Windows-Authentifizierung unter Verwendung von definierten Gruppe beschränkt oder Benutzern
-
19-09-2019 - |
Frage
Wie ein WCF-Dienst in IIS 7 Zugang gehostet konfigurieren für nur definierte Benutzer / Gruppen zu ermöglichen.
Vorhandene Konfiguration:
<authentication mode="Windows"/>
<services>
<service name="MyService.Test" behaviorConfiguration="MyService.TestBehavior">
<endpoint address="" binding="wsHttpBinding" contract="MyService.ITest">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyService.TestBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
Ich mag dann Berechtigungen (Benutzer oder Gruppen) konfigurieren, dass entweder in den web.config oder im Dateisystem auf Dateien oder Ordner.
Lösung
Vor allem, wenn Sie in einer Intranet-Umgebung sind, können Sie und sollten netTcpBinding wechseln - es ist schneller, es flexibler ist, kann niemand nennen von außen in (über Firewalls.) - perfekt
- Weiter Sie Windows-Anmeldeinformationen haben standardmäßig aktiviert mit wsHttpBinding und mit netTcpBinding. In einer WCF Welt, würden Sie nicht in der Regel sichere Dateien oder Ordner - was Sie Service-Anrufe sind sichern würden - und so sind mit Windows-Anmeldeinformationen einfach zu tun - nur ein Attribut Principal auf Ihre Service-Implementierung hinzufügen, und Sie werden getan:
class MyService : IMyService
{
[PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")]
public void SensitiveMethod()
{
....
}
}
sollte gut funktionieren.
Wenn Sie wirklich Dateien und Ordner müssen sichern, können Sie immer die Datei web.config verwenden und die üblichen Zugriffsberechtigungen auf Basis von Windows Benutzername und Gruppen angeben - aber das hat nichts mit WCF zu tun, wirklich
Marc