2011-10-06 55 views
12

Ho un'applicazione Web ASP.NET scritta in VB.NET. Una parte dell'applicazione effettua una chiamata AJAX a un file ASMX interno che a sua volta effettua una chiamata a un servizio Web remoto che è solo un singolo file ASMX. Normalmente questo funziona bene ed è stato distribuito un paio di volte e funziona bene. Un cliente tuttavia, sta ottenendo il messaggio dalla chiamata AJAX:La richiesta HTTP non è autorizzata con lo schema di autenticazione del client 'Anonimo'. L'intestazione di autenticazione ricevuta dal server era "NTLM"

La richiesta HTTP non è autorizzato con lo schema di autenticazione client 'Anonymous'. L'intestazione di autenticazione ricevuta dal server era "NTLM".

Ho setacciato una grande quantità di siti Web cercando di risolvere il problema ma non riesco a trovare alcuna risposta che funzioni per me.

Non riesco a replicare l'errore sul mio server di test, che è lo stesso del client, Win2003 IIS6.

Il servizio Web remoto è distribuito su Windows 2008 r2 - IIS7.5. Il servizio remoto viene distribuito utilizzando solo l'autenticazione "anonima". La distribuzione del client è configurata con Anonimo e 'Autenticazione integrata di Windows'. Ho provato a modificare i livelli di autenticazione su entrambe le implementazioni ma non riesco a replicare il problema. Il più vicino sono venuto è quando ho impostato l'autenticazione servizio IIS remoto per

La richiesta HTTP non è autorizzato con lo schema di autenticazione client 'Ntlm'. L'intestazione di autenticazione ricevuta dal server era "".

Nel file web.config il riferimento al servizio remoto è:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="SVCMappingSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
        <message clientCredentialType="UserName" algorithmSuite="Default"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://svc.website.com/services/myService.asmx" binding="basicHttpBinding" bindingConfiguration="SVCMappingSoap" contract="SVCMappingService.SVCMappingSoap" name="SVCMappingSoap"/> 
    </client> 
</system.serviceModel> 

Ho provato a cambiare un numero di impostazione nella sezione <security> ma ancora in grado di replicarsi.

+0

Ho scoperto che il client utilizza un server proxy. La disabilitazione del servizio Web remoto ha generato lo stesso messaggio di errore sul client, pertanto sembra che tutti i problemi siano dovuti alla configurazione di rete. Ho configurato il binding per utilizzare il proxy che ha generato il messaggio: 'Il server remoto ha restituito una risposta imprevista: (407) Autenticazione proxy richiesta (ISA Server richiede l'autorizzazione per soddisfare la richiesta. L'accesso al filtro Proxy Web è negato). . Ho inoltrato il problema a chiunque sia responsabile della configurazione della rete del client. – SausageFingers

+0

Salve @Fly_Trap, puoi descrivere in che modo questo proxy tra te e il tuo endpoint ha influito sull'autorizzazione. Ho un problema simile in questo momento, sembra che il tuo possa aiutarmi. –

+0

@Johnny_D, sfortunatamente non so come sia stato configurato il proxy. – SausageFingers

risposta

19

Non sono sicuro della configurazione del server totale.

<security mode="None"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
</security> 

invece che sopra uno riprova con configurazione sotto

<security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Ntlm"/> 
    <message clientCredentialType="UserName" algorithmSuite="Default"/> 
</security> 

prega di passare attraverso di seguito i link, si può più idea su chi ed è possibile modificare la configurazione in base alle proprie esigenze:

+1

Il trucco è quello di assicurarsi che la configurazione a livello di WCF e IIS debba essere uguale. Quindi, in alternativa, possiamo cambiare il livello di IIS come "anonimo". – himanshu

+0

Avevo già provato quella configurazione di sicurezza ma il messaggio era lo stesso. Vedere il mio commento sopra, penso che il problema è che il client sta usando un server proxy web. – SausageFingers

+17

Se questa risposta non risolve il problema, perché viene accettato? –

2

ho dovuto cambiare generato il default

 <security mode="Transport"/> 

in

 <security mode="Transport" > 
     <transport clientCredentialType="Ntlm"/> 
     </security> 
+0

Questo ha risolto il mio problema. Grazie Signore!!! – papfan

0

Un altro commento per questo problema:

Se non si utilizza HTTPS,

<security mode="Transport"/> 

non è supportato. È possibile utilizzare

<security mode="TransportCredentialOnly"> 

invece.

Problemi correlati