2011-06-14 12 views
8

En mi aplicación web, hay ocasiones en que un administrador autenticado puede suplantar a otro usuario válido de un sistema sin tener que conocer la contraseña de ese usuario.seguridad de primavera (3.0.x) y suplantación de usuario

¿Cómo puedo usar Spring Security para dar a los usuarios administradores la capacidad de suplantar a los usuarios normales (no administradores) del sistema?

La documentación de Spring Security no dice nada y no encuentro nada en ninguna parte. Seguramente alguien debe haber resuelto esto.

Gracias!

+0

Estaba leyendo los documentos el otro día ... ¿no hablaron de RunAs? Consulte los documentos y vea si es relevante para usted – MJB

Respuesta

3

Creo que la manera recomendada de hacer esto en la primavera de Seguridad es, con las listas de control de acceso de dominio, consulte GrantedAuthoritySid @

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html

Sin embargo, hacerse pasar por otro usuario es algo más que tener una "identidad delegado" , también se debe considerar las implicaciones en el registro: (¿o ambos)

  • ¿quiere que su registro aparezca como usuario original o usuario suplantado
  • ¿Desea que la "suplantación" muestre solo lo que ve el usuario suplantado, o el superconjunto de permisos del usuario original y el usuario imitado?

Otra posibilidad es crear una función "iniciar sesión como", que esencialmente cambia la identidad principal de la sesión actual o inicia una nueva sesión con la identidad suplantada.

En todo lo anterior, puede abrir un problema de seguridad sin darse cuenta, así que creo que esta es la razón por la que las características de suplantar el estilo no son un lugar común. Por el contrario, los diseños tienden hacia Control de acceso basado en roles (RBAC) o Control de acceso basado en atributos (ABAC). Usando RBAC/ABAC, podría crear una característica de estilo de delegado donde crea atributos/roles delegados, y en los casos especiales donde necesita mostrar el origen/destino de la delegación (por ejemplo, registros de auditoría), los maneja como casos de esquina .

+0

Buena respuesta. Supongo que quiere hacer la función de "iniciar sesión como". – sourcedelica

+0

También podría registrar otras funciones de SpEL para que pueda decir algo como hasRole ('X') &&! IsImpersonating() para evitar que los usuarios administradores que se hacen pasar por otros vean datos confidenciales. –

5

Está en el Spring Security 3 y Spring Security 4 docs acertadamente llamado "Reemplazo de autenticación en ejecución".

AbstractSecurityInterceptor puede reemplazar temporalmente el objeto Autenticación en SecurityContext y SecurityContextHolder durante la fase de devolución de llamada segura del objeto.

0

Si quieres un usuario administrador para poder pasar por otro usuario (por ejemplo, para fines de GC/Testing), echar un vistazo a la SwitchUserFilter

Se proporciona un ejemplo digno de la configuración XML que necesita here

Cuestiones relacionadas