Frage

Ich arbeite an einem internen webbasierten Tool für mein Unternehmen.Teil dieses Tools ist eine weitere Anwendung (The Cruise Control Dashboard), die in einem eigenen virtuellen Verzeichnis unter meiner Root-Anwendung ausgeführt wird.

Ich wollte den Zugriff auf diese interne Anwendung einschränken, indem ich die Formularauthentifizierung darauf einrichtete und ein Anmeldeformular in der Stammanwendung hatte.

Ich habe Folgendes in die web.config der Root-Anwendungen eingefügt:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

Allerdings scheint die Formularauthentifizierung nicht zu funktionieren. Sie leitet nicht zurück zur Anmeldeseite, wenn ich direkt auf die Anwendung zugreife.

Ich habe das Gefühl, dass die Tags <allow> und <deny> falsch eingestellt sind.Kann jemand das klären?

War es hilfreich?

Lösung

Möglicherweise müssen Sie meiner Meinung nach auch path="/" in die <forms-Tags einfügen.Entschuldigung, es ist schon eine Weile her, seit ich das getan habe

Andere Tipps

Möglicherweise müssen Sie auch path="/" einfügen

Das war es!

Also, Zusammenfassung, um dies zu tun;

Fügen Sie im Stammverzeichnis web.config Folgendes hinzu:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Dies muss getan werden, da es standardmäßig „AutoGenerate,IsolateApps“ ist.

Zweitens müssen Sie dem Formular-Auth-Cookie in beiden den gleichen Namen geben. Ich habe dies alles in meinem Stammverzeichnis mit dem Standort-Tag gemacht:

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

Endlich:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

Vielen Dank an alle für Ihre Hilfe.Das war ein Knaller.

FormsAuthentication verschlüsselt die Token, die es dem Benutzer gibt, und verschlüsselt standardmäßig unterschiedliche Schlüssel für jede Anwendung.Damit Forms Auth anwendungsübergreifend funktioniert, müssen Sie einige Dinge tun:

Stellen Sie zunächst den Forms Auth-„Namen“ für alle Anwendungen auf den gleichen Wert ein.Dies geschieht mit:

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

Legen Sie fest, dass der „Name“ in den web.configs beider Anwendungen gleich ist.

Zweitens müssen Sie beide Anwendungen anweisen, beim Verschlüsseln denselben Schlüssel zu verwenden.Das ist etwas verwirrend.Als ich dies eingerichtet habe, musste ich lediglich Folgendes zu beiden web.configs hinzufügen:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

Laut Dokumentation ist das der Standardwert, aber bei mir hat es nicht funktioniert, es sei denn, ich habe es angegeben.

Das funktioniert nicht, es ermöglicht dennoch allen Benutzern (authentifiziert oder nicht) den Zugriff.

Ich denke, Sie könnten das Allow-Tag sogar weglassen, da es überflüssig ist.Nur:

<deny users="?"/>

Wo steht dieser Kodex, Jonathan?Meiner Erfahrung nach habe ich ein Login-Steuerelement und im OnAuthenticate-Ereignis würde ich Authenticated auf false setzen ...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

Aber das ist die Verwendung der Microsoft Way

Sie erlauben alle unauthentifizierten Zugriffe.Vielleicht suchen Sie nach so etwas

<deny users="?"/>

Was ist die Dateierweiterung für diese Tempomatanwendung?Wenn es sich nicht um einen Dateityp handelt, für dessen Verarbeitung ASP.NET registriert ist (z. B.jsp, Java usw.), dann fungiert ASP.NET nicht als Authentifizierungsmechanismus (auf IIS 5 und 6).Bei statischen HTML-Dateien übernimmt IIS beispielsweise die gesamte Authentifizierung und Autorisierung und stellt die Datei bereit, ohne die ASP.NET-Isapi-Erweiterung einzubeziehen, sofern Sie keine Platzhalterzuordnung implementiert haben.IIS7 kann den neuen integrierten Pipeline-Modus verwenden, um alle Anfragen abzufangen.Für IIS6 sollten Sie einen Blick darauf werfen Scott Gus Artikel zu diesem Thema.

Keiner der oben genannten Vorschläge hat bei mir funktioniert.Es stellt sich heraus, dass im Stammverzeichnis web.config Folgendes festgelegt ist:

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

und stellen Sie sicher, dass sowohl die Root- als auch die untergeordnete App in system.web vorhanden sind

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

Dadurch wird die IsolateApps-Standardeinstellung deaktiviert.

Dann hat einfach alles funktioniert!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top