11

All'interno del mio ambiente aziendale, ho IIS7.5 che ospita sia un servizio API Web che un sito Web separato che effettua chiamate in tale servizio tramite la libreria RestSharp. Entrambi sono attualmente configurati con l'autenticazione di Windows.Come passare le credenziali di autenticazione di Windows dal client al servizio API Web

Se navigo in uno dei due con un browser, mi viene richiesto di immettere le credenziali di Windows e tutto funziona alla grande ... Ottengo le pagine Web che desidero e il servizio REST invia i miei dati. La parte che sto cercando di capire è come utilizzare una singola credenziale per l'autenticazione di entrambi. Non riesco a capire come passare le credenziali del sito web al servizio (ho tentato di impersonare ma non ha funzionato), o di richiedere manualmente all'utente nome utente/password e quindi di autenticarle con "Windows".

Aiutare un noob out?

risposta

8

Se si utilizza la rappresentazione sul proprio sito Web e l'API è in esecuzione sullo stesso server, dovrebbe funzionare.

http://msdn.microsoft.com/en-us/library/aa292118(v=vs.71).aspx

Tuttavia, se si desidera spostare l'API per un server diverso dal sito questo smetterà di funzionare. Una configurazione a due server richiede la delega Kerberos.

+0

Grazie, @Anders. Il sito e l'API sono in esecuzione su diversi siti. Daro un'occhiata a Kerberos. –

+5

Vorrei avvisarvi che la delega Kerberos non è banale. Devo ancora trovare un singolo reparto IT che sappia come farlo o che sia disposto a provare. Una soluzione alternativa consiste nell'utilizzare un account di servizio che abbia accesso a tutto ciò che il sito può utilizzare quando chiama l'API server-to-server. Non è la soluzione più carina e richiede il check-in del codice che l'utente che ha effettuato l'accesso al sito Web non ottenga più informazioni dall'API di quanto si supponga. Ma almeno è un'opzione di lavoro che non richiede molte modifiche invadenti apportate all'ambiente IT. –

+0

Il contenuto di quel collegamento "è già stato ritirato". – KSwift87

5

Dopo aver trascorso i miei due giorni su questo ho trovato la soluzione.

Impostazioni per Web API Abilita l'autenticazione di Windows sull'API Web.

Impostazioni per Web Applicazione Abilita l'autenticazione di Windows sulla tua applicazione web. Aggiungi <identity impersonate="true" /> system.web di web.config. Aggiungere

<system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
     </system.webServer> 

in web.config

abilitare l'autenticazione di Windows e ASP.NET rappresentazione da IIS.

utente seguente codice per inserire i dati sul Web API (e allo stesso modo per ottenere)

using (var client = new WebClient { UseDefaultCredentials = true }) 
      { 
       client.Headers.Add(HttpRequestHeader.ContentType, "application/xml; charset=utf-8"); 
       byte[] responseArray = client.UploadData("URL of web API", "POST", Encoding.UTF8.GetBytes(XMLText)); 
       string response = Encoding.ASCII.GetString(responseArray); 
      } 

NOTA: cosa più importante è sempre chiamare l'API web tramite IP se si utilizza l'URL si può sempre ottenere 401 Errore non autorizzato .