11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
elimina questa cosa, non ce n'è bisogno.
if(request.Cookies("utente_logato_sul_dansof").value="nessuno") then
response.Redirect("pagina_identificazione.aspx")
end if



se la pass è corretta viene creato un cookie
sicuramente ci sono dei modi piu' efficaci.

Questo problema è stato già risolto. Nel web.config hai già impostato tutto quel che serve:
  • Con l'elemento <form> hai abilitato la forms authentication per riconoscere gli utenti dopo il login;
  • Con l'elemento <authorization> hai fatto in modo che solo gli utenti loggati possano accedere alle pagine che si trovano nella directory /Admin.



Ma al momento cio' che desidero sapere è se esiste la possibilita' di NON mettere la parte di identificazione su ogni pagina. Bensi fare in modo che il web config faccia tutto questo.

L'abbiamo già risolto. Hai verificato che una pagina aspx che si trova sotto /Admin sia accessibile solo da utenti loggati?

A questo punto il prossimo passo consiste nel memorizzare lo username e l'hash della password nel database.
Ecco un esempio che ti mostra come ci si collega a un database Access. Non è un'applicazione ASP.NET ma un'applicazione console. Comunque non cambia nulla: il codice per accedere al db è lo stesso.
https://www.c-sharpcorner.com/UploadFile/puranindia/ado-net-application-using-ms-access-2007-database/

ciao,
Moreno
Modificato da BrightSoul il 21 febbraio 2019 14:28 -

Enjoy learning and just keep making
254 messaggi dal 01 agosto 2003
grazie Moreno
ma come faccio a collegarmi al database
dal web confing?
e come faccio a selezionare la tabella sempre dal web confing?

grazie

victor
11.886 messaggi dal 09 febbraio 2002
Contributi
Non devi farlo "dal web.config" ma dal file di codice della tua pagina aspx. Spesso nel web.config si mette giusto la stringa di connessione al database, ma non per forza.
Il codice per accedere al database è nel link che ti ho postato.
https://www.c-sharpcorner.com/UploadFile/puranindia/ado-net-application-using-ms-access-2007-database/

Enjoy learning and just keep making
254 messaggi dal 01 agosto 2003
è proprio questo che non volevo
ovvero intervenire su OGNI mia pagina
avrei voluto che dal web confing si facesse tutto
come se il web confing guardasse un po tutte le pagine
e intercettasse quando un utente accede.
grazie

victor
333 messaggi dal 05 novembre 2012
victor8872,

scomponi il tuo problema in due parti:

1) Gestire l'autenticazione e le autorizzazioni (prima richiesta)

Questa parte dovresti averla risolta

BrightSoul ha scritto:

...

se la pass è corretta viene creato un cookie
sicuramente ci sono dei modi piu' efficaci.

Questo problema è stato già risolto. Nel web.config hai già impostato tutto quel che serve:
  • Con l'elemento <form> hai abilitato la forms authentication per riconoscere gli utenti dopo il login;
  • Con l'elemento <authorization> hai fatto in modo che solo gli utenti loggati possano accedere alle pagine che si trovano nella directory /Admin.



Ma al momento cio' che desidero sapere è se esiste la possibilita' di NON mettere la parte di identificazione su ogni pagina. Bensi fare in modo che il web config faccia tutto questo.

L'abbiamo già risolto. Hai verificato che una pagina aspx che si trova sotto /Admin sia accessibile solo da utenti loggati?
...


2) Gestione degli utenti da database (nuova richiesta)

Adesso, in base alla nuova esigenza, vuoi sostituire la gestione degli utenti nel web.config

<credentials passwordFormat="Clear">
   <user name="paolino" password="paperino" />
   <user name="paperon" password="depaperoni" />
</credentials>

con una gestione più sicura nel database...il resto rimane invariato

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <!-- Altre eventuali impostazioni -->

  <system.web>
    <customErrors mode="Off"/>
    <authentication mode="Forms">
      <forms name=".MYSITEAUTH" loginUrl="https://thomasart.it/public/prova_autenticazione/Login.aspx" protection="All" >
      </forms>
    </authentication>

    <authorization>
      <allow users="*" />
    </authorization>

  </system.web>

  <location path="Admin">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

</configuration>


Per fare questo hai fondamentalmente due strade

- la prima è di utilizzare implementazioni già esistenti, es. ASP.NET Identity (CONSIGLIATO)

BrightSoul ha scritto:

Certo, per nuove applicazioni dovresti usare ASP.NET Identity che include tutti i più moderni accorgimenti per conservare i dati dei tuoi utenti (password comprese) in sicurezza.
E' più complicato da usare rispetto alla soluzione che hai ora ma del resto la questione che riguarda la sicurezza non è lei stessa semplice da affrontare.
Qui su aspitalia abbiamo scritto varie cose; puoi iniziare da questa.
https://www.aspitalia.com/articoli/asp.net4.5.1/security-asp.net-mvc-identity.aspx

- creare la tua soluzione custom

BrightSoul ha scritto:

A questo punto il prossimo passo consiste nel memorizzare lo username e l'hash della password nel database.
Ecco un esempio che ti mostra come ci si collega a un database Access. Non è un'applicazione ASP.NET ma un'applicazione console. Comunque non cambia nulla: il codice per accedere al db è lo stesso.
https://www.c-sharpcorner.com/UploadFile/puranindia/ado-net-application-using-ms-access-2007-database/


/Ciao

Alessio
11.886 messaggi dal 09 febbraio 2002
Contributi

ovvero intervenire su OGNI mia pagina

Non devi intervenire in ogni pagina. L'accesso al database lo fai solo al login, quando l'utente immette username e password. Dopo aver fatto questo, il riconoscimento dell'utente viene fatto per mezzo del cookie di autenticazione emesso all'atto del login.

Guarda il codice che avevi usato... non lo abbiamo mica ripetuto in ogni pagina.
If FormsAuthentication.Authenticate(txtUser.Text, txtPass.Text) Then
 'Se sì, imposto il cookie di autenticazione e reindirizzo l'utente alla homepage
  FormsAuthentication.SetAuthCookie(txtUser.Text, False)
  Response.Redirect("/")
End If


Adesso che vuoi usare il database, andrà sostituito l'if con quest'altro.
If CredenzialiValide(txtUser.Text, txtPass.Text) Then
 'Se sì, imposto il cookie di autenticazione e reindirizzo l'utente alla homepage
  FormsAuthentication.SetAuthCookie(txtUser.Text, False)
  Response.Redirect("/")
End If


Dove CredenzialiValide è una Function che dovrai implementare e che al suo interno conterrà la query al database per verificare se username e password sono corrette.

Ripeto, il codice di connessione al database NON va ripetuto in ogni pagina. ASP.NET sa già se l'utente è loggato o no grazie al cookie di autenticazione emesso grazie a FormsAuthentication.SetAuthCookie.

Enjoy learning and just keep making
254 messaggi dal 01 agosto 2003
Ciao Moreno
facciamo finta che tutte le pagine aspx si trovino nella cartella
prova_autenticazione

attualmente nel web confing ho questo
 forms name=".MYSITEAUTH" loginUrl="https://thomasart.it/public/prova_autenticazione/Login.aspx" protection="All" >


quindi vuol dire che se un estraneo arriva nella pagina login.aspx
viene reindirizzato a logarsi.

E se un utente arriva in qualche altra pagina dentro la cartella prova_autenticazione?
cosa succede?
come faccio a fare in modo che CHIUNQUE arrivi in QUALSIASI pagina venga reindirizzato al logarsi?

Ho provato a mettere degli altri file aspx dentro la cartella prova_autenticazione
ma senza nessun effetto.

devo per forza mettere in ogni pagina questo?



   Sub btnClick(obj As Object, e As EventArgs)
  
       'Verifico se user e password sono corretti
        If FormsAuthentication.Authenticate(txtUser.Text, txtPass.Text) Then
            'Se sì, imposto il cookie di autenticazione e reindirizzo l'utente alla homepage
            FormsAuthentication.SetAuthCookie(txtUser.Text, False)
            Response.Redirect("https://linkcorretto.aspx")
      ELSE
      response.Write("dati errati")
        End If
    End Sub



grazie mille

victor
333 messaggi dal 05 novembre 2012
quindi vuol dire che se un estraneo arriva nella pagina login.aspx
viene reindirizzato a logarsi.

Login.aspx è già la pagina di login dove l'utente inserisce le proprie credenziali per loggarsi.
Se un utente tenta l'accesso in una pagina protetta l'applicazione verifica la presenza del cookie di autenticazione,
- se esiste significa che l'utente si è già autenticato in precedenza e mostra la pagina
- se non esiste viene reindirizzato alla pagina di login (che poi è la url configurata nel web config form loginUrl) per l'immisione delle credenziali, se le credenziali fornite sono valide crea il cookie per gli accessi successivi e mostra la pagina

come faccio a fare in modo che CHIUNQUE arrivi in QUALSIASI pagina venga reindirizzato al logarsi?

se vuoi lasciare l'accesso pubblico in tutto il sito ad esclusione delle pagine contenute nella cartella prova_autenticazione

1) Sposta la pagina Login.aspx fuori dalla directory prova_autenticazione (aggiorna la loginUrl del nodo forms)

2) Aggiorna il web.config come segue
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <!-- Altre eventuali impostazioni -->

  <system.web>
    <customErrors mode="Off"/>
    <authentication mode="Forms">
      <forms name=".MYSITEAUTH" loginUrl="https://thomasart.it/public/Login.aspx" protection="All" >
      </forms>
    </authentication>

    <authorization>
      <allow users="*" /> <!-- Consente l'accesso a tutte le pagine per tutti gli utenti -->
    </authorization>

  </system.web>

  <location path="prova_autenticazione"> <!-- Blocca l'accesso a tutte le pagine della cartella per gli utenti anonimi (non autenticati) -->
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

</configuration>

devo per forza mettere in ogni pagina questo?

no, come già indicato da Moreno va SOLO nella pagina di login

/Ciao
Modificato da scioCoder il 21 febbraio 2019 18:18 -

Alessio

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.