Java >> Java tutorial >  >> Tag >> Json

Json Web Token (JWT) – Introduktion

Hvis du har arbejdet i OAuth eller OpenID eller autorisationsdel af sikkerheden, skal du have på tværs af en term kaldet JSON Web Token – JWT (udtales som JOT).

I dette indlæg vil jeg forklare dens komponenter og et par tips og tricks. I tidligere sikring af fjederstøvle-api-indlæg viste jeg, hvordan man bruger JWT til at sikre en REST API.

JSON Web Token (JWT) er et JSON-objekt defineret på en måde, hvor de deltagende parter er enige i en bestemt norm. Dette objekt indeholder information, der kan identificere en bruger eller en deltagende part.

JWT er krypteret og signeret, så det bruges sikkert. Selv hvis en tredjepart får adgang til JWT, vil denne part nogensinde være i stand til at dekryptere den, hvis den har en offentlig nøgle, som den blev signeret med. JWT er normalt også gyldigt i en begrænset periode, så en hacker vil ikke være i stand til at bruge JWT, hvis den er udløbet, og hackeren var i stand til at dekryptere JWT.

Der er et par use cases, hvor du kan bruge JWT.

  1. Single Sign-On – I nogle autorisationsscenarier bruges JWT til at kryptere brugeroplysninger i et token til godkendelsesformål.
  2. JWT tilbyder en masse sikkerhed, så det hjælper at udveksle oplysninger mellem parter i hemmelighed.

Komponenter

JSON Web Token består af tre dele - header, nyttelast og signatur. Når du har oprettet en JWT ved hjælp af disse tre dele, komprimerer du den JWT. Så hver JWT er i en kompakt form.

hhhhhh.pppppppp.ssssss

Overskrift af JSON Web Token

Hvert Json Web Token indeholder header, nyttelast og signaturdel. I header-delen vil du have to vigtige elementer – algoritmetype som alg og nøgle-id som kid , men i stedet for disse to elementer kan den også indeholde alg og type for at angive, hvilken type token dette er.

{
   "alg":"HS256",
   "kid": "NHAS42KWE49825JADTWWQRWR"
}

Nyttelast

Nyttelasten er den del, der indeholder faktiske data i JWT. Dybest set er disse data i form af krav. Påstande er identificerende oplysninger om brugeren eller enheden. Men bortset fra brugeroplysninger (sub ), indeholder den også nogle vigtige oplysninger på hvilket tidspunkt tokenet blev udstedt – iat , hvem er udstederen – iss , hvad er udløbstiden exp , hvad er den ikke før brugte tid nbf .

Eksempel på JWT nyttelast vil se ud som nedenfor:

{
  "sub": "betterjavacode\\userabc",
  "created": 1571755568798,
  "iss": "betterjavacode.com",
  "client_id": "randomclient",
  "nbf": 1571755569,
  "scope": "[Email]",
  "exp": 1571759169,
  "expires_in": "3600",
  "iat": 1571755569,
  "jti": "qqwrwe-wewewt-34343re-343gtrtr-323222"
}

Signatur

Signatur til at signere JWT er skabt af Base64 URL-kodning af header + Base64 URL-kodning af body og en hemmelig nøgle, og alt dette vil blive signeret ved at bruge en signaturalgoritme efter servervalg, for dette eksempel er det HMACSHA256 . Serveren, som opretter JWT, vil ikke dele en hemmelig nøgle med nogen og vil have sine egne politikker til at oprette den hemmelige nøgle. Det kan gøre den offentlige nøgle tilgængelig for anmodede klienter.

Hvornår skal JWT bruges?

Den sædvanlige brugssag for JWT er til autentificeringsformål, da den kan indeholde brugerdata. Tokens er gyldige i en kort periode, så de kan ikke kompromitteres. Når brugeren får adgang til en beskyttet ressource, sender brugeragenten JWT i autorisationsheader ved hjælp af Bearer-skema. Som en sikkerhedsforanstaltning bør et token ikke indeholde hemmelige oplysninger. I så fald, selvom en JWT bliver stjålet, kan ingen bruge JWT-data til andre formål.

JWT er en mere kompakt version af token, som normalt blev udvekslet gennem SAML (Security Assertion Markup Language).

Konklusion

I dette indlæg diskuterede vi detaljerne om JWT og hvornår det skal bruges.

Referencer

  1. Specifikation af JSON Web Token – Specifikationer
  2. JSON Web Token – Åbne Id-specifikationer


No
Java tag