277 messaggi dal 03 ottobre 2006
Non trovo risposte al seguente problema:
Vorrei impostare in una applicazione basata su web forms e autenticazione owin il fatto che le pagine non siano accessibili finchè non si effettua una login. Quindi vorrei che accedendo al sito si venisse direzionati automaticamente sulla pagina di login.

Per fare questo metto questo nel web.config della root:
<authentication mode="None" />
<authorization>
<deny users="?" />
</authorization>
poi ho il seguente codice dentro il file startup.auth.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login.aspx"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
e ho aggiunto questo sia nel file web.config della root che nello stesso file dentro la cartella Account:
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>

Ma appena accedo al sito, mi genera un loop di redirect infinito alla pagina di login :-(
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
penso che quello che hai fatto sia corretto.


poi ho il seguente codice dentro il file startup.auth.cs

La Owin startup class l'hai creata? E' un file Startup.cs che si trova nella directory principale del progetto e che dovrebbe contenere un codice simile al seguente:
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using TuoNamespace.App_Start;

[assembly: OwinStartup(typeof(TuoNamespace.Startup))]

namespace TuoNamespace
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            Auth.ConfigureAuth(app);
        }
    }
}

La puoi generare velocemente da Visual Studio, facendo tasto destro sul progetto -> Aggiungi -> Nuovo elemento -> Owin Startup class.

ciao,
Moreno

PS. se stai usando i friendly urls, devi togliere .aspx da qui:
LoginPath = new PathString("/Account/Login.aspx"),

Modificato da BrightSoul il 25 febbraio 2019 14:25 -

Enjoy learning and just keep making
277 messaggi dal 03 ottobre 2006
il mio startup.cs è solo un po diverso:
using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(SkipperClub.Startup))]
namespace SkipperClub
{
public partial class Startup {
public void Configuration(IAppBuilder app) {
ConfigureAuth(app);
}
}
}

e questo è il contenuto del file routeconfig.cs
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings, new WebFormsFriendlyUrlResolver());

}

ma che io metta o no .aspx alla fine della istruzione
LoginPath = new PathString("/Account/Login.aspx"),
il risultato non cambia.
Se richiamo la pagina default.aspx lui mi mostra nella barra degli indirizzi questo:
http://nomedelsito/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAcc.... all'infinito

Eppure se cambio questa istruzione:
LoginPath = new PathString("/Account/Login.aspx"),
mettendo per esempio questa
LoginPath = new PathString("Account/Login.aspx"),
mi da errore dicendo che l'indirizzo deve iniziare con il carattere "/" quindi quella istruzione viene recepita.
Ho letto nel web che se metto l'istruzione <deny users="?" /> poi per forza non posso entrare nella Login.aspx e quindi dovrei togliere la <deny users="?" /> ma mi pare una risposta sbagliata perchè mettendo questa
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>

dovrei riuscire a far entrare chiunque nella Login.aspx... o almeno così funzionava perfettamente con l'autenticazione "forms"
Non so che fare...
11.886 messaggi dal 09 febbraio 2002
Contributi
Non riesco a identificare il punto in cui intervenire. Dovresti creare un nuovo progetto WebForms con Visual Studio e selezionare l'autenticazione con account individuali. Poi provi a confrontarlo con il tuo progetto per capire quali sono le differenze.

In alternativa ho visto che funziona anche riabilitando la FormsAuthentication.
Sostituisci questo:
<authentication mode="None" />


Con questo:
    <authentication mode="Forms">
      <forms loginUrl="/Account/Login"></forms>
    </authentication>


Dai un'occhio all'elemento system.webServer/modules perché se usi questa soluzione non devi rimuovere il FormsAuthenticationModule.

Al login, usa questo codice per creare il cookie di autenticazione.
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, username));
var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);

var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
authenticationManager.SignIn(id);
Response.Redirect(Request.QueryString["ReturnUrl"] ?? "/");


ciao,
Moreno
Modificato da BrightSoul il 25 febbraio 2019 21:02 -

Enjoy learning and just keep making
333 messaggi dal 05 novembre 2012
non potrebbe essere questo

<location path="Login.aspx">


da sostituire con

<location path="Account/Login.aspx">


/Ciao

Alessio
11.886 messaggi dal 09 febbraio 2002
Contributi
No, è corretto così perché quel <location path="Login.aspx"> si trova in un web.config all'interno della directory Account.

Enjoy learning and just keep making
333 messaggi dal 05 novembre 2012
Ciao Moreno,

ho riletto il primo post e wmartin ha scritto

e ho aggiunto questo sia nel file web.config della root che nello stesso file dentro la cartella Account:


Potrebbe dipendere da questo?

/ciao

Alessio
277 messaggi dal 03 ottobre 2006
Si Alessio, scusa non sono stato preciso per troppa fretta ma nel web.config che è dentro la cartella "Account" ho messo solo
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>

mentre in quello sulla root ho messo
<location path="Account/Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>

Ora provo la soluzione alternativa di Moreno

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.