27 messaggi dal 28 novembre 2010
Mi e' stata chiesta un'applicazione che possa lavorare inizialmente in ambiente intranet e successivamente anche sotto internent e qui si pone il dilemma su come implementare l'autenticazione. In questo momento e' configurata come forms e all'avvio parte la solita mascherina di login che viene poi autenticata su tabella di Oracle customizzata. Quello che vorrei riuscire a fare e' riconoscere l'ambiente intranet e bypassare la maschera di login. Ho visto che si possono passare dei parametri iniziale e ho gia' fatto un'applicazione di test per avere utente, dominio e indirizzo ip dalla pagina asp, con questa pensavo di chiamare in fase di startup il load user e autenticarlo al volo, pero' non mi convince avere questi passaggi "in chiaro". Altras soluzione sarebbe il deploy su due ambienti diversi con l'uso di due configurazioni diverse("window" e "forms"), soluzione macchinosa per i deploy e le modifiche. Suggerimenti, correzioni?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, in realtà puoi cavartela senza passare parametri in giro. Infatti, lato server, puoi determinare se l'utente si sta collegando dalla rete locale guardando il suo IP, che puoi ottenere così:

string userIP = Request.UserHostAddress;

Mettiamo che la tua rete locale sia questa 192.168.1.0/24. Controlla se il suo IP appartiene a questa rete così (banalmente)

bool daReteLocale = userIP.StartsWith("192.168.1.");

Se proviene da rete locale lo autentichi, altrimenti gli chiedi le credenziali. Ovviamente occorre che l'utente si colleghi al server usando l'indirizzo locale, o un nome che si risolva con un indirizzo di rete locale (es. http://192.168.1.100/ o http://nomemacchina/).

Non è che sia granché questa soluzione, però. Così negheresti agli utenti la possibilità di disconnettersi e chiunque potrebbe usare il pc di un collega assente e fare quel che vuole con il suo account.

Secondo me dovresti mantenere l'autenticazione form, così ciascun utente mantiene la possibilità di disconnettersi, se vuole.
In più usa questo accorgimento: se l'utente proviene da rete locale, gli setti un cookie di autenticazione con una scadenza incredibilmente lunga, così dopo il primo login resterà loggato per molti giorni (mesi?).
Invece, se l'utente proviene da internet, gli setti un cookie a breve scadenza, a tua discrezione.


EmanueleC70 ha scritto:

la solita mascherina di login che viene poi autenticata su tabella di Oracle customizzata

Ok, quindi non usi il membership provider di Oracle ma un sistema personalizzato di autenticazione?
Modificato da BrightSoul il 23 agosto 2011 21.07 -

Enjoy learning and just keep making
27 messaggi dal 28 novembre 2010
Prima di tutto grazie mille per la risposta, che vado a testare subito.
L'applicazione verra' inizialmente usata sia da utenti dell'azienda, sia da utenti esterni collegati attraverso sessioni "remote" tipo citrix, per cui in rete e mi e' stato chiesto di non costringere l'utente a loggarsi n volte e di renderla piu' immediata possibile, solo in un secondo momento si pubblichera' su web.
Ok, quindi non usi il membership provider di Oracle ma un sistema
 personalizzato di autenticazione?

No non lo uso, l'autenticazione la faccio su una tabella custom che verra' prima generata con i dati di active directory e poi probabilmente da altro server ldap (quando si proporra' all'esterno) contenente altri dati delle nostre anagrafiche, che vorremmo usare per altre applicazioni ed in ogni caso ho adattato un'applicazione di esempio che era basata su tabelle sqlserver.
Modificato da EmanueleC70 il 24 agosto 2011 08.54 -
27 messaggi dal 28 novembre 2010
BrightSoul ha scritto:
Ciao, in realtà puoi cavartela senza passare parametri in giro. Infatti, lato server, puoi determinare se l'utente si sta collegando dalla rete locale guardando il suo IP, che puoi ottenere così:

string userIP = Request.UserHostAddress;


Ho provato (tra l'altro una cosa simile ho visto dopo l'avevo gia' testata) ma risponde con "::1" che chiaramente non mi dice nulla. Tra l'altro volevo testare per maggior sicurezza anche la corrispondenza del dominio e quindi mi passo pure quello.
Modificato da EmanueleC70 il 24 agosto 2011 09.04 -
27 messaggi dal 28 novembre 2010
Ho trovato una simpatica soluzione che ho gia' implementato e mi pare risolva senza costringermi a grosse modifiche:

http://blog.irm.se/blogs/eric/archive/2010/05/09/Supporting-Both-Windows-and-Forms-Authentication-_2800_Post-4-of-X-in-SL4-and-WCF-RIA-Services-series_2900_.aspx

Con questa implementazione installo la stessa applicazione su due siti differenti quello intranet con autenticazione windows e quello extranet con autenticazione forms. Riconoscendo inoltre l'autenticazione windows faccio un'ulteriore controllo sul dominio del client confrontando con il corrispondete campo che ho aggiunto alla mia tabella oracle. Spero possa servire a qualcuno.
11.886 messaggi dal 09 febbraio 2002
Contributi
EmanueleC70:

risponde con "::1" che chiaramente non mi dice nulla


beh, quello è l'indirizzo IPv6 dell'interfaccia di loopback (localhost). Probabilmente ti stai collegando al server, che è sulla tua stessa macchina, usando questo url: http://localhost.

Se l'applicazione girasse su un altro server, o se accedessi usando l'IPv4 locale della tua macchina (es. http://192.168.1.10) Request.UserHostAddress ti restituirebbe un IP più significativo.

Puoi conoscere il tuo Indirizzo IPv4 eseguendo il comando ipconfig dal prompt dei comandi di windows.

EmanueleC70 ha scritto:

Ho trovato una simpatica soluzione che ho gia' implementato e mi pare risolva senza costringermi a grosse modifiche:


Bene così :)
Modificato da BrightSoul il 25 agosto 2011 00.10 -

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.