2012-03-14 10 views
15

He estado trabajando en una aplicación web en Clojure como un proyecto paralelo, y estoy tratando de averiguar cómo realizar la autentificación de usuario y la autenticación automática. Desde la búsqueda en Google que he hecho, me enteré de sandbar, pero después de leer los dos posts de blog en la barra de arena (Part 1, Part 2), me fui con más preguntas que respuestas. He visto el source code para 4clojure, y por lo que puedo decir, tienen su propia versión, el problema es que el código no se comentó muy bien, en todo caso. Estoy pensando que necesito rodar mi propio sistema y usar sandbar o noir.session para pasar información del usuario. ¿Podría alguien señalarme en la dirección correcta? Siento que me estoy perdiendo algo simple.¿Cuál es la forma preferida de realizar autenticación y autorización de usuario en Clojure?

+0

Aquí hay una charla útil sobre algunos de los problemas con el estado de la seguridad en Clojure: https://www.youtube.com/watch?v=CBL59w7fXw4 –

Respuesta

9

Eché un vistazo a 4clojure login code y creo que está bastante claro cómo funciona la implementación. Básicamente es la autenticación HTTP tradicional. Publique el usuario/pwd en el formulario en una URL, verifique el nombre de usuario y la contraseña y actualice la sesión con la información del usuario que se puede usar para otras solicitudes para verificar si esta sesión es válida para un usuario registrado.

Así es como funciona la mayoría de la autenticación de la aplicación web. Ahora esto es "qué hacer" parte de la situación, para "cómo hacerlo" puede implementarlo usted mismo usando características "primitivas" provistas por el marco web o probablemente use algún software intermedio que haga esto por usted junto con proporcionar algunos ganchos para personalizar un poco la implementación.

8

Para la autenticación, aparte de la obvia "hacer rodar la tuya", encontré que https://github.com/mattrepl/clj-oauth funciona bien si quieres usar OAUTH (por ejemplo, a través de Twitter). Una vez que haya adquirido la información del usuario, almacenarla en algún tipo de objeto de sesión (a través de ring-middleware-session o abstracciones similares) parece ser lo más obvio. Para la autorización, la forma descrita en la publicación de blog a la que vinculó - envolviendo ciertas rutas con un middleware de autorización (o cualquier abstracción que su pila web preferida ofrezca - por ejemplo pre-route en Noir) funciona bien.

10

La biblioteca de Chas Emerick Friend ya está disponible. Todavía es relativamente nuevo, pero parece prometedor y bastante bien documentado.

5

También hay una alternativa a Friend llamada Buddy.

¿Cuál es la diferencia con Friend?

Las funciones de autorización/autenticación de amigos son más de bajo nivel y menos dogmáticas que las de un amigo, y permiten construir fácilmente sobre ellas otras abstracciones de alto nivel. Técnicamente, la abstracción del amigo se puede construir sobre el amigo

Cuestiones relacionadas