2013-04-11 9 views
13

Ich habe ein seltsames zeitweiliges Problem mit MVC4/IIS/Formularauthentifizierung.MVC4/IIS/Formularauthentifizierung SSO-Problem

Ich habe ein Paar Websites, die die Kontrolle über SSO übergeben. Die meiste Zeit ist die Übergabe korrekt und der Benutzer wird wie beabsichtigt zur nächsten Seite weitergeleitet. In einigen Fällen wird der Benutzer jedoch aufgefordert, sich erneut anzumelden, obwohl gültige SSO-Informationen gesendet wurden. Die SSO-Methode ist mit dem -Attribut und der web.config verfügt über einen Standorteintrag, der allen Benutzern Zugriff auf /account/sso gewährt.

Es scheint zu auftreten, wenn die Zielwebsite zum ersten Mal getroffen wird - sobald der App-Pool aufgewärmt ist, verschwindet das Problem.

Einige andere Punkte:

1 beide Seiten sind .net 4, so sollte es keine Legacy-Verschlüsselung Probleme sein.
2. Dieses Problem tritt ganz selten (< 10% der Zeit), so dass der Code selbst sollte
3. Hosting ist IIS 7.5 auf Win7x64 lokal Ton sein, und azur - geschieht in beiden Orten
4. Scheint unabhängig sein

<location path="account/sso"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

[Authorize] 
public class AccountController : BaseControllerTestable 
{ 
    public AccountController() 
     : base() 
    { 
    } 

    [AllowAnonymous] 
    public ActionResult SSO(string AuthToken, string Target) 
    { 
     //SSO logic here 

    } 
} 

Irgendwelche Ideen?

+0

Wird der Anmeldebildschirm beim Start einer neuen Sitzung angezeigt? Wie wird das Sitzungszeitlimit für beide Web-Apps festgelegt? haben sie unterschiedliche Anwendungspools? Haben diese Pools eine Recyclingeinstellung? hat die Leistungsindikatoren der Websites beendet und relevante Leistungsindikatoren der Site aufgezeichnet, wie Session-Timeout, Neukompilierung? – Siraf

+0

Klingt definitiv nicht ein Code-Problem. Meine Vermutung wäre entweder Cookie-Timeout, wenn Sie Cookies verwenden, oder App-Pool-Recycling.Fügen Sie eine Ablaufverfolgung in Ihre Authentifizierungslogik ein, wird die SSO-Methode ausgeführt, wenn das Problem auftritt? – Sergey

Antwort

0

Ich glaube, ich schließlich beschlossen haben (wir nur sicher wissen, sobald wir eine geraume Zeit ohne Rezidiv gegeben hatte, dass es intermittierend ohnehin war)

Ein paar Faktoren ins Spiel kam. Zuerst bemerkte ich ein paar statische Elemente (hauptsächlich css + js-Dateien), die in der Authentifizierungsschleife gefangen wurden, obwohl sie frei zugänglich sein sollten. Daher habe ich in web.config eine Standortregel hinzugefügt, um sicherzustellen, dass sie anonymen Benutzern erlaubt waren. Ich habe auch eine Route-Ausnahme hinzugefügt, um favicon.ico-Anfragen für ein gutes Maß zu ignorieren. Dies schien zu verhindern, dass der Code bei der Authentifizierung zum ersten Mal über sich selbst stolperte. Schließlich war der Grund für das zeitweilige Auftreten des Problems ein anderer Fehler, bei dem das Problem nicht auftrat, wenn andere Sitzungen geöffnet waren (db-gesteuert). Dies erklärt, warum der Fehler nur am frühen Morgen passiert ist, dh alle Sitzungen vom Vortag waren abgelaufen.

0

Was ist Ihr BaseControllerTestable? Haben Sie Autorisierung Attribute dort? Ihre Basisklasse wird zuerst instanziiert, bevor sie zu den anderen Methoden der abgeleiteten Klasse gelangt. Also, wenn Sie zufällig [Autorisieren] auf dem Basiscontroller haben, der ein Problem für Sie sein kann.

1

Sie haben ein Autorize-Attribut für Ihre Controller-Klasse, was bedeutet, dass Ihre SSO-Methode über AllowAnonymous und Authorize verfügt. In diesem Fall sieht das Autorize-Attribut so aus, als müsste es entfernt werden.