Domanda

Qual è la migliore soluzione per implementare il single sign-on in un'applicazione .net? Ho cercato su Google e ho trovato poche soluzioni, ma non sono molto convinto di quelle soluzioni.

L'utente accede al sito Web1 e quindi passa al sito Web2. Come website2 saprà che l'utente ha effettuato l'accesso? Immagino passando un token nell'URL che sarà verificato da website2 nel database per verificarne la validità. Ciò significa che devo eseguire il marshalling di tutti gli URL nel sito Web1 che portano a sito Web2?

In secondo luogo, se l'utente continua a navigare nel sito Web2 per 1 ora, quindi passa al sito Web1. A quel punto la sessione di website1 è scaduta, quindi l'utente vedrà una pagina di accesso, no? Ma questo comportamento è errato in base alla funzionalità Single Sign-On.

È stato utile?

Soluzione

Penso che tu abbia frainteso il funzionamento del single sign-on.

Consideriamo website1 e website2 che vogliono usare il single signon.

Un sito Web di accesso viene creato su identityProvider. Questo è l'unico posto in cui appare una schermata di accesso.

Quando l'utente visita il sito Web1 e sceglie di accedere al sito Web1, invia l'utente alla schermata di accesso su identityProvider. L'utente accede a identityProvider che rilascia il proprio cookie di accesso per il proprio dominio (e forse consente all'utente di salvare le proprie informazioni di autenticazione in modo che non vengano più richieste). Quindi reindirizza il browser al sito Web1 includendo un token nella richiesta da cui il sito Web1 si apre, ottiene le informazioni sull'identità ed esegue i propri bit di accesso (rilasciando il proprio cookie di autenticazione che dura per quanto desidera).

Quindi l'utente visita il sito Web2 e seleziona l'accesso. Website2 rimanda l'utente a identityProvider, che sa già chi è l'utente e, se l'utente ha scelto di salvare le proprie informazioni di accesso, esegue l'autenticazione silenziosa e quindi reindirizza al sito Web2 con un altro token che website2 si apre e quindi esegue i propri bit di accesso.

C'è un sacco di sicurezza attorno ad esso, che limita i token a determinati siti Web, consentendo solo di inviare token a siti Web autorizzati ecc. ecc.

Quindi, per rispondere alle tue preoccupazioni

  1. L'utente accede al sito Web1 e quindi passa al sito Web2. Come website2 saprà che l'utente ha effettuato l'accesso? Non website2 deve prima richiedere le informazioni di autenticazione dal sito single signon.
  2. Ciò significa che devo eseguire il marshalling di tutti gli URL nel sito Web1 che portano al sito Web2? No, a meno che non si trasformi in website1 anche il provider di identità. Anche in quel caso sarebbe doloroso, meglio avere website2 reindirizzare nuovamente al provider di identità se è necessario un token.
  3. In secondo luogo, se l'utente continua a navigare nel sito Web2 per 1 ora, quindi passa al sito Web1. A quel punto la sessione di website1 è scaduta, quindi l'utente vedrà una pagina di accesso, no? - Dipende da come si configura il sito Web1 e da quanto tempo dura il cookie di autenticazione.
  4. Ma questo comportamento è sbagliato secondo la funzionalità Single Sign-On. No non lo è. Single signon non significa che ottieni un token mobile condiviso tra i siti. Ogni sito Web che utilizza il single sign-on crea ancora il proprio cookie di autenticazione. Ciò che potrebbe accadere è se l'utente torna al sito Web1 rileva un cookie di autenticazione scaduto, quindi rimanda l'utente alla pagina di accesso singolo dove viene autenticato (silenziosamente) e un nuovo token viene reindirizzato al sito Web1 che crea un nuovo cookie di autenticazione per sé.

Altri suggerimenti

L'approccio ufficiale di Microsoft è tramite Active Directory Federation Services (che avvolge SAML con autenticazione AD). Ha le caratteristiche che stai cercando, ma forse è troppo pesante per un'applicazione web pubblica.

Suppongo che non si desideri utilizzare l'autenticazione di Windows con Active Directory, ecc. Un metodo consiste nel passare da una sessione autenticata all'altra utilizzando un token di sicurezza sulla stringa di query, come descritto.

Entrambe le applicazioni utilizzano la stessa chiave di crittografia pubblica per codificare / decodificare il token di sicurezza. Come dici tu, questo funziona bene se hai collegamenti di transizione predefiniti limitati tra i siti ma se vuoi essere in grado di utilizzare qualsiasi collegamento di pagina tra le app, dovrai generare questi URL al volo in modo che contengano il token.

Il modo in cui gestisci i timeout è che il token di sicurezza contenga anche un tempo di scadenza. Generi un nuovo token di sicurezza per ogni richiesta di pagina o quando crei un nuovo collegamento tra app.

In genere il token di sicurezza contiene un ID utente e un timeout e il controllo di accesso restituisce l'ID utente o null se il timeout è scaduto.

Non è una soluzione rapida per codificare in modo corretto e sicuro. Forse puoi trovarne uno pre-costruito su Code Project?

È possibile utilizzare diversi meccanismi SSO per diverse applicazioni in base alla propria applicazione.

Tuttavia, ho potuto vedere " SSO out-of-box " servizio da Live, Google, Yahoo, Facebook ecc. per fornire autenticazione supportando SAML. Questo ci aiuterà a sbarazzarci dei problemi mantenendo l'implementazione del nostro servizio SSO.

Se hai bisogno di una comprensione di base del funzionamento di SSO, puoi fare riferimento a qui

Alcuni anni fa MS ha pubblicato un documento all'interno dell'Enterprise - abbiamo installato i campioni ma non l'abbiamo mai implementato per davvero - Single Sign-on

Dai un'occhiata a questo link con l'utilizzo di OAuth e dei social provider, offre una moltitudine di funzionalità di autenticazione già integrate in .Net Video di formazione Microsoft su OAuth e accesso singolo con i social provider

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top