Estoy construyendo una nueva ASP.NET aplicación MVC (en C#) y uno de los requisitos es crear una nueva base de datos de miembros. Para ello, necesitaríamos funciones para administrar los diferentes tipos de miembros y los perfiles para gestionar los metadatos adicionales conectados a cada uno de los miembros. Tan lejos y tan bien, sólo tiene que utilizar el estándar MembershipProvider, RoleProvider y ProfileProvider proporcionada como parte de el .NET Framework.

Sin embargo, el problema es que me gustaría que permiten que los diferentes métodos de autenticación. Me gustaría Cuentas y Credenciales de inicio de Sesión para tener un uno-a-muchos (relación de una cuenta puede tener un número de credenciales de inicio de sesión que se adjunta). Un usuario, por ejemplo, puede tener un OpenID y ActiveDirectory cuenta conectado a su cuenta.

Sin embargo, después de experimentar con un par de maneras en que hemos optado por la MembershipProvider ruta (que se explica cómo se logró una respuesta más abajo).

Mi pregunta es, ¿cómo la gente hacer esto antes y cómo la gente se sugiere que el enfoque? Parece ser algo que se logra en un buen número de sitios, sin embargo, una búsqueda en aquí no devuelve nada sólido para jugar con.

EDIT: Después de mirar alrededor para un buen período de horas durante la noche y esta mañana – todavía no estoy convincinced que descuartizar un solo MembershipProvider habría sido la opción más fácil. ¿Tener múltiples MembershipProviders dar el mismo efecto?

RECOMPENSA de EDICIÓN: sin respuestas, estoy suponiendo que no hay más solución óptima que la he publicado como respuesta. Es este realmente el caso? Estoy ofreciendo una recompensa a intentar y a ver si alguien tiene alguna otra idea sobre esto, y si hay mejores alternativas.

RECOMPENSA ACEPTAR EDIT: creo que WIF es que la respuesta no es aceptada por debajo de, por un .NET 4 de liberación y quizá en otras versiones como probablemente trabaja con 3.5. Aparte de eso, tal vez un masacrados MembershipProvider o adaptar uno todavía puede ser relevante.

InformationsquelleAutor Amadiere | 2010-01-14

3 Comentarios

  1. 16

    En mi opinión, el «camino real» de hacer esto es utilizar la federación con WIF (Windows Identity Foundation, anteriormente Ginebra marco).

    La idea es que se puede separar de autenticación de autorización. La autenticación es realizada por un llamado PTS (Servicio de Token de Seguridad) y gestiona toda la posible mecanismo de inicio de sesión que desea apoyar. Cuando un usuario ha sido autenticado el PTS emite un token que contiene un conjunto de reivindicaciones y de la identidad del usuario.
    Este token se envía al sitio web (que se llama una parte que confía en esta jerga), y el sitio web el que determina qué partes del sitio web el usuario tiene acceso a la base de las reclamaciones en el token. WIF suministros de membresía y el papel de los proveedores que extraer información del token.

    Usted puede leer acerca de la creación de un notificaciones sitio web aquí.

    Una de las ventajas de este enfoque es la separación de los intereses entre la autenticación y la autorización. Usted no necesita ningún tipo de complejos, de pertenencia y roleproviders en su sitio web. Además, el PTS pueden ser reutilizados para autenticar a los usuarios de otras aplicaciones que podría tener sin que tengan que registrarse más de una vez (de manera efectiva el logro de single sign-on)

    La desventaja es que usted tendrá que pasar algún tiempo al estudio de estos conceptos y su codificación PTS. La mente, no es difícil de código de STS con WIF, pero no es un 100% trivial tarea.

    Si me las he arreglado para hacerle cosquillas a su interés, le recomendamos que comience por leer este whitepaper.

    Saludos,

    Klaus

    • Wow, me estaba empezando a escribir mi propia respuesta con WIF como publicó este. Estoy usando una combinación de SQL y Active Directory para autenticar a los usuarios el uso de varios métodos diferentes. WIF es fresca sin embargo, debido a que una vez que el PTS (página de inicio de sesión) se establece que las cuestiones de «tokens» a los usuarios en forma de cookies. Las fichas de identificación de los usuarios y especificar cadenas de información (créditos) acerca de los usuarios. El PTS desacopla la autenticación de la lógica de tu aplicación. Derechos del usuario puede ser leído mediante programación, o puede utilizar una especial ClaimsAuthorizationManager clase para controlar el acceso.
    • WIF ciertamente parece resolver el problema de lo que puedo decir, pero no puede ampliar el alcance de la fijación de precios. Aparentemente no hubo mención de costo (msdn.microsoft.com/en-us/security/aa570351.aspx), sino que aluden a la que está disponible para su descarga para mí a evaluar. Si no es libre (o con la no-más reciente del servidor de ANUNCIOS – I puede tener algunos problemas. Sin embargo, sigue siendo una muy buena respuesta, así que +1
    • WIF va a ser lanzado junto con el .net framework 4.0 se publicó en abril de este año, y por supuesto es gratuito. Ya está disponible para su descarga, y yo lo uso a diario y no he encontrado ningún problemas con ella de ningún tipo.
    • puede descargarlo desde aquí: msdn.microsoft.com/en-us/evalcenter/dd440951.aspx
    • Cool – manchado la descarga, pero la redacción es engañosa. Pero esto es lo suficientemente buena noticia para mí. Gracias por la respuesta. 🙂
  2. 4

    Una idea que hemos seguido es el de crear un personalizado Afiliación /Papel /Perfil de proveedor. Podemos personalizar el inicio de sesión /métodos de autenticación de manera significativa y tener una tabla adicional de inicios de sesión. Esta tabla básicamente contenidos:

    LoginID (Auto-Incremental ID, PK)
    UserID (FK)
    LoginSystemID (FK)
    ...blah blah

    Dentro de lo anterior, el LoginSystemID fue un enlace a un extranjero de la tabla de búsqueda que ayudó a que el sistema para determinar que el servicio de autenticación a utilizar (por ejemplo, Estándar, AD, OpenID, FacebookConnect – etc).

    El problema que nos encontramos fue que el campo nombre de Usuario en el MembershipProvider no podía estar vacío y mientras que en nuestro esquema de todo el mundo tenía un id de usuario (que era su nombre de cuenta), no tiene un nombre de Usuario que fue el único. Tuvimos que conseguir alrededor de esto, por generar un GUID y el uso que. Esto, por supuesto, está oculta para el usuario y un atributo DisplayName de nuestra tabla de Usuarios puede ser mostrado en su lugar.

    Todo esto fue hecho a través de FormsAuthenication (el ANUNCIO de cheques se realiza a través de LDAP de cheques). Sin embargo, una capa adicional (un webform) se añadió con la configuración apropiada dentro de IIS que proporcionan un medio automático de WindowsAuthentication – le redirigir a los que hay en la instancia que se siente el usuario es probable que el ser interno (basado en la dirección IP).

    • 6 años. Probablemente esta no sea la respuesta correcta ahora – dada la madurez del Marco de Identidad que está disponible en ASP.NET (ambos ASP.NET hasta el 4,6 y el Núcleo de 1.0+)
  3. 4

    El uso de un marco estándar cosas. Ver http://blogs.teamb.com/craigstuntz/2009/09/09/38390/

    Usted puede tener un número ilimitado de métodos de autenticación conectado a una cuenta, la magia está en el FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); declaración

    • No estoy muy seguro de cómo funciona esto. Me sale que puedo autenticar a las personas felices, pero no estoy seguro de cómo todos los roles que sería manejable y fácil de mantener. Tal vez me estoy perdiendo algo..?
    • El uso de la autenticación de Formularios y, a continuación, la otra tabla que contenga las claves de los otros métodos de autenticación vinculado a una forma de autenticación de inicio de sesión. por ejemplo, OpenID, ANUNCIOS, etc. Y el control de dichos y hacer el FormsAuthentication.SetAuthCookie La página de inicio de sesión puede tener nombre de usuario/contraseña, openID, xyz campos/botones para apoyar a todos los differtn métodos de firma, Consulte stackoverflow.com/questions/1406021/…

Dejar respuesta

Please enter your comment!
Please enter your name here