Frage

Wir versuchen FormsAuthentication auf unserer Website zu implementieren, aber in einem Szenario, das wir nicht in der Lage gewesen, eine Lösung zu finden noch - anders als unsere eigenen Httpmodule zu schaffen und dabei die eigene Logik selbst - so dachte ich, ich‘ d dort die Frage werfen, um zu sehen, ob dies tatsächlich Lösung das einzige ist.

Wir möchten FormsAuthentication auf der benutzerdefinierten Mitgliedschaft Anbieter verwenden, möchte aber für verschiedene Ordner einen anderen Anbieter verwenden. Unsere Website partitioniert diese Abschnitte mit Unterordnern (zB ~ / Admin, ~ / GoldCustomer, ~ / SilverCustomer, ~ / BronzeCustomer), so möchten wir verschiedene Mitgliedschaftsanbieter für jeden Abschnitt / Unterordner verwenden.

: Mit dem Rahmen, dies zu unterstützen, würden wir unsere web.config wie implementieren
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

Dadurch obwohl Ergebnisse im Laufzeitfehler:

Es ist ein Fehler einen Abschnitt als allowDefinition = ‚MachineToApplication‘ über Anwendungsebene registriert zu verwenden. Dieser Fehler kann durch ein virtuelles Verzeichnis verursacht wird, nicht als Anwendung in IIS konfiguriert werden.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

Es scheint, dass der einzige Weg zu erreichen, was wir versuchen, mit einem benutzerdefinierten Httpmodule ist - oder unseren Ansatz ändern (wie die Ordner brechen in verschiedene Web-Anwendungen in IIS nach oben). Ist das richtig, oder bin ich etwas fehlt? Oder gibt es andere Alternativen, die ich bin mir nicht bewusst?

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Zunächst einmal denke ich, rollenbasierte Sicherheit perfekten Sinn für Ihre Anwendung macht, wenn Sie die Kontrolle über die Datenbanken haben. Aber wenn man es nicht ändern kann, es ist ein No-Go.

Die alternative Lösung kann ein Gateway Login-Formulare, die Benutzer umleitet spezifische Login-Formular auf ReturnUrl Abfragezeichen Variable basierend auf den Ordner und das Formular verwenden, um die Provider sie will den Benutzer validieren. Dann verwendet er die FormsAuthentication.RedirectFromLoginPage einen Authentifizierungs-Cookie zu setzen und auf die vorherige Seite umleiten. Sie können die Rollen festlegen und rollenbasierte Sicherheit verwenden, um Zugang zu jedem Ordner mit <authorization> Tag in web.config zu steuern.

Andere Tipps

Ich bin nicht sicher, was Sie versuchen Typen zu tun, aber wie wäre es Rollen für jeden dieser Kunden? Beschränken Sie den Zugriff durch eine Rolle für jeden Unter Ordner aber man müsse noch 1 Mitgliedschaftsanbieter und 1 Rollenanbieter.

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