Carico di Container

Autenticazione NTLM in container Docker Linux

Durante l’ammodernamento di una webapp ASP.NET distribuita su una macchina Windows Server con IIS, abbiamo deciso (tra gli altri interventi) di aggiungere il supporto Docker per poterla distribuire in un contenitore.

L’applicazione, una volta eseguita nel container, ha iniziato però a dare problemi nelle chiamate ad alcuni servizi esterni la cui autenticazione era basata su protocollo NTLM (come ad esempio SQL Server Reporting Services).

 // ...

 var uri = new Uri("https://ssrs.intra/reports/api/V2.0");
 var networkCredential = new NetworkCredential("username", "password", "domain");

 var credentialsCache = new CredentialCache { { uri, "NTLM", networkCredential } };
 var handler = new HttpClientHandler { Credentials = credentialsCache };

 var client = new HttpClient(handler) { BaseAddress = uri };
 var response= await client.GetAsync("reports");

Tutte le chiamate, nonostante il codice tentasse correttamente una autenticazione NTLM, venivano rimbalzate con errore 401 - Unauthorized.

Ciò è dovuto all’assenza, all’interno dell’immagine Docker base utilizzata per la distribuzione, di una implementazione del security provider NTLM, non consentendo quindi all’applicativo di risolvere adeguatamente le challenge NTLM/NTLMv2.

La soluzione pertanto è stata molto semplice (molto più complesso capirla e trovarla): aggiungere all’immagine Docker il pacchetto gss-ntlmssp:

RUN apt-get update && apt-get install -y --no-install-recommends gss-ntlmssp

Approfondimenti:

Foto di Ian Taylor su Unsplash

Autenticazione NTLM in container Docker Linux
Tag: