我有一个使用具有自定义标识的应用程序池在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"/>