2009-04-24 16 views
5

Possiedo un'applicazione Web ASP .NET che utilizza l'autenticazione basata su form. Chiamiamo questa applicazione "Foo". Sto creando un'altra applicazione ASP .NET chiamata "Bar".Trasferimento sicuro utente da un'applicazione ASP .NET a un'altra

Quello che voglio che accada è che l'utente accede a Foo, quindi fa clic su un collegamento che li porta a una pagina nell'applicazione Barra. L'applicazione Bar non dovrebbe richiedere all'utente Foo di accedere nuovamente. L'app di Foo dovrebbe passare il ticket di sicurezza all'app Bar e quindi l'utente può svolgere la propria attività all'interno dell'app Bar.

Voglio anche limitare l'accesso all'app Bar. Pertanto, se un utente tenta di accedere all'app Bar senza aver prima effettuato l'accesso, viene reindirizzato alla pagina di accesso di Foo.

È possibile? Se sì, come posso implementarlo?

+0

Ottima domanda, mi fa piacere vederlo su Stackoverflow! +1! –

risposta

2

L'ho fatto una volta e si trovava tra un sito PHP e un sito ASP.NET (essendo io lo sviluppatore ASP.NET ma conoscendo anche alcuni aspetti di PHP).

Se App1 è il punto di ingresso per l'utente o gli utenti, al momento dell'accesso App1 deve creare una coppia valore-chiave per quell'utente che comprende il nome utente e una chiave generata (ad esempio un GUID). Programmaticamente dovrebbe comunicare con App2 e inviare questa chiave (ad esempio, avviare un thread in background). Diciamo che l'utente JohnDoe accede correttamente all'App1.

App1 genera una chiave (3l3kjlk3j4lkj34, FrancoVerdi) e l'invia a App2 mediante qualche tipo di comunicazione (ad esempio le chiamate tramite un URL HTTP come www.app2.com/SetTempKey.aspx?userId=JohnDoe & chiave = 3l3kjlk3j4lkj34 - una pagina che consentirebbe solo richieste da un determinato IP per motivi di sicurezza).

App2 riceverà la chiave di accesso temporaneo e la memorizzerà. Diciamo che App2 ha la pagina di accesso su www.app2.com/login.aspx.

In app1 verrà generato un collegamento a www.app2.com/login.aspx?tempKey=3l3kjlk3j4lkj34 con un'etichetta decente come "Vai alla nostra app2". Quando l'utente fa clic sul collegamento, viene richiamata la pagina login.aspx su app2. Il controllo della querystring per la presenza del parametro querystring tempKey e quindi il controllo della validità della chiave nelle chiavi temporanee memorizzate app2 rileva che questo REALE è JohnDoe.

App2 lo registra semplicemente chiamando FormsAuthentication.RedirectFromLoginPage ("JohnDoe", true) (prima il nome utente e quindi se il cookie formsAuth deve essere persistente/not_session_lived).

... e questo è praticamente tutto.

+0

OK. Penso che questo potrebbe funzionare. Come suggeriresti di forzare la chiave a scadere? Memorizzerai la data di scadenza nel tuo negozio temporaneo e poi la convalidi quando App2 verifica la validità della chiave? Cosa ne pensi? –

+0

Un criterio di scadenza semplice è quello di memorizzare le chiavi nell'oggetto Cache e al momento dell'inserimento è possibile impostare la scadenza su Scadenza scorrevole o assoluta. (L'oggetto Cache è HttpRuntime.Cache) –

+0

Se hai bisogno di ulteriori informazioni puoi contattarmi. Nel mio profilo troverai il mio indirizzo email. In bocca al lupo! –