Clojure: funksjonell programmering og backendutvikling på JVM · leksjon

Autentisering og autorisering

Sikre Clojure-backend-en med tokenbasert autentisering og rollebasert autorisering ved hjelp av Ring-mellomvare.

Leksjon 4 av 413 trinn

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) ; => true

Hva 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
Gratis å komme i gang

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

  1. Bygge et RESTful API
  2. Hendelsesdrevne arkitekturer
  3. Systemutforming og skalerbarhetsmønstre
  4. Autentisering og autorisering
← Tilbake til Clojure: funksjonell programmering og backendutvikling på JVM