Autenticación y autorización
Proteja su backend de Clojure con autenticación basada en tokens y autorización basada en roles mediante middleware de Ring.
Autenticación y autorización es una lección gratuita de Clojure Functional Programming & JVM Backend Development en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Clojure Functional Programming & JVM Backend Development, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Clojure Functional Programming & JVM Backend Development incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
AuthN vs AuthZ
Two distinct concerns:
- Authentication (AuthN): who are you?
- Authorization (AuthZ): what are you allowed to do?
You must verify identity before checking permissions.
Hashing Passwords
Never store plain passwords. Use a slow, salted hash like bcrypt via the buddy library.
(require '[buddy.hashers :as hashers])
(def stored (hashers/derive "secret123"))
(hashers/check "secret123" stored) ; => trueWhat Is a JWT?
A JSON Web Token is a signed, self-contained token holding claims (user id, roles, expiry). The server can verify it without a database lookup.
Issuing a Token
On successful login, sign a token containing the user's claims with a secret key.
(require '[buddy.sign.jwt :as jwt])
(defn make-token [user]
(jwt/sign {:user-id (:id user) :role (:role user)}
secret-key))Verifying a Token
On each request, read the token from the Authorization header and verify the signature. An invalid or expired token throws.
(defn verify [token]
(jwt/unsign token secret-key))Authentication Middleware
Wrap handlers so the verified identity is attached to the request, or a 401 is returned.
(defn wrap-auth [handler]
(fn [request]
(if-let [token (bearer-token request)]
(handler (assoc request :identity (verify token)))
{:status 401 :body "Unauthorized"})))Role-Based Authorization
Once identity is known, check roles before allowing an action.
(defn require-role [role handler]
(fn [request]
(if (= role (get-in request [:identity :role]))
(handler request)
{:status 403 :body "Forbidden"})))401 vs 403
Use the right status:
- 401 Unauthorized: not authenticated (no/invalid token)
- 403 Forbidden: authenticated but lacks permission
Protecting Routes
Combine middleware with Compojure to guard specific endpoints while leaving public ones open.
(defroutes app
(GET "/health" [] ok)
(-> (GET "/admin" [] admin-page)
(#(require-role :admin %))
wrap-auth))Token Expiry & Refresh
Set short expiry on access tokens to limit damage if leaked, and issue long-lived refresh tokens to get new ones without re-login.
(jwt/sign {:user-id 1 :exp (+ (now) 900)} secret-key)Security Best Practices
Key rules:
- Always serve auth over HTTPS
- Store secrets in environment variables, not code
- Hash passwords with bcrypt/argon2
- Keep access tokens short-lived
Quick Check
Test your security knowledge.
Recap
You learned to secure a Clojure backend.
- Hash passwords with bcrypt
- Issue and verify JWTs for stateless auth
- Use middleware for AuthN and role checks for AuthZ
- Return 401 vs 403 correctly
Preguntas frecuentes
¿La lección «Autenticación y autorización» es gratis?
Sí — el texto completo de «Autenticación y autorización» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Clojure Functional Programming & JVM Backend Development, actualiza a CoddyKit PRO. El curso de Clojure Functional Programming & JVM Backend Development incluye 4 lecciones en total.
¿Qué aprenderé en «Autenticación y autorización»?
Proteja su backend de Clojure con autenticación basada en tokens y autorización basada en roles mediante middleware de Ring. Practicas Clojure Functional Programming & JVM Backend Development con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Clojure Functional Programming & JVM Backend Development?
No se requiere experiencia previa. Clojure Functional Programming & JVM Backend Development en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Autenticación y autorización»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Clojure Functional Programming & JVM Backend Development?
Sí. Cada lección de Clojure Functional Programming & JVM Backend Development incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Creación de una API RESTful
- Arquitecturas orientadas a eventos
- Diseño de sistemas y patrones de escalabilidad
- Autenticación y autorización