与IIS和应用程序池的WCF Windows身份validation

我有一个使用具有自定义标识的应用程序池在IIS 6上运行的WCF服务器

现在我在网上查了两天,找不到问题的确切答案。 我知道外面有很多类似的东西

在IIS6上,虚拟目录具有匿名访问禁​​用和启用集成Windows身份validation。 服务帐户与机器位于同一个域中。 我会叫它svcE。 我添加了svcE到IIS_WPG组。

现在,第一个问题是当我select应用程序池与svcE工作在虚拟目录,称为appDir,然后当我导航到appDir我得到提示凭据,但如果我使用networking服务帐户,我不确认我是以我身份login。

我想要做的是让服务在帐户svE下运行,因为它可以访问数据库,而不需要将这些信息放在WebConfig文件中。

我有一个与configuration文件的Web服务

<authentication mode="Windows"/> <bindings> <basicHttpBinding> <binding name="default"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows"/> </security> </binding> </basicHttpBinding> </bindings> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="default" contract="<removed>"> <identity> <dns value="localhost" /> </identity> </endpoint> 

使用该服务的Webconfiguration

 <basicHttpBinding> <!-- Create one Binding for all three services, save space--> <binding name="BasicHttpBinding_PricingService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" proxyCredentialType="Windows" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="<address>.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_PricingService" contract="<contract>" name="<name>" /> 

最后我试图达到的是

只有经过身份validation的人才可以调用服务 – >然后服务使用一个服务帐户来与数据库进行所有的交互。

请注意,如果我跳过第一部分,并添加访问,然后它工作,并调用数据库罚款

感谢您的帮助

如果您希望将db调用作为特定帐户,则可以模拟该帐户以获取该调用的跨度:

 using ( WindowsImpersonationContext contexts = (new WindowsIdentity("account").Impersonate()){ db.MakeCall(); } 

当用户使用Windows身份验证连接时,看起来您的服务正在模拟用户。

当您使用匿名身份验证时,没有模拟因此没有问题。

当您使用Windows身份验证和一个domian帐户,该帐户不标记,因为它可以模拟也许这就是为什么你得到登录,网络服务默认情况下有这个权利。

尝试:

 <authentication mode="Windows" impersonate="false"/> 

我有同样的问题。

我需要访问c:\ inetpub \ wwwroot \文件夹。

我给“DomainUsers”组读取权限。

如果有人仍然在为这个问题而苦苦挣扎,那么你只需要在web.config上模拟你的服务账号即可:

 <identity impersonate="true" userName="domain\svcname" password="password"/>