如果您在 IIS 中托管 WCF 服务,它将在 ASP.NET 工作进程中运行,这意味着您可以像使用 ASMX Web 服务一样配置身份验证和授权:
<system.Web>
<authentication mode="Windows"/>
<authorization>
<allow roles=".\Administrators"/>
<deny users="*"/>
</authorization>
</system.Web>
然后,您必须在 IIS 中禁用对端点的匿名访问,而是启用 Windows 集成身份验证。
在 IIS 管理控制台中,您可以通过为您的虚拟目录打开“属性”对话框来执行此操作。然后,您将在“目录安全”选项卡中找到安全设置。
当然,唯一可用的通信通道是 HTTP。客户端必须使用以下设置在传输级别的请求中提供其 Windows 身份:
<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>
请注意,如果您的服务端点使用wsHttpBinding,那么您还必须将 SSL 添加到您的端点,因为这是 WCF 在您使用传输级安全性时强制执行的要求。
如果改为使用basicHttpBinding,则可以使用 WCF 中一种安全性较低的身份验证模式,称为TransportCredentialOnly,不再需要 SSL。
有关更多详细信息,这里是 WCF 中安全基础结构的一个很好的概述。