Vra

Ek gebruik vir vorm verifikasie in my asp.net (3.5) aansoek. Ek is ook met behulp van rolle te definieer wat gebruikers kan toegang wat subgidse van die jeug. So, die pertinente afdelings van my Web.config lêer lyk:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Default.aspx" path="/" protection="All" timeout="360" name="MyAppName" cookieless="UseCookies"  />      
  </authentication>
  <authorization >
    <allow users="*"/>
  </authorization>
</system.web>

<location path="Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

Op grond van wat ek gelees het, behoort dit te verseker dat die enigste gebruikers in staat om toegang te verkry tot die Admin gids sal gebruikers wat is gewaarmerk en die Admin rol toegeken.

Gebruiker verifikasie, die redding van die verifikasie kaartjie, en ander verwante kwessies al die werk boete. As ek die etikette van die Web.config lêer te verwyder, alles werk goed. Die probleem kom wanneer ek probeer om af te dwing dat slegs gebruikers met die Admin rol moet in staat wees om toegang te verkry tot die Admin gids.

Op grond van hierdie MS KB artikel saam met ander webblaaie wat dieselfde inligting, ek het bygevoeg die volgende kode om my Global.asax lêer:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
    if (HttpContext.Current.User != null) {
        if (Request.IsAuthenticated == true) {    
            // Debug#1            
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
            // In this case, ticket.UserData = "Admin"                
            string[] roles = new string[1] { ticket.UserData }; 
            FormsIdentity id = new FormsIdentity(ticket);
            Context.User = new System.Security.Principal.GenericPrincipal(id, roles);
            // Debug#2
        }
    }
}

Maar wanneer ek probeer om aan te meld, kan ek nie toegang tot die gids Admin (kry getrek het om aan te meld bladsy).

Probeer om die kwessie te ontfout, as ek stap vir stap deur 'n versoek, as ek Context.User.IsInRole voer ( "Admin") by die lyn gemerk Debug # 1 hierbo, dit gee 'n vals. As ek dieselfde verklaring by lyn Debug # 2 uit te voer, is dit gelyk aan ware. So ten minste so ver as Global.asax betref, is die rol behoorlik opgedra.

Na Global.asax, uitvoering spring reg om die Teken bladsy (sedert die gebrek aan rol veroorsaak dat die bladsy laai in die gids admin te verwerp). Maar toe ek dieselfde verklaring uit te voer op die eerste lyn van Page_Load van die login, dit gee valse. So iewers na Application_AuthenticateRequest in Global.asax en die aanvanklike lading van die webvorm in die beperkte gids, is die rol inligting verlore gaan, wat veroorsaak dat verifikasie om te misluk (let wel: in Page_Load, die behoorlike verifikasie kaartjie is nog aan Context.User.Id -. net die rol gaan verlore)

Wat doen ek verkeerd, en hoe kan ek dit kry om behoorlik te werk?


Update: Ek het die oplossing hieronder

Was dit nuttig?

Oplossing

Hier was die probleem en oplossing :

Vroeër in ontwikkeling het ek tot die webwerf menu gegaan en het op Asp.net opset. Dit het gelei tot die volgende reël bygevoeg om die Web.config:

<system.web>
  <roleManager enabled="true" />
</system.web>

Van daardie punt op, die jeug is die veronderstelling dat ek rolle doen deur die Asp.net terreinbestuurder, en nie deur FormsAuthentication rolle. So het die herhaalde mislukkings, ten spyte van die feit dat die werklike verifikasie en rolle logika is reg opgestel.

Na hierdie lyn is verwyder van Web.config alles gewerk perfek.

Ander wenke

Dit is net 'n ewekansige skoot, maar jy kry geblokkeer as gevolg van die einde van magtiging vir Admin? Miskien moet jy probeer skakel jou al ontken en jou hele Admin.

Net in geval jy nou oor het deur die ontken.

(Ek het kode monsters in hier, maar hulle was nie vertoon.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top