Funktionel programmering i Clojure og backendudvikling på JVM · Lektion

Godkendelse og autorisation

Sikr din Clojure-backend med tokenbaseret godkendelse og rollebaseret autorisation ved hjælp af Ring-middleware.

Lektion 4 af 413 trin

Godkendelse og autorisation er en gratis Funktionel programmering i Clojure og backendudvikling på JVM-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Funktionel programmering i Clojure og backendudvikling på JVM, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.

AuthN kontra AuthZ

To forskellige problemstillinger:

  • Godkendelse (AuthN): hvem er du?
  • Adgangskontrol (AuthZ): hvad har du tilladelse til at gøre?

Du skal bekræfte identiteten, før du kontrollerer tilladelserne.

Hashning af adgangskoder

Gem aldrig adgangskoder i klartekst. Brug en langsom, saltet hash som bcrypt via biblioteket buddy.

(require '[buddy.hashers :as hashers])

(def stored (hashers/derive "secret123"))
(hashers/check "secret123" stored) ; => true

Hvad er en JWT?

Et JSON Web Token er et signeret, selvstændigt token, der indeholder claims (bruger-id, roller og udløbstidspunkt). Serveren kan verificere det uden et databaseopslag.

Udstedelse af et token

Ved vellykket login signerer du et token, der indeholder brugerens claims, med en hemmelig nøgle.

(require '[buddy.sign.jwt :as jwt])

(defn make-token [user]
  (jwt/sign {:user-id (:id user) :role (:role user)}
            secret-key))

Verificering af et token

Ved hver forespørgsel læser du tokenet fra Authorization-headeren og verificerer signaturen. Et ugyldigt eller udløbet token udløser en fejl.

(defn verify [token]
  (jwt/unsign token secret-key))

Middleware til godkendelse

Pak handlers ind, så den verificerede identitet føjes til forespørgslen, eller der returneres en 401.

(defn wrap-auth [handler]
  (fn [request]
    (if-let [token (bearer-token request)]
      (handler (assoc request :identity (verify token)))
      {:status 401 :body "Unauthorized"})))

Rollebaseret adgangskontrol

Når identiteten er kendt, skal du kontrollere rollerne, før du tillader en handling.

(defn require-role [role handler]
  (fn [request]
    (if (= role (get-in request [:identity :role]))
      (handler request)
      {:status 403 :body "Forbidden"})))

401 kontra 403

Brug den rigtige status:

  • 401 Unauthorized: ikke godkendt (intet eller ugyldigt token)
  • 403 Forbidden: godkendt, men mangler tilladelse

Beskyttelse af ruter

Kombinér middleware med Compojure for at beskytte bestemte endpoints, mens offentlige endpoints forbliver åbne.

(defroutes app
  (GET "/health" [] ok)
  (-> (GET "/admin" [] admin-page)
      (#(require-role :admin %))
      wrap-auth))

Tokenudløb og fornyelse

Sæt en kort udløbstid på adgangstokens for at begrænse skaden, hvis de lækkes, og udsted refresh-tokens med lang levetid, så du kan få nye adgangstokens uden at logge ind igen.

(jwt/sign {:user-id 1 :exp (+ (now) 900)} secret-key)

Bedste sikkerhedspraksisser

Vigtige regler:

  • Servér altid godkendelse over HTTPS
  • Gem hemmeligheder i miljøvariabler, ikke i kode
  • Hash adgangskoder med bcrypt/argon2
  • Bevar adgangstokens kortlivede

Hurtigt tjek

Afprøv din viden om sikkerhed.

Opsummering

Du har lært at sikre en Clojure-backend.

  • Hash adgangskoder med bcrypt
  • Udsted og verificér JWT'er til statsløs godkendelse
  • Brug middleware til AuthN og rolletjek til AuthZ
  • Returnér 401 og 403 korrekt
Gratis at komme i gang

Lær Clojure med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Godkendelse og autorisation” gratis?

Ja — hele teksten til “Godkendelse og autorisation” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Funktionel programmering i Clojure og backendudvikling på JVM-kurset, skal du opgradere til CoddyKit PRO. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Godkendelse og autorisation”?

Sikr din Clojure-backend med tokenbaseret godkendelse og rollebaseret autorisation ved hjælp af Ring-middleware. Du øver dig i Funktionel programmering i Clojure og backendudvikling på JVM med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Funktionel programmering i Clojure og backendudvikling på JVM?

Der kræves ingen tidligere erfaring. Funktionel programmering i Clojure og backendudvikling på JVM på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Godkendelse og autorisation”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Funktionel programmering i Clojure og backendudvikling på JVM-lektion?

Ja. Alle Funktionel programmering i Clojure og backendudvikling på JVM-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Opbygning af en RESTful API
  2. Hændelsesdrevne arkitekturer
  3. Systemdesign og skaleringsmønstre
  4. Godkendelse og autorisation
← Tilbage til Funktionel programmering i Clojure og backendudvikling på JVM