weil sie völlig unterschiedliche Authentifizierungsschemata sind.
Durch Deaktivieren des anonymen Zugriffs (mithilfe eines Windows-Kontos) wird TECHNICALLY eine Anwendung im offenen Modus ausgeführt (es gibt keine Authentifizierung auf Anwendungsebene) und verlässt sich auf IIS, um die Seiten denjenigen Personen zu verweigern, die nicht authentifiziert sind mit Ihrer Domain oder nicht berechtigt, die Seiten zu sehen). Die Anwendung erkennt nur aufgrund der LOGON_USER-Variablen, wer sie ausführt, aber die -Anwendung hat den Benutzer überhaupt nicht authentifiziert. Was die Authentifizierung ausgeführt hat, ist IIS (die Benutzer basierend auf Domänennamen oder Gruppen usw. verweigert).
Wenn Sie die Anwendung über WINDOWS authentifizieren, binden Sie das Anwendungskonto der Website in die Informationen von IIS (die Variable LOGON_USER) wird als dieses Anwendungskonto behandelt.
Formularauthentifizierung, erwartet, dass Sie ein Objekt generieren, das IPrincipal implementiert, und es der Anwendung für eine bestimmte Gruppe von Anforderungen zuweisen (wodurch Sie auf Seiten wie Page.User.IsAuthenticated zugreifen können). Außerdem erwartet es, dass ein FormAuthenticationTicket erstellt und festgelegt wird (dies betrifft Cookies und was nicht.) Diese Dinge können über die Anmeldeanbieter ODER manuell erledigt werden.
Jetzt, hier ist das lustige Zeug.
Um den FORMS-Authentifizierungsmodus und den deaktivierten anonymen Zugriff zu verwenden, müssen Sie lediglich den Benutzer automatisch mit der über die LOGON_User-Variable an die Anwendung übermittelten Information an das System anmelden (ein FormsAuthentication-Cookie generieren). Dazu können Sie überprüfen, ob der Benutzer authentifiziert wurde, oder die Global.asax-Methode um eine neue Gruppe von Anforderungen (z. B. application_authenticatrequest oder application_sessionstart)
Alternativ können Sie den anonymen Zugriff zulassen, aber die FORMS-Authentifizierung ausführen lassen gegen Ihren AD-Server: http://msdn.microsoft.com/en-us/library/ms998360.aspx
Wenn Sie die Formularauthentifizierung verwenden, sollten Sie für den Anmeldebenutzer HttpContext.Current.User aufrufen, nicht LOGON_USER –
LOGON_USER wird nur für eine 401-Antwort bereitgestellt. Andernfalls hat der Browser keinen Grund, ihn zu senden (sicher, dass er auf dem Client konfiguriert werden kann, aber nicht garantiert ist). – jcolebrand