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

时间:2012-12-03 10:14:12

标签: wcf silverlight authentication iis

我在ASP.net项目中有一个带有(常规)WCF服务的Silverlight 5 Prism应用程序。我正在使用IIS 7.5在localhost上托管它。我按照

中的所有步骤进行操作

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配置。应用程序池以集成模式运行:

IIS configuration

的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 个答案:

答案 0 :(得分:0)

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

serviceCredentials

Security behaviours in WCF