2011-10-28 12 views
6

Ho un servizio Web che utilizza l'autenticazione di Windows. Il servizio Web è ospitato su IIS. È possibile limitare l'accesso a tale servizio Web solo a pochi utenti specifici? Il mio attuale configurazione web:Come concedere l'accesso al servizio Web WCF ospitato su IIS solo per utenti specifici?

<services> 
    <service name="LANOS.SplunkSearchService.SplunkSearch"> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttp" 
     contract="LANOS.SplunkSearchService.ISplunkSearch" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttp" allowCookies="true" maxBufferSize="20000000" 
     maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000"> 
     <readerQuotas maxDepth="32" maxStringContentLength="200000000" 
     maxArrayLength="200000000" /> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

A proposito, ho cercato una soluzione simile a questo, che ho trovato su Internet:

<authentication mode="Windows"/> 

    <authorization> 

      <allow roles=".\Developers"/> 

      <allow users="DOMAIN\ServiceAccount"/> 

      <deny users="*"/> 

    </authorization> 

Non funziona anche se. :(E lasciare che tutti gli utenti del dominio passano attraverso

+0

hai disabilitato autenticazione anonima e abilitata l'autenticazione di Windows per l'applicazione che ospita il servizio WCF in IIS? –

+0

Sì, l'ho fatto. – neurotix

risposta

4

Wrox di Professional WCF 4 descrive un modo per impostare l'autenticazione username/password nel Cap 8. In sintesi, è necessario un validatore personalizzato:..

public class MyCustomUserNamePasswordValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
    if(userName != "foo" && password != "bar") 
    { 
     throw new SecurityTokenValidationException("Invalid user"); 
    } 
    } 
} 

Dopo di che si necessario aggiungere modificare il vostro elemento userNameAuthentication nella configurazione del servizio di "Custom" e definire il validatore:.

<userNameAuthentication 
     userNamePasswordValidationMode = "Custom" 
      customUserNamePasswordValidatorType = 
      "Common.MyCustomUserNamePasswordValidator, Common" /> 

Spero che questo aiuta

+1

Okey Ill provate, ma non credo che non sia possibile farlo funzionare senza modificare il codice WS. Sto ancora sperando di poter farlo funzionare solo cambiando la configurazione del web. – neurotix

Problemi correlati