Divis Blog

Just another geeks blog.

Token noch nicht gueltig

clock Mai 15, 2008 20:50 by author Divi

Nach einiger Zeit, habe ich mal wieder das SecurityToken-Projekt ausgegraben, um das in einem aktuellen Projekt zu verwenden. Als ich das Projekt aber anstieß und mich einloggte, erhielt ich einige Fehlermeldungen. Ich wusste nicht wo diese herkamen und ging deshalb den Code Step-By-Step im Debugger durch. Faszinierenderweise trat der Fehler nicht mehr auf und alles funktionierte anständig. Darum lud ich die Seite erneut und wieder schien alles problemlos zu laufen. Deshalb ging ich zuerst einmal von einem Cache-Problem aus und vergaß das Problem.

Einige Zeit später hatte ich meine Cookies gelöscht und wollte mir ein neues Token ausstellen - doch wieder erhielt ich einige Fehlermeldungen - doch wiederum verschwand der Fehler beim durchsteppen.

Daraufhin beschloss ich über mehrere Stellen im Code Breakpoints zu verteilen und sprang wesentlich schneller von einem zum nächsten, um die Stelle des Fehlers besser eingrenzen zu können. Als ich dann an der entsprechenden Stelle ankam, fand ich folgende Fehlermeldung vor:

"Das SamlToken ist zeitlich nicht gültig. Die aktuelle Zeit "14.05.2008 11:29:21" liegt außerhalb der effektiven Zeit "14.05.2008 11:29:59" und der Ablaufzeit "14.06.2008 11:29:59" des Tokens.

image

Was war passiert? Zuerst dachte ich, ich hätte versehentlich ein Problem in der Datumsberechnung, bis mir auffiel, dass das Token erst einige Sekunden NACH dem Ausstellen gültig wurde. Doch warum? War das eine eingebaute Funktion?

Nach kurzer Suche nach der Fehlermeldung fand ich einen Beitrag im Internet, der das selbe Problem hatte. Er hatte sich aber die Frage schon selbst beantwortet mit: "Ich stelle dann mal die Zeit meines Servers um" ... richtig ... der Dev-Server und mein PC hatten einen Zeitunterschied von ca. 30 Sekunden - deshalb war das Token NOCH nicht gültig, als es bei mir ankam - und deshalb funktionierte das durchsteppen immer, da dies die benötigte Zeit zum gültig werden überschritt, bis ich die entsprechende Stelle erreicht hatte.

Bewertung: 5.0 von 1 Benutzern

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Prozess-Output abfangen

clock Mai 3, 2008 22:39 by author Divi

Als ich neulich an einem privaten Projekt arbeitet, in welchem ich unter anderem Dateien vergleichen musste, stieß ich auf die integrierte "Diff"-Methode von SVN. Um den Vergleich durchzuführen, kann man SVN nach folgendem Schema aufrufen:

svn diff -r ALTE_REVISION:NEUE_REVISION DATEI

und schon erhält man eine Ausgabe der Unterschiede im diff-Format.

 

Um SVN aufzurufen, wollte ich in einer ASP.Net Klasse den Prozess im Hintergrund starten und einfach die Rückgabe abfangen. Leider hatte ich dabei ein kleines Problem. Der Output schien immer leer zu sein.

Als ich mich dann irgendwann nochmal daran versuchte, erhielt ich plötzlich den gewünschten Output. Direkt als ich nach Hause kam, wollte ich diesen Aufruf dann einbauen, doch wiederum schwieg die Rückgabe. Darum überlegte ich mir, wo wohl der Unterschied sein konnte. Zuerst vermutete ich, dass Vista den Output unterdrücken würde, da auf meinem Arbeitsrechner XP läuft, während mein Rechner zu Hause Vista hat. - Die Idee stellte sich aber als falsch heraus, als ich das Programm des Arbeitsrechners auf meinem Heim-PC ausführte... doch da kam ich drauf: Der Unterschied lieg im Anwendungstyp: Während ich das Projekt selbst als Webanwendung aufgesetzt habe, hatte ich das Testprojekt auf dem Arbeitsrechner als Konsolenanwendung erstellt.

Mein Code sah folgendermaßen aus:

 

ProcessStartInfo ps = new ProcessStartInfo("svn", "diff -r 4:6 file:///MEINE_LOKALE_DATEI");
ps.UseShellExecute = false;
ps.RedirectStandardOutput = true;

Process p = new Process();
p.StartInfo = ps;
p.Start();
p.WaitForExit();

string output = p.StandardOutput.ReadToEnd();

 

Der String "output" war hier bei der Webanwendung stehts leer (nicht null), während die Konsolenanwendung den richtigen Output zeigte:

 

Konsole:

image

Webanwendung:

image

 

Das Problem musste ich natürlich lösen, denn ich wollte mein Projekt nicht zu einer Desktop-Anwendung machen. Darum probierte ich ein wenig rum. Zuerst vermutete ich natürlich, dass es Probleme mit dem TrustLevel der Anwendung gab und dass Webanwendungen wesentlich restriktiver behandelt werden würden, aber jegliche Änderungen an den Sicherheitseinstellungen brachten keine Änderungen. Bis ich irgendwann im Internet einen Code-Schnipsel fand und das diesen 1:1 kopierte. Dieser funktionierte auch in der Webanwendung. Jedoch kaum hatte ich den Code wieder an meine Bedürfnisse angepasst und den "sinnlosen" Schrott rausgeworfen, klappte der Code wieder nicht. Darum bin ich dann Step-für-Step durchgegangen und habe dabei rausgefunden, woran es lag:

Die magische Standarteigenschaft der ProcessStartInfo heißt "RedirectStandardError". Kaum hatte ich die in meinem Projekt auf "true" gesetzt, klappte das einfangen:

image

 

HINWEIS:

Als ich diesen Blog-Eintrag hier schreiben wollte, hatte ich zuerst vor eine andere Anwendung als SVN zu verwenden und nahm "PING" stattdessen. Interessanterweise hatte ich plötzlich auch ohne "RedirectStandardError" eine Ausgabe in der Webanwendung:

image

Anscheinend ist es also auch ein wenig von der Art der Anwendung abhängig.

Bewertung: 4.0 von 1 Benutzern

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5