2016-04-26 5 views
1

Ich habe mir viele Fragen zu diesem Thema angesehen und nichts scheint zu funktionieren. Ich versuche, einen Web-API-Service von einer mvc-Webanwendung aufzurufen. Dies ist mein Client-Code:So rufen Sie einen Web-API-Dienst von MVC mithilfe der Windows-Authentifizierung auf?

var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }) 
{ 
    BaseAddress = baseAddress 
}; 
var response = await client.GetAsync("items/5"); 

Wenn ich es lokal ausführen, funktioniert es. Wenn ich das Projekt auf dem Server veröffentliche, gibt die API immer 401 Nicht autorisiert zurück. Ich habe die Windows-Authentifizierung im Web-API- und Mvc-Projekt in IIS aktiviert. Wie bekomme ich die richtigen Windows-Anmeldedaten für die API von der MVC-Anwendung? Die Web-API- und die MVC-App werden auf demselben IIS-Server ausgeführt.

+0

In wechselnden welchem ​​Kontext wird dieser Anwendungscode ausgeführt wird? Eine andere Web App? Konsolen-App? Dort werden Sie die korrekte Authentifizierung einrichten. –

+0

@CamBruce Dieser Client-Code wird von der mvc Web App ausgeführt –

Antwort

2

Wenn die MVC-Anwendung alle Anfragen an die WebAPI mit den gleichen Windows-Anmeldeinformationen senden kann, sollten Sie den Anwendungspool von IIS einfach so konfigurieren können, dass er als Domänenbenutzer ausgeführt wird. Standardmäßig werden die App-Pools von IIS als lokales Computerkonto ausgeführt. Wenn es versucht, eine Anforderung über das Netzwerk an eine Windows Authenticated Ressource zu stellen, erkennt der Remote-Computer das lokale Computerkonto des Webservers daher nicht. Daher der nicht autorisierte Fehler.

Wenn Sie jedoch möchten, dass die MVC-Anwendung die WebAPI als Benutzer aufruft, der die Anforderung an die MVC-App gesendet hat, müssen Sie den Identitätswechsel in web.config aktivieren. Wahrscheinlich müssen Sie auch Ihren Domänenadministrator dazu bringen, die Kerberos-Delegierung für Ihren Web-Server-Computer einzuschalten, da Kerberos/Active Directory funktioniert (schlagen Sie den Kerberos-Doppelsprung nach).

0

Das Problem bestand darin, dass beim Versuch, eine Anforderung an dieselbe Maschine unter Verwendung eines vollqualifizierten Domänennamens zu senden, die Anforderung automatisch nicht vor einem Reflektionsangriff schützt.

Ich reparierte diese durch baseaddress von

http://example.com/api 

zu

http://localhost/api 
Verwandte Themen