2012-10-07 27 views
5

¿Cuál es exactamente el parámetro 'secreto' de la función pyramid.authentication.AuthTktAuthenticationPolicy de Pyramid? El documentation dice que es "(una cadena) usada para la firma de la cookie auth_tkt. Requerido." El tutorial dice que es "una cadena que representa una clave de cifrado utilizada por el mecanismo de 'ticket de autenticación' representado por esta política".pirámide AuthTktAuthenticationPolicy parámetro secreto

¿Qué es auth_tkt cookie signing? ¿Qué es esta maquinaria de 'ticket de autenticación'? ¿Se supone que este secreto es algo que almaceno como un hash en una base de datos o algo así? Estoy realmente confundido.

Respuesta

13

Una cookie de autenticación de tkt es un hash seguro de varias piezas de información, incluido el nombre de usuario y, opcionalmente, una marca de tiempo, pero no la contraseña de usuario. Una vez autenticado, le da una cookie al usuario, y cada vez que el usuario regresa simplemente extrae el nombre de usuario y sabe que es el mismo usuario.

Para mantener esta cookie segura, debe tener un secreto del lado del servidor, sin embargo. Solo un servidor en posesión de ese secreto puede crear estas cookies; si un atacante alguna vez se apoderó de él, podría generar cookies de autenticación para usuarios arbitrarios sin necesidad de conocer las contraseñas de estos usuarios.

El parámetro secret para la política es ese secreto del lado del servidor; es como una contraseña maestra para su servidor. Si ejecuta más de un proceso para su sitio (y con WSGI, por lo general lo hace), debe hacer que sea coherente en todos sus procesos, para asegurarse de que cada proceso pueda verificar las cookies. Puede especificarlo en su archivo de configuración, en su código fuente o en su base de datos; depende de la flexibilidad que necesite, sus políticas de seguridad y si necesita compartir o no el secreto con otros sistemas.

Puede compartir el secreto con otros sistemas en su dominio que también necesitan autenticar a sus usuarios, utilizando el mismo estándar. Apache tiene un módulo mod_auth_tkt, por ejemplo, Plone usa el mismo estándar y, al compartir el secreto, puede proporcionar un inicio de sesión único para sus usuarios en diferentes aplicaciones web.

Tenga en cuenta que cambiar el secreto significa que las sesiones existentes dejan de ser válidas y los usuarios tendrían que volver a autenticarse.

En cualquier caso, las cookies existentes pueden tener una vida útil limitada; la marca de tiempo incrustada limita cuánto tiempo se aceptará como válida si configura el parámetro timeout en la política. Es una buena política establecer un tiempo de espera, combinado con un tiempo de reedición; cualquier usuario que vuelva a visitar su aplicación dentro del tiempo de espera se volverá a emitir una nueva cookie con una nueva marca de tiempo para mantener su sesión fresca. De esta forma, las cookies de sesión expiran automáticamente si los usuarios no regresan y el atacante no puede volver a utilizarlas en otro momento. El parámetro reissue le permite controlar la rapidez con que se emite un nuevo token; vuelva a visitar su servidor dentro de reissue segundos no produciría un nuevo token.

1

El parámetro secreto, por lo que recuerdo, es solo una cadena utilizada como sal para la creación de la cookie. Puedes poner lo que quieras. Tenerlo en tu archivo de configuración debería ser más que suficiente. Guardarlo en la base de datos puede ser exagerado, aunque si quieres invalidar algo creado, supongo que al cambiar el secreto se invalidarán todas las cookies y la creación de la sesión antes de ese cambio.

Cuestiones relacionadas