2012-06-18 11 views
6

In 4 applicazione ASP.NET MVC utilizzando il framework .NET 4.5 in combinazione con Azure servizio di controllo di accesso (ACS), voglio fornire agli utenti molteplici possibilità di autenticazione (cioè Google, Facebook, Windows Live, ecc.). Qual è la "migliore pratica" per associare un singolo utente a più provider di identità?molteplici reclami associati a base di provider di identità di un utente con ASP.NET

Per esempio, dicono che l'utente accede con Google un giorno, poi passa a un altro browser il giorno successivo e registra con Facebook. Come faccio a sapere di associare il login di Facebook con il precedente accesso Google allo stesso utente?

risposta

2

Se si utilizza ACS, è possibile tradurre le informazioni da ciascun IdP (ad esempio, Gogle, Yahoo !, FB, ecc.) In un handle comune utilizzando la trasformazione delle attestazioni in ACS. Un uso comune delle persone è l'e-mail degli utenti. Ma se si desidera accettare molte e-mail di mappatura per lo stesso utente, allora si sarebbe introdurre il proprio ID univoco (come un credito) e mappare IdP fornito affermazioni in esso:

  • [email protected] (e-mail - Google) -> (UserId - YourApp) user_1234
  • [email protected] (email - Yahoo!) -> (UserId - YourApp) user_1234
  • 64746374613847349 (NameIdentifier - LiveID) -> (UserId - YourApp) user_1234

È possibile automatizzare questo attraverso ACS API. Probabilmente dovresti anche gestire la prima volta che l'utente accede al tuo sito (ad esempio chiedendo all'utente di inviare un'e-mail e inviando un messaggio di conferma che attiverà la mappatura).

Presumibilmente, si stanno utilizzando queste informazioni per recuperare i dati da un database locale nella propria app, altrimenti, si potrebbe semplicemente codificare tutto nelle attestazioni e non preoccuparsi di eventuali equivalenze. I reclami sono spesso un buon posto per codificare i dati del profilo comune. (ad esempio, ruoli, ecc.)

+0

I miei pensieri erano di utilizzare un database specifico dell'applicazione per contenere dati specifici dell'utente (in altre parole, affermazioni). Con la funzionalità Identity basata sulle attestazioni .net 4.5, potrei prendere le affermazioni che ACS genera per me e aggiungervi alcune dichiarazioni personalizzate (una volta che associo l'identità IdP all'identità specifica del sito)? – Hallmanac

+0

È possibile aggiungere le attestazioni personalizzate nella propria app (consultare "ClaimsAuthenticationManager") o semplicemente archiviare tali richieste personalizzate in ACS stesso. (Come regole: [email protected] -> (SomeClaim) somevalue). Ecco il link per il ClaimsAuthnManager: http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimsauthenticationmanager.aspx –

+1

Che dire di un vero esempio fatto? – Adaptabi

3

Non cercate oltre a StackOverflow stesso per un buon esempio di questo. Fai clic sul tuo profilo utente e seleziona "I miei accessi".

Quando un utente crea il proprio account, seleziona il provider di identità che si desidera utilizzare per accedere. Sotto il cofano, l'applicazione crea un nuovo ID utente univoco specifico del sito e lo collega a un ID univoco fornito da terze parti . (È possibile utilizzare l'e-mail, ma la maggior parte dei provider di identità fornirà anche un ID utente univoco che non cambia, anche se l'utente cambia la propria e-mail)

Ora, dopo che l'utente ha effettuato l'accesso, ha una gestione dell'account pannello di controllo attraverso il quale possono stabilire collegamenti aggiuntivi con altri fornitori di identità.

vedo due opzioni per il raggiungimento di questo:

  1. avere la vostra applicazione MVC persistere link di account. Quando un utente effettua l'accesso, esegui una query sul tuo negozio di link dell'account utilizzando la richiesta di ID univoco di terze parti e risolvi l'ID utente univoco specifico del sito.

  2. Utilizzare il motore di regole di ACS. Dovresti creare un collegamento per regola per account. Ad esempio, consente di dire che posso accedere sia con Gmail o LiveID e la mia ID univoco è 1234. Due regole simile a questa:

Per l'unico tipo di output pretesa ID, si può scegliere tra i tipi di attestazioni disponibili o designa il proprio. ACS ha un numero OData based management service che puoi utilizzare per creare queste regole a livello di codice dall'applicazione MVC. Ecco uno code sample.

+0

Con il motore delle regole ACS, c'è un qualche tipo di archivio di persistenza all'interno di ACS che mi consenta di associare gli ID noti del sito con ID IdP tramite le regole? Non l'ho visto. – Hallmanac

+0

Il motore delle regole ACS è effettivamente il tuo archivio di persistenza, nel senso che persisterà le regole che aggiungi ad esso. Tuttavia, non è possibile collegare il motore delle regole ACS per recuperare le attestazioni da un archivio dati esterno (come è possibile con ADFS). –

Problemi correlati