NYHET: få det JWT Håndbok for gratis og lære JWTs i dybden!
Hva er JSON Web-Token?
JSON Web-Token (JWT) er en åpen standard (RFC 7519) som definerer en kompakt og selvstendig måte for sikker overføring av informasjon mellom partene som et JSON-objekt. Denne informasjonen kan verifiseres og pålitelige fordi det er digitalt signert. JWTs kan signeres ved hjelp av en hemmelig (med HMAC-algoritmen) eller en offentlig/privat nøkkelpar ved hjelp av RSA eller ECDSA.,
Selv om JWTs kan være kryptert for å også gi hemmelighold mellom partene, vil vi fokusere på undertegnet tokens. Signert poletter kan bekrefte integriteten til de krav som finnes i den, mens kryptert tokens skjule disse krav fra andre parter. Når symbolene blir logget ved hjelp av offentlig/privat nøkkelpar, signatur også bekrefter at kun den parten som innehar den private nøkkelen er den som signerte den.
Når skal du bruke JSON Web-Tokens?
Her er noen scenarioer der JSON Web-Tokens er nyttig:
-
Autorisasjon: Dette er den mest vanlig scenario for bruk av JWT., Når brukeren er logget på hver etterfølgende forespørsel vil omfatte JWT, som tillater brukeren å få tilgang til ruter, tjenester og ressurser som er tillatt med at token. Single Sign-On er en funksjon som bruker mye JWT i dag, på grunn av sin lite overhead og dens evne til å være enkelt kan brukes på tvers av ulike domener.
-
informasjonsutveksling: JSON Web-Tokens er en god måte for sikker overføring av informasjon mellom partene. Fordi JWTs kan signeres—for eksempel ved hjelp av offentlig/privat nøkkelpar, kan du være sikker på at avsenderne er som de sier de er., I tillegg, som signaturen er beregnet ved hjelp av hodet og nyttelast, kan du også kontrollere at innholdet ikke har blitt tuklet med.
Hva er JSON Web-Token struktur?
I sin kompakte form, JSON Web-Tokens består av tre deler atskilt med punktum (.
), som er:
- Overskrift
- Nyttelast
- Signatur
Derfor, en JWT vanligvis ser ut som følgende.
xxxxx.yyyyy.zzzzz
La oss bryte ned de forskjellige delene.,
Overskrift
overskriften består vanligvis av to deler: type token, som er JWT, og signatur-algoritmen som blir brukt, slik som HMAC SHA256 eller RSA.
For eksempel slik:
{ "alg": "HS256", "typ": "JWT"}
Så, dette JSON er Base64Url kodet for å danne den første delen av JWT.
Nyttelast
Den andre delen av token er nyttelasten, som inneholder krav. Påstandene er uttalelser om en entitet (vanligvis bruker) og flere data.Det er tre typer krav: registrert, offentlige og private krav.,
-
Registrerte krav: Dette er et sett av forhåndsdefinerte krav som ikke obligatorisk, men anbefales, for å gi et sett av nyttige, interoperable krav. Noen av dem er: iss (utsteder), exp (utløpsdato), sub (emne), aud (publikum), og andre.
legg Merke til at kravet navn er bare tre tegn som JWT er ment å være kompakte.
-
Offentlige krav: Disse kan defineres på, vil av de som bruker JWTs., Men for å unngå kollisjoner de bør være definert i IANA JSON Web-Token Registret eller defineres som en URI som inneholder en kollisjon motstandsdyktig navnerom.
-
Privat krav: Disse er tilpasset krav opprettet for å dele informasjon mellom parter som er enige om å bruke dem og er verken registrert eller offentlige krav.
Et eksempel nyttelast kan være:
{ "sub": "1234567890", "name": "John Doe", "admin": true}
nyttelasten er så Base64Url kodet for å danne den andre delen av JSON Web-Token.,
vær oppmerksom på at for signerte tokens denne beskjed, men beskyttet mot manipulasjon, kan leses av hvem som helst. Ikke legg hemmelig informasjon i nyttelasten eller header elementer av en JWT med mindre det er kryptert.
Signatur
for Å opprette signaturen del må du ta kodet header, kodet nyttelast, en hemmelig, algoritmen som er angitt i overskriften, og registrere det.,
For eksempel hvis du ønsker å bruke HMAC SHA256 algoritme, signatur vil bli opprettet på følgende måte:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
signaturen brukes til å bekrefte meldingen ikke ble endret underveis, og, i tilfelle av polletter signert med den private nøkkelen, det kan også bekrefte at avsenderen av JWT er som den sier den er.
å Sette alle sammen
output er tre Base64-URL strenger, atskilt med punktum som lett kan bli vedtatt i HTML og HTTP miljøer, samtidig som den er mer kompakt i forhold til XML-baserte standarder som SAML.,
følgende viser en JWT som har den tidligere topp-og nyttelast kodet, og det er signert med en hemmelighet.
Hvis du ønsker å spille med JWT og sette disse begrepene i praksis, kan du bruke jwt.io Feilsøkingsprogrammet til å dekode, kontrollere, og generere JWTs.
Hvordan gjøre JSON Web-Tokens arbeid?
I godkjenning, når brukeren vellykket logger seg på med sine akkreditiver, en JSON Web-Token vil bli returnert. Siden tokens er legitimasjon, stor forsiktighet må utvises for å forhindre sikkerhetsproblemer., Generelt sett bør du ikke holde tokens lenger enn nødvendig.
Du bør ikke lagre sensitive session data i nettleseren lagring på grunn av manglende sikkerhet.
Når brukeren ønsker å få tilgang til en beskyttet rute eller ressurs, user agent bør sende JWT, vanligvis Autorisasjon header bruke den som Bærer skjema. Innholdet i overskriften skal se ut som følgende:
Authorization: Bearer <token>
Dette kan være, i visse tilfeller, en statsløs autorisasjon mekanisme., Serveren er beskyttet ruter vil se etter en gyldig JWT i Authorization
topp, og hvis det er til stede, vil brukere få lov til å få tilgang til beskyttede ressurser. Hvis JWT inneholder de nødvendige data, behovet for å søke i databasen for enkelte operasjoner kan bli redusert, selv om dette ikke alltid er tilfelle.
Hvis en token er sendt i Authorization
topptekst, Cross-Opprinnelse Ressurs-Deling (corso buenos) vil ikke være et problem som det bruker ikke cookies.,
følgende diagram viser hvordan en JWT er innhentet og brukt til å få tilgang til Api-er eller ressurser:
- programmet eller klienten ber om fullmakt til godkjenning server. Dette er utført ved hjelp av én av de forskjellige autorisasjon flyter. For eksempel, en typisk OpenID Connect kompatibel web-applikasjon vil gå gjennom
/oauth/authorize
endepunkt ved hjelp av autorisasjonskoden flyt. - Når tillatelse er gitt, tillatelse serveren returnerer et access token til programmet.,
- bruker programmet access token for å få tilgang til en beskyttet ressurs (som en API).
vær oppmerksom på at med signerte tokens, all informasjon som finnes i den poletten som er utsatt for brukere eller andre tredjeparter, selv om de ikke er i stand til å endre det. Dette betyr at du ikke bør sette hemmelig informasjon innenfor token.
Hvorfor skal vi bruke JSON Web-Tokens?
La oss snakke om fordelene med JSON Web-Tokens (JWT) sammenlignet med Enkle Web-Tokens (SWT) og Security Assertion Markup Language Tokens (SAML).,
Som JSON er mindre detaljert enn XML, når det er kodet sin størrelse er også mindre, noe som gjør JWT mer kompakt enn SAML. Dette gjør JWT et godt valg for å bli vedtatt i HTML og HTTP miljøer.
Security-messig, SWT kan bare være symmetrisk signert av en delt hemmelighet ved hjelp av HMAC-algoritmen. Imidlertid, JWT og SAML poletter kan bruke et felles/privat nøkkelpar i form av en X. 509 sertifikat for signering. Signering av XML med XML Digital Signatur uten å innføre obskure sikkerhetshull er veldig vanskelig når sammenlignet med enkelheten av å logge JSON.,
JSON-parsere er vanlig i de fleste programmeringsspråk fordi de kart direkte til objekter. I motsatt fall, XML ikke har en naturlig dokument-til-objekt kartlegging. Dette gjør det enklere å arbeide med JWT enn SAML påstander.
Angående bruk, JWT brukes på Internett skala. Dette fremhever enkelt klient-side behandling av JSON Web-token på flere plattformer, spesielt mobile.,
Sammenligning av lengden av en kodet JWT og en kodet SAML
Hvis du ønsker å lese mer om JSON Web-merkene og selv begynne å bruke dem til å utføre godkjenning i dine egne programmer, bla til JSON Web-Token destinasjonsside på Auth0.
Leave a Reply