Welcome to Our Website

JSON Web Token (JWT) forklarede

JSON Web Token er en standard, der bruges til at oprette adgang poletter til en ansøgning.

det fungerer på denne måde: serveren genererer et token, der certificerer brugerens identitet og sender det til klienten.

klienten sender token tilbage til serveren for hver efterfølgende anmodning, så serveren ved, at anmodningen kommer fra en bestemt identitet.

denne arkitektur viser sig at være meget effektiv i moderne Webebapps, hvor vi, efter at brugeren er godkendt, udfører API-anmodninger enten til en hvile eller en Graph .l API.

hvem bruger J ?t?, Google, for eksempel. Hvis du bruger Google API ‘ er, bruger du j .t.

EN JWT er kryptografisk signeret (men ikke krypteret, og derfor ved hjælp af HTTPS er obligatorisk, når lagring af brugerdata i den JWT), så der er garanti for, at vi kan stole på det, når vi modtager det, som ingen mellemmand kan opfange og ændre det, eller de data, den indeholder, uden at ugyldiggøre det.

når det er sagt, kritiseres J .t ‘ er ofte for deres overforbrug, og især for at de bruges, når mindre problematiske løsninger kan bruges.

Du skal danne din mening omkring emnet., Jeg går ikke ind for en teknologi frem for en anden, bare at præsentere alle de muligheder og værktøjer, du har til din rådighed.

Hvad er de gode til? Hovedsageligt API-godkendelse, og server-til-server-godkendelse.

hvordan genereres et j ?t-token?

Ved hjælp af Node.,js kan du generere den første del af token ved hjælp af denne kode:

const header = { "alg": "HS256", "typ": "JWT" }const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64')

Vi har sat undertegnelse algoritme til at være HMAC SHA256 (JWT understøtter flere algoritmer), så vi skaber en buffer fra denne JSON-kodet objekt, og vi indkode det at bruge base64.

det delvise resultat er eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

dernæst tilføjer vi nyttelasten, som vi kan tilpasse med enhver form for data., Der er reserverede nøgler, herunder iss og exp som identificerer udstederen og udløbstiden for token.

Du kan tilføje dine egne data til token ved hjælp af et objekt:

const payload = { username: 'Flavio' }

Vi konvertere dette objekt, JSON-kodet, til en Buffer, og vi indkode det resultat at bruge base64, ligesom vi gjorde før:

const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')

I dette tilfælde delvis resultat er eyJ1c2VybmFtZSI6IkZsYXZpbyJ9.,

dernæst får vi en signatur fra overskrifts-og nyttelastindholdet, hvilket sikrer, at vores indhold ikke kan ændres, selvom det opfanges, da vores signatur bliver ugyldigt. For at gøre dette, vil vi bruge crypto Node-modulet:

Vi bruger secretKey hemmelig nøgle, og skabe en base64-kodet repræsentation af den krypterede signatur.,

værdien af signatur i vores tilfælde er

MQWECYWUT7bayj8miVgsj8KdYI3ZRVS+WRRZjfZrGrw=

Vi er næsten færdig, vi bare nødt til at sammenkæde de 3 dele af header, nyttelast og signatur ved at adskille dem med et punktum:

const jwt = `${encodedHeader}.${encodedPayload}.${signature}`

API-godkendelse

Dette er nok den eneste fornuftige måde at bruge JWT.

et almindeligt scenario er: du tilmelder dig en tjeneste og Do .nloader en J .t fra servicedashboardet. Dette er, hvad du vil bruge fra nu af til at godkende alle dine anmodninger til serveren.,

en Anden use case, som er det modsatte, er at sende JWT, når du administrerer API og klienter oprette forbindelse til dig, og du vil have dine brugere til at sende efterfølgende anmodninger, ved blot at sende token.

i dette tilfælde skal klienten gemme token et eller andet sted. Hvor er det bedste sted? I en HttpOnly cookie. De andre metoder er alle tilbøjelige til attacksss angreb og som sådan de bør undgås. En HttpOnly-cookie er ikke tilgængelig fra JavaScript, og sendes automatisk til origin-serveren efter enhver anmodning, så den passer perfekt til brugssagen.,

Vælg det bedste J .t-bibliotek

afhængigt af hvilket sprog og miljø du bruger, kan du vælge mellem en række biblioteker. De mest populære er opført i jwt.io hjemmeside.

brug ikke J .ts som session tokens

Du bør ikke bruge J .ts til sessioner. Brug en almindelig server-side session mekanisme, da det er meget mere effektivt og mindre tilbøjelige til data eksponering.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *