Autentisering og autorisering
Sikre Clojure-backend-en med tokenbasert autentisering og rollebasert autorisering ved hjelp av Ring-mellomvare.
Autentisering og autorisering er en gratis leksjon i Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Clojure: funksjonell programmering og backendutvikling på JVM, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.
AuthN kontra AuthZ
To forskjellige ansvarsområder:
- Autentisering (AuthN): hvem er De?
- Autorisering (AuthZ): hva har De lov til å gjøre?
Identiteten må bekreftes før tillatelser kontrolleres.
Hashe passord
Lag aldrire lagre passord i klartekst. Bruk en langsom, saltet hash, for eksempel bcrypt via buddy-biblioteket.
(require '[buddy.hashers :as hashers])
(def stored (hashers/derive "secret123"))
(hashers/check "secret123" stored) ; => trueHva er en JWT?
En JSON Web Token er et signert, selvstendig token som inneholder claims (bruker-ID, roller og utløpstidspunkt). Serveren kan bekrefte det uten et databaseoppslag.
Utstede et token
Ved vellykket innlogging signeres et token som inneholder brukerens claims, med en hemmelig nøkkel.
(require '[buddy.sign.jwt :as jwt])
(defn make-token [user]
(jwt/sign {:user-id (:id user) :role (:role user)}
secret-key))Bekrefte et token
Ved hver forespørsel leses tokenet fra Authorization-headeren, og signaturen bekreftes. Et ugyldig eller utløpt token utløser en feil.
(defn verify [token]
(jwt/unsign token secret-key))Middleware for autentisering
Pakk inn handlerne slik at den bekreftede identiteten legges ved forespørselen, eller returner 401.
(defn wrap-auth [handler]
(fn [request]
(if-let [token (bearer-token request)]
(handler (assoc request :identity (verify token)))
{:status 401 :body "Unauthorized"})))Rollebasert autorisering
Når identiteten er kjent, kontrollerer De rollene før en handling tillates.
(defn require-role [role handler]
(fn [request]
(if (= role (get-in request [:identity :role]))
(handler request)
{:status 403 :body "Forbidden"})))401 kontra 403
Bruk riktig status:
- 401 Unauthorized: ikke autentisert (mangler token eller har et ugyldig token)
- 403 Forbidden: autentisert, men mangler tillatelse
Beskytte ruter
Kombiner middleware med Compojure for å beskytte bestemte endepunkter, samtidig som offentlige endepunkter forblir åpne.
(defroutes app
(GET "/health" [] ok)
(-> (GET "/admin" [] admin-page)
(#(require-role :admin %))
wrap-auth))Tokenets utløp og fornyelse
Angi kort utløp for access tokens for å begrense skaden hvis de lekker, og utsted langlivede refresh tokens for å hente nye uten ny innlogging.
(jwt/sign {:user-id 1 :exp (+ (now) 900)} secret-key)Beste praksis for sikkerhet
Viktige regler:
- Lever alltid autentisering over HTTPS
- Lagres hemmeligheter i miljøvariabler, ikke i koden
- Hash passord med bcrypt/argon2
- Hold access tokens kortlivede
Hurtigsjekk
Test kunnskapene deres om sikkerhet.
Oppsummering
De har lært å sikre en Clojure-backend.
- Hash passord med bcrypt
- Utsted og bekreft JWT-er for tilstandsløs autentisering
- Bruk middleware for AuthN og rollekontroller for AuthZ
- Returner 401 og 403 riktig
Lær deg Clojure med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Autentisering og autorisering» gratis?
Ja – hele teksten i «Autentisering og autorisering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Clojure: funksjonell programmering og backendutvikling på JVM-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.
Hva lærer jeg i «Autentisering og autorisering»?
Sikre Clojure-backend-en med tokenbasert autentisering og rollebasert autorisering ved hjelp av Ring-mellomvare. Du øver på Clojure: funksjonell programmering og backendutvikling på JVM med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Clojure: funksjonell programmering og backendutvikling på JVM?
Ingen tidligere erfaring er nødvendig. Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Autentisering og autorisering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Clojure: funksjonell programmering og backendutvikling på JVM-leksjonen?
Ja. Alle Clojure: funksjonell programmering og backendutvikling på JVM-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Bygge et RESTful API
- Hendelsesdrevne arkitekturer
- Systemutforming og skalerbarhetsmønstre
- Autentisering og autorisering