我正在尝试配置一个基本的 IIS 7 托管 WCF 服务,该服务使用 Windows 身份验证来授权用户。<security mode="TransportCredentialOnly">
我已经看到了许多示例,这些示例演示了如何使用带有SSL 的basicHttpBinding 来传输凭据。当我将服务配置为使用 TransportCredentialOnly 时,如果我尝试在 IE 中查看 svc 文件,则会收到以下错误:
找不到与绑定 BasicHttpBinding 的终结点的方案 http 匹配的基地址。注册的基地址方案是 [https]。
我在 IIS 7 中托管。SSL 配置了有效的证书。Windows 身份验证已打开。匿名身份验证已关闭。应用程序池是在 ApplicationPoolIdentity 下运行的 ASP.Net v4.0
这是我的服务的配置文件:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
</roleManager>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="svcTest" >
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="true" httpHelpPageEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WCF_Test.Service1" behaviorConfiguration="svcTest">
<endpoint name ="Service1Endpoint"
address="EndpointTest"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpointBinding"
contract="WCF_Test.IService1">
</endpoint>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
如果我将绑定更改为使用Transport
而不是,TransportCredentialOnly
那么我可以在 IE 中查看我的服务文件。然后,我可以为我的 Web 客户端创建一个代理,并从我的客户端调用服务上的方法,并尝试使用以下代码从服务方法授权用户:
if(System.Web.Security.Roles.IsUserInRole(@"Admins"))
此代码不起作用,因为它使用在服务器上运行 IIS 的帐户的身份 (IIS APPPOOL\ASP.NET v4.0),而不是从网页调用 Web 服务的用户的身份。
如何使用有效的 SSL 证书配置 IIS 7 以使用具有安全模式 =“TransportCredentialOnly”的 basicHttpBinding?
如何将我的用户 Windows 凭据客户端流向 Web 服务,以便我可以使用此代码在 Web 服务上授权用户?
[PrincipalPermission(SecurityAction.Demand, Role = "Admins")]
或此代码
if(System.Web.Security.Roles.IsUserInRole(@"Admins"))
任何帮助将不胜感激。
谢谢你