我从我的ASP.NET应用程序(.Net 4.5和IIS 7)调用WCF服务。 Web应用程序配置为使用Windows身份验证。
<authentication mode="Windows" />
我正在尝试将Windows用户凭据作为身份原则发送到我的服务。在我的服务端,我将手动执行一些额外的授权逻辑。但是我没有在服务端获得WindowsPrinciple。相反,我总是得到GenericPrinciple类型,因此原则名称是空白的。我是WCF配置的新手。我到底错过了什么?
Web应用程序和WCF当前都在同一台计算机上的IIS 7中托管。
这是客户端的web.config设置。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBidning_IService" maxReceivedMessageSize="2147483647">
</binding>
</basicHttpBinding>
<client>
<endpoint address="http://localhost/MyWebServiceApp/API/MyAPIService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBidning_IService"
contract="Application.API.IService"
name="BasicHttpBidning_IService" >
</endpoint>
</client>
</system.serviceModel>
服务方:
<service name="MyAPIService" behaviorConfiguration="PublicServiceTypeBehaviors">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBidning_IPublicService" contract="Application.API.IService" name="BasicHttpBidning_IService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<system.serviceModel>
<client />
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" minFreeMemoryPercentageToActivateService="1" />
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBidning_IPublicService" maxReceivedMessageSize="2147483647" />
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="WebHttpBidning_IPublicService">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="PublicServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</system.serviceModel>
答案 0 :(得分:0)
您已定义名为“PublicServiceTypeBehaviors”的ServiceBehavior,现在您只需要使该行为包含WCF的一些内置身份验证和授权功能。
WindowsAuthentication是您在ServiceCrendentials下所需要的。
如果需要,可以添加ServiceAuthorization和相关角色提供程序。