Announcement

Collapse
No announcement yet.

Probleme mit der Formularbasierte Authentifizierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit der Formularbasierte Authentifizierung

    Hallo,
    folgende Situation:

    Ich möchte das Content Management System nur bestimmten Nutzern zugängig machen. Die Dateistruktur sieht folgender maßen aus:
    <pre>
    / (root)
    default.aspx
    cms (dir)
    default.aspx
    content (dir)
    default.aspx
    <pre>
    Aufbau der web.config Datei:
    </pre>
    01 &lt;configuration&gt;
    02 &lt;system.web&gt;
    03 &lt;!-- Hier stehen die Konfigurationen, die f&uuml;r die gesamte Anwendung gelten --&gt;
    04 . . .
    05
    06 &lt;!- Standarteinstellungen von VS.NET --&gt;
    07 &lt;authentication mode=&quot;Windows&quot; /&gt;
    08 &lt;authorization&gt;
    09 &lt;allow users=&quot;*&quot; /&gt;
    10 &lt;/authorization&gt;
    11 . . .
    12 &lt;/system.web&gt;
    13
    14 &lt;- Konfiguration f&uuml;r das Unterverzeichnis /cms/content --&gt;
    15 &lt;location path = &quot;/cms/content&quot;&gt;
    16 &lt;system.web&gt;
    17 &lt;authentication mode=&quot;Forms&quot;&gt;
    18 &lt;forms name=&quot;.ASPXAUTH&quot; loginUrl=&quot;/cms/default.aspx&quot; /&gt
    19 &lt;/authentication&gt;
    20 &lt;authorization&gt;
    21 &lt;!- alle Benutzer in diesem Verzeichnis m&uuml;ssen angemldet sein -&gt;
    22 &lt;deny users=&quot;?&quot; /&gt;
    23 &lt;/authorization&gt;
    24 &lt;/system.web&gt;
    25 &lt;/location&gt;
    26 &lt;/configuration&gt;
    </pre>
    Wenn ich jetzt versuche eine Seite aus dem Verzeichnis <i>content</i> aufzurufen Bekomme ich eine Fehlermeldung bzw. Konfigurationsfehler.

    Hier die ausgabe:

    <b>Konfigurationsfehler</b>
    Beschreibung: Beim Verarbeiten einer Konfigurationsdatei, die für diese Anforderung erforderlich ist, ist ein Fehler aufgetreten. Überprüfen Sie die unten angegebenen Fehlerinformationen und ändern Sie die Konfigurationsdatei entsprechend.

    <b>Parser-Fehlermeldung:</b> Das Verwenden eines Abschnitts, der als allowDefinition='MachineToApplication' nach der Programmebene registriert ist, verursacht einen Fehler. Dieser Fehler kann von einem virtuellen Verzeichnis verursacht werden, das nicht als Anwendung in IIS konfiguriert ist.

    <b>Quellfehler:</b>
    Rot markiert ist dabei die Zeile 20 &lt;authentication mode="Forms"&lt;

    Leider kann ich nicht mit diesen Information anfangen.

    Wenn ich die Zeile 07 lösche und stattdessen die Zeilen 17 bis 19 an dessen Position verschiebe funktioniert es. Kann man nur einmal <authentication> in ein web.config Datei verwenden?

    Ich habe zu diesem Thema noch eine Frage. Es wird bei dieser Art von Authentifizierung Cookies verwendet. Kann man die Eigenschaften dieser Cookies verändern (Gültigkeitsdauer und so ..).

    Ich sage jetzt schon mal DANK! Stefan

  • #2
    Hallo Stefan,

    ich glaube der Fehler besteht darin, dass du versuchst ein Unterverzeichnis zu schützen. <b>authentication</b> kannst du nur für den gesamten virtuellen Webserver oder für ein virtuelles Verzeichnis anwenden. Du müsstest in diesem Fall also lediglich ein virtuelles Verzeichnis namens <b>/cms/content</b> anlegen.

    <pre>
    &lt;configuration&gt;
    &lt;system.web&gt;
    &lt;authorization&gt;
    &lt;allow users="*" /&gt;
    &lt;/authorization&gt;
    &lt;/system.web&gt;
    &lt;!-- Konfiguration für das Unterverzeichnis /cms/content --&gt;
    &lt;location path = "/cms/content"&gt;
    &lt;system.web&gt;
    &lt;deny users="?" /&gt;
    &lt;/system.web&gt;
    &lt;/location&gt;
    &lt;/configuration&gt;
    </pre>

    So ungefähr müsste es auch ohne virtuelles Verzeichnis laufen (habe ich nicht validiert). Wenn du wirklich unterschiedliche Authorisierungs-Mechanismen einsetzen möchtest, kommst du allerdings um ein neues virtuelles Verzeichnis nicht umher.

    Schöne Grüße

    Jör

    Comment


    • #3
      Hallo Jörg,

      Ich möchte nicht verschiedene Authorisierungs-Mechanismen verwenden. Möchte später vielleicht mal ein Bereich <i>Presse</i> anlegen. Die sollen dann aber nicht auf dasselbe Formular verwiesen werden. Sonder auf das eigens für den Pressebereich.
      Wie geschrieben die Zeilen 07 bis 10 sind von Visual Studio.NET kreiert worden.

      <B>&gt;&gt; ich glaube der Fehler besteht darin, dass du versuchst ein Unterverzeichnis zu schützen.</B>

      Die Zeilen 15 bis 25 stimmen genau mit dem Beispiel aus meinem Buch überein. Dort wird auch ein unter Verzeichnis von (root /) geschützt. Ebenso stimmt die Lokalisation.

      Nur in meinem Buch sieht es wie folgt aus:
      <PRE>
      <b>1. Genereller Aufbau der web.config</b>

      &lt;configuration&gt;
      &lt;system.web&gt;
      &lt;!-- Hier ständen die Konfigurationen, die f&uuml;r --&gt;
      &lt;!-- die gesamte Anwendung gelten --&gt;
      &lt;/system.web&gt;

      &lt;!-- Konfiguration für das Unterverzeichnis secured --&gt;
      &lt;location path = &quot;secured&quot;&gt;
      &lt;system.web&gt;
      &lt;authorization&gt;
      &lt;!-- alle Benutzer in diesem Verzwichnis m&uuml;ssen angemeltet sein --&gt;
      &lt;deny users = &quot;?&quot; /&gt;
      &lt;/authorization&gt;
      &lt;/system.web&gt;
      &lt;/location&gt;
      &lt;/configuration&gt;

      <b>2. fertige web.conf Datei</b>

      &lt;configuration&gt;
      &lt;location path = &quot;download&quot;&gt;
      &lt;system.web&gt;
      &lt;authentication mode = &quot;Forms&quot;&gt;
      &lt;forms Forms=&quot;downloads&quot; Decryptionkey =&quot;12!#$$*7&quot; Loginurl = &quot;/anmelden.aspx&quot; /&gt;
      &lt;/authentication&gt;
      &lt;authorization&gt;
      &lt;deny users = &quot;?&quot; /&gt;
      &lt;/authorization&gt;
      &lt;/system.web&gt;
      &lt;/location&gt;
      &lt;/configuration&gt;
      </PRE>
      Das Problem ist man sieht nicht wie die komplette web.conf aufgebaut ist. Und ob die Zeilen 07 – 10 in von VB.NET kreiert worden sind überhaupt notwendig sind. Darauf hin habe ich die Zeilen 07 bis 10 völlig gelöscht. Aber genau dasselbe!

      <b>&gt;&gt; Du müsstest in diesem Fall also lediglich ein virtuelles Verzeichnis namens /cms/content anlegen.</b>

      Ich werde später die Webseiten auf ein Websever eines Providers laden. Kann ich dort überhaupt virtuelles Verzeichnis einrichten? Zum anderen funktioniert es ja wenn ich die Zeile 07 lösche und stattdessen die Zeilen 17 bis 19 an dessen Position verschiebe funktioniert es ja. Doch dann würden alle geschützten Bereiche bzw. Unterverzeichnisse auf dasselbe Formular verwiesen werden.

      Gruss Stefa

      Comment


      • #4
        Hallo nochmal,

        ich habe mal ein wenig nachgeforscht und folgendes herausgefunden:

        In der machine.config (.NET Version 1.1) steht die section für authentication wie folgt:
        <pre>
        &lt;<b>section</b> name="authentication" type="System.Web.Configuration.AuthenticationConfi gHandler, ..." allowDefinition="MachineToApplication"/&gt;
        </pre>

        <i>MachineToApplication</i> bedeutet, dass dieser Wert nur für Applikationen (in diesem Fall Root) oder virtuelle Verzeichnise verwendet werden kann.

        Daher gehe ich davon aus, das in dem Buch stillschweigend ein virtuelles Verzeichnis vorausgesetzt wurde.

        Frag doch einfach mal nach, ob du bei deinem Provider virt.Verzeichnisse erstellen kannst. Wenn nicht, kenne ich da noch andere gute Provider (mich z.b. ;-)...

        Jör

        Comment


        • #5
          Hey Jörg!
          Ich habe erstmal gleich meinem Provider eine Email geschrieben. Wenn ich es so mache wie Du es schrieben hast, also mit einem virtuellen Verzeichnis, funktionierts!

          Vielen Dank und noch einen schönen Abend!
          Stefa

          Comment

          Working...
          X