2012-06-18 20 views
6

En una aplicación ASP.NET MVC 4 que utiliza .NET Framework 4.5 junto con Azure Access Control Service (ACS), deseo proporcionar a los usuarios múltiples posibilidades de autenticación (es decir, Google, Facebook, Windows Live, etc.). ¿Cuál es la "mejor práctica" para asociar un único usuario a múltiples proveedores de identidad?Asociar varios proveedores de identidad basados ​​en notificaciones a un usuario con ASP.NET

Por ejemplo, supongamos que el usuario inicia sesión con Google un día, luego va a otro navegador al día siguiente e inicia sesión con Facebook. ¿Cómo sabría asociar el inicio de sesión de Facebook con el inicio de sesión de Google anterior al mismo usuario?

Respuesta

2

Si usa ACS, puede traducir la información de cada IdP (por ejemplo, Gogle, Yahoo !, FB, etc.) a un identificador común utilizando la transformación de notificaciones en ACS. Un uso común que las personas usan es el correo electrónico de los usuarios. Pero si desea aceptar muchos correos electrónicos de mapeo para el mismo usuario, entonces sería introducir su propia identificación única (como un reclamo) y el mapa IdP suministra reclamaciones en él:

  • [email protected] (correo electrónico - Google) -> (UserId - YourApp) user_1234
  • [email protected] (correo electrónico - Yahoo!) -> (UserId - YourApp) user_1234
  • 64746374613847349 (NameIdentifier - LiveID) -> (UserId - YourApp) user_1234

Puede automatizar este a través de la API ACS. También debería manejar la primera vez que el usuario inicia sesión en su sitio (por ejemplo, solicitando al usuario un correo electrónico y enviando un mensaje de confirmación que activará la asignación).

Presumiblemente, está utilizando esta información para recuperar datos de una base de datos local en su aplicación, de lo contrario, podría simplemente codificar todo en las reclamaciones y no preocuparse por ninguna equivalencia. Las reclamaciones suelen ser un buen lugar para codificar datos de perfil comunes. (por ejemplo, Roles, etc.)

+0

Mis pensamientos fueron usar una base de datos específica de la aplicación para contener datos específicos del usuario (en otras palabras, reclamos). Con la funcionalidad Identity basada en notificaciones .net 4.5, ¿podría tomar las afirmaciones que ACS genera para mí y agregarle algunas reclamaciones personalizadas (una vez que asocie la identidad IdP a la identidad específica del sitio)? – Hallmanac

+0

Puede agregar los reclamos personalizados en su aplicación (consulte "ClaimsAuthenticationManager") o simplemente puede almacenar esos reclamos personalizados en ACS. (Como reglas: [email protected] -> (SomeClaim) somevalue). Aquí está el enlace para ClaimsAuthnManager: http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimsauthenticationmanager.aspx –

+1

¿Qué tal un ejemplo real de hecho? – Adaptabi

3

No busque más que el stackoverflow en sí mismo como un buen ejemplo de esto. Haga clic en su perfil de usuario y luego seleccione "mis inicios de sesión".

Cuando un usuario crea su cuenta, selecciona el proveedor de identidad que desea utilizar para iniciar sesión. Bajo el capó, su aplicación crea una nueva ID de usuario única específica del sitio y la vincula con una ID única proporcionada por un tercero . (Puede usar el correo electrónico, pero la mayoría de los proveedores de identidad también proporcionarán un reclamo único de ID de usuario que no cambia, incluso si el usuario cambia su correo electrónico)

Ahora, después de que el usuario haya iniciado sesión, tienen una administración de cuenta panel de control a través del cual pueden establecer enlaces adicionales a otros proveedores de identidad.

veo dos opciones para lograr esto:

  1. haga que su aplicación MVC persistir enlaces de cuenta. Cuando un usuario inicia sesión, consulta el almacén de enlaces de su cuenta utilizando el reclamo de ID exclusivo de un tercero y resuelve el ID de usuario único específico de su sitio.

  2. Utilice el motor de reglas ACS. Debería crear una regla por enlace de cuenta. Por ejemplo, digamos que puedo acceder con cualquiera de Gmail o LiveID y mi única ID es 1234. Los dos reglas se ven así:

Para el tipo único reclamo de salida ID, se puede elegir entre los tipos de notificaciones disponibles o designar su propio. ACS tiene un OData based management service que puede usar para crear estas reglas programáticamente desde su aplicación MVC. Aquí hay un code sample.

+0

Con el motor de reglas de ACS, ¿hay algún tipo de almacenamiento de persistencia dentro de ACS que me permita asociar identificadores específicos del sitio con IdP Id a través de las reglas? No he visto eso. – Hallmanac

+0

El motor de reglas de ACS es efectivamente su tienda de persistencia en el sentido de que persistirá en las reglas que le agregue. Sin embargo, no puede vincular el motor de reglas de ACS para obtener reclamos de un almacén de datos externo (como puede hacerlo con ADFS). –

Cuestiones relacionadas