2008-10-23 7 views

Répondre

0

nous voulons utiliser la sécurité intégrée de Windows. Si vous désactivez l'accès anonyme dans IIS et n'autorisez que les fenêtres, vous ne pouvez pas utiliser wsHttpBinding avec WCF sans utiliser de mode de sécurité (par exemple, la sécurité transprot qui requiert ssl). Nous voulons seulement utiliser l'authentification Windows, nous ne voulons pas nécessairement utiliser ssl pour la sécurité du transport. J'étais un peu étonné que ce n'était pas possible hors de la boîte (comme semblait être confirmé par mon lien) car il semblerait un scénario assez commun pour les applications internes.

Nous ne souhaitons pas rétrograder à basicHttpBinding qui ne prend en charge que l'authentification Windows.

3

vous avez raison, afaik dans le scénario que vous décrivez wsHttpBinding nous oblige à utiliser la pile de sécurité WCF interne. Donc ce que vous généralement faire est

  • laisser l'accès anonyme a permis
  • créer un ServiceBehavior avec < serviceAuthorization principalPermissionMode = "UseWindowsGroups"/>
  • annoter chaque mise en œuvre concrète d'une méthode de service à l'aide du PrincipalPermissionAttribute, qui est un outil assez puissant avec de nombreuses options différentes pour contrôler l'accès

Serait-ce une solution acceptable pour vous ou y a-t-il d'autres nsider?

de base Exemple:

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>