2009-07-28 6 views
1

Ich habe ein Authentifizierungsmodul in ASP.Net erstellt, aber ich möchte nicht, dass die Logik im Authentifizierungsmodul ausgeführt wird, wenn die Ressource für anonymen Zugriff konfiguriert ist, da die Logik teuer ist.Asp.Net-Authentifizierungsmodul

Es gibt Seiten, die eine Authentifizierung im selben Verzeichnis mit Seiten erfordern, die keine Authentifizierung erfordern. Ich habe keine Kontrolle darüber. Gibt es eine einfache Möglichkeit festzustellen, dass eine Ressource so konfiguriert ist, dass vor dem URLAuthorizationModule ein anonymer Zugriff möglich ist?

Momentan mache ich folgendes, was sich "richtig anfühlt". Jede Hilfe wäre willkommen.

public static bool AllowEveryone() 
     { 
      bool rslt = false; 

      AuthorizationSection config = (AuthorizationSection)WebConfigurationManager.GetSection("system.web/authorization"); 
      if (config.Rules != null && config.Rules.Count > 0) 
      { 

       AuthorizationRule r = config.Rules[0]; //doing this based on implementation of urlauthorization module in reflector... 
       if (r.Action == AuthorizationRuleAction.Allow && r.Users.Contains("*")) 
       { 
        return true; 
       } 

       //todo: check for allow anon ? case 


      } 

      return rslt; 
     } 
+0

Es tut mir leid, ich war nicht klar. Die Seite ist bereits gemäß Ihrer Beschreibung konfiguriert. Ich habe jedoch ein benutzerdefiniertes Authentifizierungsmodul. Ich versuche, die Modullogik zu verlassen, bevor ich die Benutzeridentität kenne, wenn die Seite für Benutzer zulassen = "*" oder Benutzer zulassen = "?" – complexcipher

Antwort

2

Ich bin nicht sicher, wie Ihr Code paßt mit der Mitgliedschaft und Role Provider-System in, aber haben Sie versucht, pro-URL-Überschreibungen in der web.config Datei setzen?

<location path="MyAnonymousPage.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
0

In einer regulären ASP.Net Website dieses mit dem folgenden Code erreicht werden kann:

IPrincipal anonUser = new GenericPrincipal(new GenericIdentity(string.Empty, string.Empty), new string[0]); 

bool allowAnon = UrlAuthorizationModule.CheckUrlAccessForPrincipal(requestPath, anonUser, "get"); 

Allerdings habe ich Probleme habe es immer in Sharepoint wie erwartet zu verhalten.