Asp.net没有在服务器2008上对wcf服务进行身份验证

时间:2009-01-29 22:07:56

标签: asp.net windows-server-2008 wcf-security

我很难在Windows Server 2008上将网站部署到IIS 7。 该站点正常工作,直到它尝试调用托管在同一主机上的WCF服务。

当在Visual Studio 20008中运行Web时,一切都适用于我的工作站的服务 使用完全相同的Web配置等。一旦我在服务器上的虚拟目录中部署Web 巴姆。验证错误。当它们都部署在Windows 2003 Server上时,它也可以正常工作。什么 是什么导致这个?救命!请。

如果重要,则所有服务操作都需要Active Directory组成员身份 ASP.net页面的经过身份验证的用户,装饰为: [PrincipalPermission(SecurityAction.Demand,Role =“SOAMemberShipService”)]

我从网站上收到以下错误:

无法满足安全令牌请求,因为身份验证失败。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ServiceModel.FaultException:无法满足安全令牌请求,因为身份验证失败。

来源错误:

第919行:
第920行:公共HSMembersService.MemberSearchResult SearchMembers(HSMembersService.MemberSearch MemberInfoToSearch){ 第921行:return base.Channel.SearchMembers(MemberInfoToSearch); 922行:} 923行:}

源文件:c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ csrweb \ a4d18657 \ a6d0910d \ App_WebReferences.jgx1svpr.0.cs Line:921

堆栈追踪:

[FaultException:无法满足安全令牌的请求,因为身份验证失败。    System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(消息消息,EndpointAddress目标)+6375432    System.ServiceModel.Security.IssuanceTokenProviderBase`1.ThrowIfFault(消息消息,EndpointAddress目标)+25    System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(Message incomingMessage,SspiNegotiationTokenProviderState sspiState)+173

[SecurityNegotiationException:调用者未通过该服务进行身份验证。]    System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+4596611    System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type)+1713    HSMembersService.IHSMembersService.SearchMembers(MemberSearch MemberInfoToSearch)+0    HSMembersService.HSMembersServiceClient.SearchMembers(MemberSearch MemberInfoToSearch)位于c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ csrweb \ a4d18657 \ a6d0910d \ App_WebReferences.jgx1svpr.0.cs:921    e:\ CSRWeb \ default.aspx.cs中的_default.btnSearch_Click(Object sender,EventArgs e):114    System.Web.UI.WebControls.Button.OnClick(EventArgs e)+131    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+140    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+39    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3215

ASP.net网站的web.config(相关服务部分):

                                                                                                            

服务web.config:

       

                                       

    <!-- Service Endpoints -->
    <!-- Unless fully qualified, address is relative to base address supplied above -->
    <endpoint address ="" binding="wsHttpBinding" contract="HSMembersService.IHSMembersService" bindingConfiguration="wsHttpBindingConfig">
      <!-- 
          Upon deployment, the following identity element should be removed or replaced to reflect the 
          identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
          automatically.
      -->
      <!--<identity>
        <dns value="localhost"/>
      </identity>-->
    </endpoint>
    <!-- Metadata Endpoints -->
    <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
    <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBindingConfig" >
      <security mode="Message">
        <message clientCredentialType="Windows" />
      </security>

    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="HSMembersService.HSMembersServiceBehavior">
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="True"/>

      <serviceAuthorization principalPermissionMode="UseWindowsGroups"         />
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="True" /><!-- Change this before deployment -->
    </behavior>
  </serviceBehaviors>
</behaviors>

2 个答案:

答案 0 :(得分:0)

好的,这里没有答案,也没有MSDN订阅组的答案。

所以,我尝试了一切。我的意思是一切。看似好几天之后但实际上可能只有20个小时,它确实有效!

我所做的只是将服务文件(即.dll,.svc等)的物理路径移动到我的c:root与wwwroot之间的目录中并且它有效。我当然必须更新我的虚拟目录以指向它。

为什么这个位置会导致问题? IIS7.0 / Windows Server 2008是否会更改不允许从wwwroot的物理位置部署服务的内容?我可能永远都找不到,因为我永远不会尝试从那里部署另一项服务。

我对所有帐户/目录权限进行了三重检查,新物理路径中的权限与旧物理路径中的权限相同,因此没有那么好。

如果有人发现原因或知道原因。请让我/我们知道。

谢谢,

埃迪

答案 1 :(得分:0)

可能与this有关。