2008-10-23 109 views

回答

0

我們要使用windows集成安全性。如果您在IIS中禁用匿名訪問並僅允許Windows,則您似乎無法使用wsHttpBinding和WCF,而無需使用某種安全模式(例如需要ssl的transprot安全性)。

我們只想使用Windows身份驗證,我們不一定希望使用SSL來傳輸安全性。

我有點驚訝,這是不可能的(這似乎是由我的鏈接確認),因爲它似乎是一個實習生應用程序的常見情況。

我們不想降級到僅支持Windows身份驗證的basicHttpBinding。

3

你是對的,afaik在你描述的場景中wsHttpBinding要求我們使用內部的WCF安全堆棧。所以,你通常會做的是

  • 離開啓用匿名訪問
  • 創建serviceBehavior與< serviceAuthorization principalPermissionMode =「UseWindowsGroups」/>
  • 註釋每一個具體的實施使用下的PrincipalPermissionAttribute,這是一種服務方法一個相當強大的工具,有很多不同的選項來控制訪問

這是一個可以接受的解決方案嗎?或者還有其他的東西可以共同使用嗎? nsider?

基本實施例:

public class TestService : ITestService 
{ 
    [PrincipalPermission(SecurityAction.Demand, Name = "testdomain\\administrator")] 
    public string DoWork() 
    { 
    return "Hello World " + Thread.CurrentPrincipal.Identity.Name; 
    } 
} 

    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WcfSecurity.Www.TestServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="WcfSecurity.Www.TestServiceBehavior" name="WcfSecurity.Www.TestService"> 
     <endpoint address="" binding="wsHttpBinding" contract="WcfSecurity.Www.ITestService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services>  
    </system.serviceModel>