7 messaggi dal 25 settembre 2015
Salve,
premetto che sto sviluppando un'applicazione ASP.NET VB utilizzando IDENTITY come modulo per l'accesso alla stessa.
Volevo chiederVi se esiste la possibilità di bloccare l'accesso all'applicazione ad un utente che si è già loggato da un'altra postazione. Io mi immagino che la cosa sia fattibile ma non riesco a trovare nulla in proposito .
Potreste gentilmente mettermi sulla strada per la risoluzione di questo problema ???
Vi ringrazio e Vi chiedo scusa per il disturbo.

Gian Maria
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Gian Maria,
forse la maniera più veloce per farlo consiste nel "buttar fuori" l'altro utente quando un nuovo utente arriva e si logga con le stesse credenziali.
In pratica, prima di useguire il PasswordSignIn, puoi aggiornare il security stamp come vedi in questo script di Marco De Sanctis.
http://www.aspitalia.com/script/1180/Sign-Out-Remoto-ASP.NET-Identity.aspx

Ogni cookie di autenticazione è vincolato al valore del security stamp. Ne consegue che, se lo cambi, i cookie precedentemente emessi smetteranno di essere validi e l'utente non risulterà più autenticato.

...ma non è detto che questa sia la soluzione che preferisci. Magari vuoi impedire un nuovo accesso fintanto che l'altro utente è ancora loggato ma la difficoltà qui è proprio stabilire questo.
Se l'utente aveva fatto il logout, allora puoi stabilirlo con certezza. Se invece non l'aveva fatto, devi per forza di cose attendere un tempo di 20-30 minuti dall'ultima richiesta di pagina prima di considerarlo sloggato. Ecco come capire se l'utente è ancora "connesso" o no.
http://www.aspitalia.com/script/1187/Tracciare-Utenti-Connessi-ASP.NET-Identity.aspx

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 25 settembre 2015
Ti Ringrazio moltissimo,
credo che la prima soluzione possa andare bene per quello che ho in mente.
Davvero molto utile...
Ciao

Gian Maria
7 messaggi dal 25 settembre 2015
Scusami se ti disturbo di nuovo ma credimi non sono riuscito in alcun modo a risolvere il problema. Mi riferisco in particolare alla prima soluzione che mi hai proposto dove mi consigli di aggiornare il securistamp in modo da buttar fuori l'eventuale stesso utente già connesso. (soluzione ottimale per il mio programmino)
Ebbene non riesco a capire dove devo usare questo codice che tra l'altro a me nel progetto è in vb .
Se potresti suggerirmi qualche dettaglio in più te ne sarei grato prima di esaurirmi.
Grazie e scusa di nuovo.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Gian Maria,
nel tuo codice c'è un punto in cui verifichi le credenziali dell'utente con il SignInManager. Nel template per applicazioni web di Visual Studio si trova nell'action Login dell'AccountController.
Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout:=False)

Subito prima di questa riga, metti il codice seguente, che servirà a fare un precontrollo di username e password per capire se il security stamp deve essere rigenerato.
Dim user = Await UserManager.FindByEmailAsync(model.Email)
If (Await UserManager.CheckPasswordAsync(user, model.Password)) Then
    Await UserManager.UpdateSecurityStampAsync(user.Id)
End If

Ora c'è un'impostazione da modificare: ASP.NET Identity non controlla ad ogni richiesta se il security stamp contenuto nel cookie di autenticazione è ancora attuale. Se vuoi fare in modo che l'altro utente venga buttato fuori alla sua prossima richiesta, dobbiamo costringere ASP.NET Identity a fare questo controllo sempre.

Dal file App_Start/Startup.Auth.vb, trova l'opzione validateInterval del CookieAuthenticationProvider ed impostala a TimeSpan.Zero, a significare che non ci deve essere attesa prima di rieffettuare il controllo sul security stamp.
validateInterval:=TimeSpan.Zero,

In questo modo la tua applicazione farà una chiamata al db ad ogni richiesta solo per verificare il security stamp, ma non mi viene in mente altro modo per implementare il tuo requisito. La validità del titolo dell'utente va necessariamente controllata ad ogni richiesta.

ciao,
Moreno

Enjoy learning and just keep making

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.