2015-05-14 102 views
1

我從ASP.NET應用程序(.Net 4.5和IIS 7)調用WCF服務。 Web應用程序被配置爲使用Windows身份驗證。通過WCF服務調用發送Windows憑據

<authentication mode="Windows" /> 

我想將Windows用戶憑據作爲身份原則發送給我的服務。在我的服務端,我將手動執行一些額外的授權邏輯。但是我沒有在服務端獲得Windows原則。相反,我總是獲得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

Windows憑據用於同一LAN中的Windows機器,並且局域網之外的其他Windows機器已知曉此類知識。您有什麼理由必須使用Windows憑據。 – ZZZ

+0

因爲該網站將在Intranet中使用。並且每個用戶將只能訪問某些WCF方法,具體取決於其角色。 –

回答

0

您已經定義ServiceBehavior稱爲「PublicServiceTypeBehaviors」,現在你只需要做出的行爲包括一些內置的WCF的驗證和授權功能。

WindowsAuthentication是您在ServiceCrendentials下需要的。

若需要授權,可以添加ServiceAuthorization及相關角色提供者。

+1

小心提供一個例子嗎? –

+0

我試過這個,但不知何故還沒有工作 –

+0

在你的服務實現中,你用[PrincipalPermission(SecurityAction.Demand,Role =「YourWindowRole」)]修飾了類或方法嗎? – ZZZ