personalizados - roles en c#



Uso de OpenID(a través de DotNetOpenAuth) junto con roles de usuario y otras características del proveedor de membresía (1)

Estoy construyendo un sitio MVC de ASP.NET donde quiero usar DotNetOpenAuth para implementar el inicio de sesión de OpenID (estoy eliminando completamente el nombre de usuario / inicio de sesión basado en contraseña).

Hasta ahora, he estado escribiendo mi código para el sistema de nombre de usuario / contraseña predeterminado con el proveedor de membresía ASP.NET, utilizando el sistema de roles, el sistema de perfil y el sistema de registro básico. Ahora, en mi migración a OpenID, estoy previendo algunos problemas, específicamente con la interfaz con los controles de membresía proporcionados por el proveedor de membresía ASP.NET .

Al observar el ejemplo de DotNetOpenAuth MVC, veo que las únicas referencias al sistema FormsAuthentication son crear un AuthCookie y luego llamar a FormsAuthentication.SignOut() . Por lo tanto, no estoy seguro de si puedo usar las funciones del proveedor de membresía ASP.NET con este sistema OpenID, aunque otra parte del código de ejemplo llama a User.Identity.IsAuthenticated .

¿Se interconectará este sistema OpenID con el proveedor de membresía ASP.NET? Si no, ¿puedo arreglar eso de alguna manera?

Si lo anterior es completamente imposible, creo que mi próximo curso de acción sería simplemente rodar mis propias tablas de base de datos y escribir manualmente el código para usarlas desde el controlador de mi Cuenta. Me di cuenta de que Stack Exchange Data Explorer adopta este enfoque, pero ¿sería este el curso de acción correcto?

EDITAR: Solo para estar seguro de que estoy usando la terminología correcta, por "Proveedor de membresía ASP.NET", me refiero al proveedor que usa las tablas generadas por la herramienta aspnet_regsql.exe .


Answer #1

Se conectarán bien, pero tendrá que hacer un poco de trabajo personalizado.

Lo que he hecho en el pasado es esto:

Primero, asumo que tiene una implementación semi abierta de openid, lo que significa que puede recibir la identidad real de un proveedor de openid, pero simplemente no está seguro de qué hacer con ella.

Continúo usando FormsAuthentication como back-end, incluso sin usarlo para la autenticación.

Necesitará una tabla de base de datos que le permita vincular a un usuario de FormsAuthentication a uno o más openids. Simplemente puede almacenar el nombre de usuario de FormsAuthentication (que aún no existe) con la URL de identidad que recibe del proveedor de openid. Llamaremos a esta mesa AUTH

Cuando alguien se autentica en su sitio con una verificación openid si existe en la tabla AUTH. Si no es necesario hacer dos cosas. Llame a Membership.CreateUser () pasando cualquier nombre de usuario generado que desee (o la dirección de correo electrónico si es provisto por openid). Utilizo un GUID para la contraseña ya que no se utilizará. Al mismo tiempo, coloque una entrada en la tabla AUTH que asigne el nombre de usuario de Membership a la identidad reclamada de openid.

Cuando alguien se autentique en su sitio con un ID abierto y ya exista, llame a FormsAuthentication.RedirectFromLoginPage con el nombre de usuario asociado con el openid y se establecerán todos los tickets de autenticación apropiados.

Ahora puede usar todos los objetos de seguridad integrados agradables como siempre podría antes de implementar openid.

EDITAR: Como beneficio adicional de esta configuración, tiene la opción en el futuro de permitir inicios de sesión de nombre de usuario / contraseña.

También puede cambiar su proveedor de membresía en cualquier momento.

Además, la naturaleza muchos a uno de la tabla AUTH le permite asociar fácilmente múltiples openids.





dotnetopenauth