Fehlermeldung: request for security token konnte nicht erfüllt werden, da die Authentifizierung fehlgeschlagen
Ich versuche, Zugriff auf einen WCF-Dienst (MS CRM 2011) und immer den oben genannten Fehler. Wenn ich meine Beispiel-Programm aus der VS2010-debugger mit entweder Cassini oder IIS Express funktioniert es Super. Keine Authentifizierung Fehler.
Allerdings, wenn ich veröffentlichen Sie die site auf meinem lokalen IIS 7.5 (unter Windows 7 64-bit), bekomme ich die Fehlermeldung auf die Zeile, schnappt sich den CRM-Benutzer-id (WhoAmIResponse).
Ich öffnete Fiddler vergleichen Sie die Anforderungen zwischen der Ausführung im debugger und läuft unter IIS. Auf der Website unter IIS ausgeführt wird die Anforderung noch nie begegnet, also muss er scheitern, bevor man so weit.
Der site veröffentlicht, um IIS hat seine web.config-set für ...
<authentication mode="Windows">
</authentication>
<identity impersonate="true"/>
Die Website läuft unter dem vorinstallierten ASP.NET v4.0 app-pool, Integrated pipeline mode, Konto ApplicationPoolIdentity.
Hier ist mein code...
public class DemoController : Controller
{
public ActionResult Index()
{
ClientCredentials credentials = new ClientCredentials();
credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
var _serviceProxy = new OrganizationServiceProxy(new Uri("http://svr-rex2011-dev/TimeEntry/XRMServices/2011/Organization.svc"),
null,
credentials,
null);
//This statement is required to enable early-bound type support.
_serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
IOrganizationService service = (IOrganizationService)_serviceProxy;
//Display information about the logged on user.
Guid userid = ((WhoAmIResponse)service.Execute(new WhoAmIRequest())).UserId;
SystemUser systemUser = (SystemUser)service.Retrieve("systemuser", userid,
new ColumnSet(new string[] { "firstname", "lastname" }));
//Retrieve the version of Microsoft Dynamics CRM.
RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
RetrieveVersionResponse versionResponse =
(RetrieveVersionResponse)service.Execute(versionRequest);
ViewBag.FirstName = systemUser.FirstName;
ViewBag.LastName = systemUser.LastName;
ViewBag.Version = versionResponse.Version;
return View();
}
}
Irgendwelche Ideen? Sehr geschätzt!!!
InformationsquelleAutor John Livermore | 2011-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, die situation, die Sie beschreiben, ist dies: Sie sind immer Authentifizierung Fehler, wenn die app versucht Zugriff auf das CRM-service, wenn es ist, auf dem IIS ausgeführt wird. Wenn Sie führen Sie Ihre app aus Visual Studio oder IIS-Express dann müssen Sie nicht die Authentifizierung Fehler.
Wenn das wahr ist, ich bin mir ziemlich sicher, dass das Problem aufgrund der Identität, mit der Ausführung des IIS-AppPool für Ihre Anwendung. Sie müssen ändern der "AppPool" - Identität eine, die Netzwerk-Zugriff auf die CRM-service. Normalerweise sollte es eine domain-Konto mit den richtigen Berechtigungen, aber es gibt Möglichkeiten, dies zu tun mit lokalen Computer-Konten das gleiche Kennwort haben (definitiv nicht zu empfehlen, wenn eine Domäne vorhanden ist).
Richtig, der Identität Netzwerkdienst ist das gleiche wie die zugewiesenen Domäne Computerkonto für den server (in der Regel den Namen des Servers). Die meisten wahrscheinlich, dass das Konto nicht in eine Gruppe der Domäne, die zum Zugriff auf den CRM-service. Um zu überprüfen, dass dies das Problem ist, vorübergehend zuweisen der "AppPool" - Ihr domain-Konto und recycle IIS. Versuchen Sie Ihre Anwendung erneut und wenn es Aufrufe erfolgreich sind, werden Sie wissen, die seine ein Konto Authentifizierung Problem. Langfristig beheben, fordern Sie ein Domänenkonto in einer Gruppe, die Zugriff auf zuweisen, um den AppPool.
Ich habe nicht bemerkt, die etwas über das Administrator-Konto. Je nachdem, welche Rechte der admin-account gegeben wurde, es kann oder kann nicht haben Zugriff auf die CRM-service. Ich würde versuchen, mit deinem account, da Sie wissen, es hat Zugang zu CRM-service.
Ok, ich bin immer näher. Ich habe die app-pool-Konto auf ein Domänen-Konto, das über Administrator-Zugriff auf die box, dass die Gastgeber den WCF-Dienst (die hatte ich zuvor). Doch dieses mal öffnete ich die Authentifizierung Fläche unter der website. Es gibt vier Möglichkeiten, drei aktiviert wurden, einschließlich ASP.NET Identitätswechsel. Ich habe diese option deaktiviert und jetzt ist der service aufgerufen wird. Allerdings wird der Benutzer übergeben wird, ist der Dienst das Konto in der app-pool! Ich muss stattdessen passieren die creds des Benutzers, der angemeldet ist, in den computer ein. Alle anderen Gedanken auf, wie man das passieren?
Ich habe meine Authentifizierungsmodus auf Windows festgelegt, und ich bin versucht, legen Sie die Anmeldeinformationen mithilfe der CredentialCache.DefaultNetworkCredentials, aber ich brauche die DefaultNetworkCredentials, um nicht die creds aus der app-pool, sondern der Benutzer eingeloggt ist.
InformationsquelleAutor Sixto Saez
Ich hatte das gleiche problem, und, in meinem Fall, es stellte sich heraus, dass aufgrund der Tatsache, dass die CRM-war Lastenausgleich. Es stellt sich heraus, dass Delegierung der Authentifizierung über Kerberos funktioniert nicht in load-balanced-Architekturen.
Wir haben, um dieses ist, indem Sie unsere Anwendung direkt auf einem CRM-Server über einen HOST-Eintrag, die umgangen das load-balancing.
Ich hoffe das spart jemand der mehrere Stunden, die es mich kostet.
InformationsquelleAutor Polshgiant