JWT-autentisering og -autorisasjon
Implementer JWT-basert autentisering og autorisasjon i Spring Cloud Gateway for å sikre API-tilgang.
JWT-autentisering og -autorisasjon er en gratis leksjon i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) på CoddyKit. Dette er leksjon 1 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 API-gateway og reverse proxy (Nginx + Spring Cloud Gateway), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) inneholder totalt 4 leksjoner.
Sikre API-gatewayen din
I en mikrotjenestearkitektur er det svært viktig å sikre API-ene dine. Spring Cloud Gateway fungerer som et sentralt inngangspunkt, noe som gjør det til et perfekt sted å håndheve sikkerhetspolicyer.
Denne leksjonen fokuserer på bruk av JSON Web Tokens (JWT-er) til både autentisering (hvem er denne brukeren?) og autorisasjon (hva kan denne brukeren gjøre?) direkte i Gateway.
Introduksjon til JSON Web Tokens (JWT-er)
Et JSON Web Token (JWT) er en kompakt og URL-sikker måte å representere krav som skal overføres mellom to parter på. Det brukes ofte til autentisering og informasjonsutveksling.
- Tilstandsløs: Serveren trenger ikke å lagre øktinformasjon.
- Selvstendig: Inneholder all nødvendig brukerinformasjon og alle krav.
- Skalerbar: Enkelt å bruke på tvers av flere tjenester uten kompleks øktadministrasjon.
JWT-struktur: Header, Payload, Signature
En JWT består av tre deler, adskilt med punktum (.), som er Base64Url-kodet:
- Header: Angir token-typen (JWT) og signeringsalgoritmen (for eksempel HMAC SHA256).
- Payload: Inneholder kravene (utsagn om en entitet, for eksempel en bruker-ID eller roller).
- Signature: Brukes til å bekrefte tokenets ekthet og sikre at det ikke har blitt tuklet med. Den opprettes ved hjelp av headeren, payloaden og en hemmelig nøkkel.
AuthN kontra AuthZ i Gateway
Det er viktig å skille mellom autentisering (AuthN) og autorisasjon (AuthZ):
- Autentisering: Bekrefter identiteten til en bruker eller tjeneste (for eksempel ved å validere en JWT-signatur og utløpstid).
- Autorisasjon: Avgjør om en autentisert bruker eller tjeneste har tillatelse til å utføre en bestemt handling eller få tilgang til en bestemt ressurs (for eksempel ved å kontrollere brukerroller fra JWT-kravene).
Gateway kan håndtere begge deler og sørge for at bare gyldige og autoriserte forespørsler når backend-tjenestene dine.
Konfigurere Gateway for JWT-sikkerhet
For å integrere JWT-sikkerhet trenger Spring Cloud Gateway-prosjektet ditt vanligvis avhengighetene spring-cloud-starter-gateway og spring-boot-starter-security.
Selv om spring-boot-starter-security tilbyr et robust sikkerhetsrammeverk, fokuserer vi på å håndtere JWT-validering manuelt ved hjelp av Gateway-filtre for å illustrere kjerneprinsippene.
JWT-valideringsflyt i Gateway
Når en klient sender en forespørsel med en JWT, fanger Gateway den opp. Den typiske flyten er:
- Hent token: Hent JWT-en fra
Authorization-headeren. - Valider token: Bekreft signaturen, kontroller utløpstiden og sørg for at den har riktig format.
- Hent claims: Analyser tokenet for å hente brukeropplysninger og roller.
- Autoriser forespørselen: Bruk claims til å avgjøre om forespørselen kan sendes videre til backend-tjenesten.
Implementering av et egendefinert JWT-filter
Vi kan implementere JWT-validering ved hjelp av et egendefinert GlobalFilter i Spring Cloud Gateway. Dette filteret kjøres for alle innkommende forespørsler før de rutes videre.
Inne i filteret får du tilgang til forespørselens headere, henter ut JWT-en og utfører valideringslogikken. Hvis tokenet er ugyldig, kan du avvise forespørselen direkte fra Gateway.
Eksempel: Enkelt JWT-filter
Dette eksempelet viser en enkel Spring Cloud Gateway-applikasjon med et GlobalFilter. Den logger om en Authorization: Bearer-header finnes, og simulerer det første trinnet i JWT-valideringen. Kjør den, og prøv å åpne /test med en Authorization-header!
package com.example.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpHeaders;
import reactor.core.publisher.Mono;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
System.out.println("Gateway started! Try accessing /test with 'Authorization' header.");
}
// Configures a dummy route for the filter to act on
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("test_route", r -> r.path("/test")
.uri("http://httpbin.org:80/get")) // A public echo service
.build();
}
// Our simplified JWT validation filter
@Bean
public GlobalFilter jwtValidationFilter() {
Logger logger = LoggerFactory.getLogger(GatewayApplication.class);
return (exchange, chain) -> {
HttpHeaders headers = exchange.getRequest().getHeaders();
String authHeader = headers.getFirst(HttpHeaders.AUTHORIZATION);
logger.info("Intercepted request to: {}", exchange.getRequest().getURI());
if (authHeader != null && authHeader.startsWith("Bearer ")) {
String jwt = authHeader.substring(7);
logger.info("Found JWT in header: {}", jwt);
// In a real scenario, full JWT validation happens here.
// For this example, we just log it and proceed.
} else {
logger.warn("No 'Authorization: Bearer' header found.");
}
return chain.filter(exchange); // Continue to the next filter/route
};
}
}Sikring av ruter med autorisering
Når en JWT er validert og claims (for eksempel brukerroller eller scopes) er hentet ut, kan du bruke disse claims-ene til autorisering. Spring Cloud Gateway lar deg definere autoriseringsregler direkte på rutene dine.
Du kan for eksempel konfigurere en rute slik at den bare tillater forespørsler når den autentiserte brukeren har rollen 'ADMIN' angitt i JWT-nyttelasten.
Kort kontroll: JWT-autorisering
Etter at en JWT er validert av Gateway, hvilke av følgende er viktige fordeler ved å bruke JWT-er til API-autentisering og -autorisering i en tilstandsløs mikrotjenestearkitektur?
Oppsummering: Sikring av Gateway med JWT-er
Du har lært hvordan Spring Cloud Gateway fungerer som et viktig håndhevingspunkt for API-sikkerhet. Vi har gått gjennom det grunnleggende ved JWT-er – strukturen og fordelene deres, samt hvordan de muliggjør tilstandsløs autentisering og autorisering.
Ved å implementere egendefinerte filtre kan du integrere robust JWT-validering og bruke claims til å sikre tilgangen til mikrotjenestene dine, slik at bare autoriserte forespørsler når backend-en.
Lær deg API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) 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 «JWT-autentisering og -autorisasjon» gratis?
Ja – hele teksten i «JWT-autentisering og -autorisasjon» 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 API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) inneholder totalt 4 leksjoner.
Hva lærer jeg i «JWT-autentisering og -autorisasjon»?
Implementer JWT-basert autentisering og autorisasjon i Spring Cloud Gateway for å sikre API-tilgang. Du øver på API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) 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 API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)?
Ingen tidligere erfaring er nødvendig. API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) 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 1 av 4.
Hvor lang tid tar leksjonen «JWT-autentisering og -autorisasjon»?
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 API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-leksjonen?
Ja. Alle API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-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
- JWT-autentisering og -autorisasjon
- Distribuert sporing med Sleuth/Zipkin
- Sentralisert konfigurasjon med Config Server
- Eksponering av måledata med Actuator og Prometheus