Godkendelse og autorisation
Sikr din Clojure-backend med tokenbaseret godkendelse og rollebaseret autorisation ved hjælp af Ring-middleware.
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) ; => trueHvad 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
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
- Opbygning af en RESTful API
- Hændelsesdrevne arkitekturer
- Systemdesign og skaleringsmønstre
- Godkendelse og autorisation