使用 Silverlight 5、IIS 7.5 对 WCF 服务进行 Windows 身份验证

Posted

技术标签:

【中文标题】使用 Silverlight 5、IIS 7.5 对 WCF 服务进行 Windows 身份验证【英文标题】:Windows Authentication for WCF service with Silverlight 5, IIS 7.5 【发布时间】:2012-11-20 18:59:06 【问题描述】:

我在 ASP.net 项目中有一个带有(常规)WCF 服务的 Silverlight 5 Prism 应用程序。我正在使用 IIS 7.5 在本地主机上托管它。我遵循了

中的所有步骤

How to: Use Windows Authentication to Secure a Service for Silverlight Applications

How to: Host a Secure Service in ASP.NET for Silverlight Applications

但我无法让 Windows 身份验证工作。每当我在 IIS 中关闭匿名身份验证时,我的应用程序都会抛出 The remote server returned an error: NotFound. 异常,因为它找不到 WCF 服务。

当我尝试在 Visual Studio 中更新服务引用时,我收到错误 Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service.

当我打开匿名身份验证时,服务可以工作,但我没有获得 Windows 用户凭据。我的浏览器(IE 8)设置为使用集成 Windows 身份验证并自动登录本地 Intranet。

我做错了什么?

这是我的 IIS 7.5 配置。应用程序池正在集成模式下运行:

web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <compilation debug="true" />
    <authentication mode="Windows" />
  </system.web>
  <system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
       </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />  
  </system.serviceModel>
</configuration>

ServiceReferences.ClientConfig:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ISecurityService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="TransportCredentialOnly" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:85/SecurityService/SecurityService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISecurityService"
                contract="SecurityServiceReference.ISecurityService" name="BasicHttpBinding_ISecurityService" />
        </client>
    </system.serviceModel>
</configuration>

【问题讨论】:

【参考方案1】:

我只是猜测 WCF 部分可能没有正确设置 Windows 身份验证。 wcf 服务还需要配置为使用 Windows 凭据对来自 IIS 的请求进行身份验证。因此,在这种情况下,我希望服务中需要有一种行为来要求这样做。检查您是否已正确配置这些。服务凭据和客户端凭据。

serviceCredentials

Security behaviours in WCF

【讨论】:

以上是关于使用 Silverlight 5、IIS 7.5 对 WCF 服务进行 Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 7.5 中托管的 .Net Remoting 服务中,如何删除“Server : IIS/7.5”标记表单响应头

不能使用 WAMP ,端口 80 被 IIS 7.5 使用

IIS 7.5 - 403 禁止

在 IIS 7.5 中注册 .NET Framework 4.5

将网站从 IIS6 迁移到 IIS 7.5 后不显示内容

使用 IIS 7.5 进行表单身份验证 - 未授权