Hola a todos, no sé si ya habrán solucionado el tema, por las dudas les hago mi aporte, va a ser largo porque por lo que veo hay quizas algunas cosas con las que no están familiarizados algunos (yo no lo estoy del todo, pero como
anerol tuve que aprender a los golpes, sé lo que se siente), ahi les va mi aporte:
Tengo una aplicacion que basicamente hace lo mismo que la de anerol y la de cualquier otra persona: en una intranet, determinado tipo de gente se conecta, se loguea, se le autentica y a partir de ahi comienza a hacer desastres oj oj oj
Una diferencia que tengo con el proyecto de anerol es que en mi intranet hay varias aplicaciones, y antes de que yo llegara, el usuario por lo general, podia usar en el día 3 o 4 de esas aplicaciones, por lo que se volvia un poco tedioso tener que autenticarse en cada una de las aplicaciones, cuando llegué mi Jefe lo primero que me pidió fue que implementara lo que se conoce como "Single Sign On" o la caracteristica de que una persona se loguee con un usuario y un password y luego la "Aplicacion Central" le diga a qué aplicaciones ese usuario tiene acceso, donde le aparece un datagrid con el nombre y la descripcion de las aplicaciones, basta que el usuario haga click en la que quiera y de ahi en adelante ya está autenticado.
En mi caso particular, tengo una aplicacion bastante parecida del tipo que se conecta gente de afuera de la empresa y accede a determinada parte, y luego está la gente de adentro que se conecta a otra parte, yo no hice 2 subdirectorios, simplemente lo puse todo dentro de un directorio, la diferencia está cuando se loguea la persona, que lo paso a explicar:
En primer lugar aqui son medios maniaticos, asi que miren como va la mano:
En el web.config tengo una clave de registro donde está almacenado el string de conexion
encriptado, es decir, nadie que abra el web.config puede ver la cadena de conexion (usuario / password de la bdd incluidos).
Ese string encriptado lo certifico mediante un webservice, mas o menos de la siguiente forma:
Código:
Public Class Datos
Private Shared Function ObtenerConexion() As String
Dim MiWebService As New MiWebService.MiWebMetodo
Dim ConexionOk As String
ConexionOk = MiWebService.Validar(ConfigurationSettings.AppSettings("StrEncrip"))
'Aqui el valor de ConexionOk es el string aun encriptado
'ya que mi webservice lo devuelve encriptado
Dim Desencriptado As String
Desencriptado = Kerberos.Desencriptar(ConexionOk)
Return Desencriptado
End Function
End Class
Bien, toda esta perolata es
solo para obtener el string de conexion que usa el proyecto, para chequear el usuario y, en funcion de el usuario que sea, validarlo, autorizarlo, etc. uso el mismo WebService, tengo una pagina Login.aspx (que original), donde hay para poner usuario y password, los usuarios se dividen en dos categorias: 1 y 2, si es 1, entonces es un usuario de adentro de la empresa, si es 2, es de afuera (imaginálo como estudiantes y eso otro).
Lo que hago es en el evento
click del boton
Entrar que tengo en mi pagina login.aspx es algo como lo siguiente:
Código:
Session("Usuario") = txtUsuario.text
Session("Pass") = txtPass.text
Dim MiWebService As New MiWebService.MiWebMetodo
Dim Ok As Boolean
Ok = MiWebService.ValidarUsuario(Session("Usuario"),Session("Pass"))
If Ok Then
'El usuario es correcto
Else
'El usuario o contraseña son incorrectos
End If
Bueno, esto agregado a la autentificacion por Formularios no?
Como ven, mi metodo de seguridad chequea todo en el webservice, no sé si es el mejor, pero trato de hacerlo, hay un monton de cosas que por tiempo y espacio y no explico muy muy bien, como por ejemplo, la clase Kerberos que utilizo, o cómo es la implementacion del WebService (quizas haya gente que no sepa como implementarlo), como ven soy de hablar mucho, por lo que se volvería interminable si entrara a explicar cada uno de los pasos, pero si alguien necesita "Codigo a la carta" para autentificar usuarios, puedo darle una mano sin problemas, o, lo que creo que sería aun mejor, cualquiera que me diga qué parte de lo que expliqué necesita mas desarrollo de explicacion, no tengo problema en postearlo, por ejemplo, podría pasar el codigo fuente de mi WebService, o de la clase Kerberos (que de hecho me la pasaron por aqui), en mi proyecto implemento un monton de cosas raras (por lo menos para mi), solo algunos detalles a considerar:
Los usuarios y pass los guardo en una BDD, el pass lo guardo encriptado, mi web service usa procedimientos almacenados para obtener los usuarios, los pone en un data set (obtiene un solo usuario obviamente) y usa el For each para comparar el pass encriptado que obtuvo, con el que puso el usuario.
Otro detalle, la clase Kerberos es la que se encarga de encriptar y desencriptar, la tengo implementada tanto en mi proyecto como en el webservice, ya que los dos encriptan y desencriptan...
Si alguno pudo ver, utilizo Desarrollo a 3 Capas, la ventaja para mi principal de esto es aislar el codigo, y reutilizarlo, por ende, cuando algo cae, es mas facil entrar a debugear para ver donde se cayó.
Lo ultimo: desarrollo en VB.net con SQL 2000
Bien, pliz, mi intencion es colaborar como tantas veces lo han hecho, asi que de ultima, veré si puedo postear estas cosas que les digo en las FAQ's de .Net lamentablemente no tengo servidor para subir los archivos relacionados, sino lo haría con mucho gusto...
Espero que les haya servido de algo y que tengan un muy buen Feliz Año Nuevo!!!!!