Wenn Sie Ihren WCF-Dienst in IIS hosten, wird es in dem ASP.NET-Arbeitsprozess ausgeführt werden, was bedeutet, dass Sie die Authentifizierung und Autorisierung konfigurieren können, wie Sie mit ASMX Web Service tun würden:
<system.Web>
<authentication mode="Windows"/>
<authorization>
<allow roles=".\Administrators"/>
<deny users="*"/>
</authorization>
</system.Web>
Dann müssen Sie den anonymen Zugriff auf Ihren Endpunkt in IIS deaktivieren und stattdessen Windows Integrated Authentication aktivieren.
In der IIS-Management-Konsole machen Sie das, indem Sie den Dialog 'Eigenschaften' für Ihr virtuelles Verzeichnis aufrufen. Sie finden dann die Sicherheitseinstellungen in der Registerkarte 'Verzeichnissicherheit'.
Natürlich ist der einzige verfügbare Kommunikationskanal HTTP. Kunden müssen ihre Windows-Identität in der Anfrage an der Transportebene mit diesen Einstellungen bieten:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WindowsSecurity">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/myservice"
binding="wsHttpBinding"
bindingConfiguration="WindowsSecurity"
contract="IMyService" />
</client>
</system.serviceModel>
Beachten Sie, dass, wenn Ihr Service-Endpunkt wsHttpBinding verwendet dann werden Sie auch SSL zu Ihrem Endpunkt hinzufügen müssen Dies ist eine Anforderung, die von WCF bei Verwendung der Sicherheit auf Transportebene erzwungen wird.
Wenn Sie stattdessen gehen für den Basichttpbinding, Sie sind dann in der Lage einen weniger sicher Authentifizierungsmodus in WCF TransportCredentialOnly genannt verwenden, wo SSL ist nicht mehr erforderlich.
Für detailliertere Informationen bietet here einen guten Überblick über die Sicherheitsinfrastruktur in WCF.
Bitte beachten Sie, dass Sie den ASP.NET-Kompatibilitätsmodus in Ihrer Datei web.config aktivieren müssen, wenn Sie dies tun möchten. Ansonsten wird es einfach nicht funktionieren (und auch keinen Fehler werfen). – Rocklan
Hinweis: Damit dies funktioniert, muss system.web/roleManager/@enabled auf "false" gesetzt sein, andernfalls werden die Rollen IIS .Net-Rollen und keine Windows-Gruppen sein. – Polyfun