Edit a podcast
===

Varje gång jag ser det så blir det så hej jag vet inte heller du

lyssnar på Developers, podden där du får följa med oss, Sofia och Madde på allt inom mjukvaruutveckling

[00:00:20] Madde: vi träffar spännande gäster testar nya teknologier, söker inspiration och tar upp aktuella ämnen Idag ska vi ju snacka lite om JVT, eller har du hört att vissa säger typ JOT? Ja!

Ja, åh gud, tack för att du nämnde det.

Alltså, jag kommer ihåg första gången jag pratade med en person som sa, för vi pratade om JVT-tokens och ganska länge, och den här personen liksom sa Under konversationen ganska ofta såhär ja men jotten och såhär och jag kommer ihåg att jag vågade inte fråga vad han menade så jag jag kommer inte ens ihåg hur jag för du vet Jag kunde ju inte googla på det sen.

Jag kommer inte ihåg hur jag kom fram till att det var JVT. Antagligen för att jag hörde andra till slut säga det och bara listade ut att det måste vara samma sak. Men ja,

[00:01:30] Madde: varför säger Vi kanske lär någon annan lyssnare här nu som har undrat. Jag fattar inte, hur blir JWT?

Jott.

[00:01:39] Madde: Jott. För folk gör det på engelska också.

Ja Tror jag, eller? Eller är det en svensk grej att säga jott?

Nej, jag tror att det är engelskt. Ja, jott Eller varför skulle folk göra det på svenska ens? Nej, det är ju ändå konstigare faktiskt. För det är J-V-T.

[00:01:54] Madde: Det är som mitt hartord. Alltså Y-A-C-H-T. En sån båt. En jakt. Jakt.

Jag tror att det är jakt på svenska. Nej, det är jakt Jo, jag tror att säger jat. Jat. Det är det jag menar. Jat. Det är väl samma princip på något sätt

kanske. Jag vet inte. Det är väl ändå dialektalt. Om jag är från Stockholm så borde jag väl säga... En jakt Jag ska på min

[00:02:28] Madde: lyxjakt.

Men det är inte jakt. Det är inte jakt.

[00:02:33] Madde: Det är nog jakt Nej, man säger inte jakt.

Jo,

[00:02:37] Madde: jo. Jakt jokt Ja, skitsamma. Vi ska prata om JWT-tokens. Men innan vi hoppar in i det så ska vi tacka våra stjärnsupporter på Patreon. Och det här är ju ett förinspelat sommaravsnitt Eller inför din bebistid-avsnitt eller vad vi vill kalla det för. Så därför så är vi inte så observanta om folk har bytt namn.

Om det har kommit någon ny stjärnsupporter så kommer vi inte heller kunna uppmärksamma det. Men det kommer vi göra sen efter sommaren som vanligt. Men nu blir det samma gamla vanliga. Så vet ni det. Vill du läsa upp

dem? Okej då. Ni som stöttar oss med hundra kronor. Ni är Alicia, Anders Nylund, Björn Jonsson., Dag Rönnell, Kajetan Kazimierczak, Lars Nyström, Martin Haagen, Molly Haglund, Oskari, Per Nåtby, Selim Hjorthall, Stygg Hest och Tomas Nilsson.

Ja, stort tack till er. Jag, nu med LLM-er, det fanns ju inte den tiden jag hörde jott. Men nu kan man ju faktiskt fråga, why do some people say jott? Gjorde du det nu? Ja. Some people say jott. Why? Convention and laziness. Okej. Jaha okej, vänta. Oj, det är ju vi som har sagt fel. Hela våra liv. Jaha. För jag hoppas inte att det här är Lemmen som ljuger.

Men det står att det är i spesen. The original JWT, kanske inte då heter JWT, the original yacht, RFC då, literally says pronounced as yacht. Jaha. What? Och sen står det så här Det är kortare att säga. Säga JWT is a mouthful. Jot is quicker. Alltså det är lättare på svenska. JVT tror jag JWT.

[00:04:48] Madde: Det blir väldigt långt.

Egentligen på svenska är det också JWT. Jag vet inte varför vi säger det. Nej det sant. Typ som BMW. BMW Varför säger vi BMW? BMW vad

[00:05:00] Madde: fint det här vart.

Men det heter ju BMW. Ja, det är sant. Men det är ingen som säger... Jag vet inte ens vad jot skulle vara om man sa BMW. Alltså... Jag vet fortfarande inte var de har fått det ifrån.

[00:05:18] Madde: Det är det. Alltså visst man kan väl fantisera ihop lite om man skulle försöka uttala det som ett ord när det inte finns någon konsonant eller någon vokal i. jutt. Alltså, jut, jut, jut, så. Eller så var de höga, jag vet inte. Men ja.

Okej vad ska vi säga i det här avsnittet då?

[00:05:41] Madde: Vi fortsätter säga givet tycker jag.

Ja, okej. Det

[00:05:45] Madde: är en svensk podd. Jag går emot mig själv nu, för jag är en sån här... Min princip är att man ska säga SQL och inte SQL. Så det här är ju helt tvärt emot mina egna principer. Men vi säger JVT just nu. Men ja, JVT. Varför ska vi prata om det överhuvudtaget? Man pratar ju ofta om det i techbranschen.

Vi använder JVT för auth. Men det kanske är många som inte riktigt vet vad exakt det är som händer under huven. Alltså... Ja, hur funkar det? Vad är det? Mer än att man bara skickar en liten textsträng fram och tillbaka. Och det är väldigt vanlig ofta att man bara

säger, ja men gvt token.

[00:06:27] Madde: Ja, precis. Så att ja.

Det används ju överallt i API-er i microservices, i front-end och back-end kommunikation. Så det är ändå bra att känna till. Kanske. Om inte annat så kanske folk har lärt sig att det tydligen då är ett gott Ja, det står ju för någonting. JWT. Det står ju för JSON Web Token. Och det är ju faktiskt precis vad det är.

Alltså det är egentligen bara ett JSON-objekt som man har kodat och signerat. Så den består av tre delar. En header, en payload och en signature. Och i headern då till exempel så står det bland annat vilken algoritm som används för att signera. Det kan vara till exempel, jag vet inte. HS-256 eller RS-256.

Det är de vanliga i alla fall. Man kan ju signera den hur man vill, egentligen.

[00:07:25] Madde: Payloaden i själva datan, det är typ olika claims som kan vara typ sub Kort för subject, det brukar vara typ user ID. De har ofta väldigt korta, man vill inte ha så himla långa beskrivande namn för att det är ändå data som skickas fram och tillbaka.

Så man har ofta IAT, som är issued at, eller EXP, som är expiration. Men egentligen kan du slänga in precis lite vad som helst som du vill ha in där. Roller, vad som helst. Fantasin sitter gränser. Man kanske inte ska skicka Persondata, typ såhär personnummer och sånt eller lösenord för att den är ju ändå det ska man inte göra den är ju faktiskt inte gruppterad den är ju bara base64 encoded så att vem som helst kan ju faktiskt läsa payloaden

ingenting i den är hemligt, det är bra att veta jag tror att folk har på något sätt någon tro om att bara för att finns en JVT att det är någon säkerhets Alltså du kan ju öppna upp den och läsa allting i den.

Det är en del av en säkerhetsmekanism men den i sig är ju helt öppen.

[00:08:35] Madde: Precis. Det som gör den säker är ju att du har en signatur på den också. Och den skapar man ju genom att man kör då headrun och payloaden genom den algoritmen som är vald som fanns headrun tillsammans med en hemlig nyckel. Och det är ju så man säkerställer att ingen har ändrat innehållet.

Men innehållet är ju fortfarande synligt. Det är ju liksom bara att gå in i den. Säger man då jot.io J-V-T-punkt-I-O Då ser man ju liksom såhär fint Uppdelad Jag vet inte man känner ju igen dem De börjar ju alltid med E-I Jag vet faktiskt inte varför de gör det, vet du det?

Varje gång jag ser det så blir det så E-I

[00:09:18] Madde: Det är bara såhär hälsning Jot ses, ej Nej vet faktiskt inte varför de börjar med det men det gör den i alla fall, det kanske har någonting att göra med base64-encodningen eller något

ja, jag tror det den börjar väl den första delen är ju alltid headern och jag antar att den ser ju alltid alltså den första delen ser alltid likadan

[00:09:42] Madde: ut antagligen och sen är det ju typ punkt som avdelar och sen kommer payloaden och sen punkt och så kommer signaturen

Mm, men det var faktiskt bra att nämnde att jag har sett att vissa vill trycka in mycket data i det, men det är lite misstolkning av vad en GVT är, utan det är liksom...

Kanske någonting som initierar att du kan hämta mer data, men inte att så här, om jag använder den här som någon slags DTO som jag trycker in allting i, det är inte riktigt det, utan det kanske är något user ID som följer med där.

[00:10:25] Madde: Alltså du kan slå och hämta mer sen eller möjligtvis roll kanske också för att veta snabbt om man alltså den hanterar ju både autensering och auktorisering så den kan ju säga liksom du får göra det här och du får inte göra det här

och typ såhär time to live eller det kanske ofta är expiry som är bra att ha där bara för att såhär din klient ska typ veta när den ska Fråga efter en ny eller något sånt där men det är inte för att skicka runt massa data nej

[00:11:00] Madde: det är faktiskt en bra poäng definitivt men ja, vad är fördelarna då med JVT

alltså det

[00:11:07] Madde: är

en bra fråga det är väl bara ett sätt som alla känner igen alltså när du säger att du har en JVT token så vet man typ att man kan förvänta sig tänker jag att Det är en, någon har genererat en kod som den har signerats med en nyckel och det går att verifiera avsända den typ.

Jag vet inte vad, kan man förklara det på ett bättre sätt?

[00:11:40] Madde: Mm, alltså det finns ju otroligt många bibliotek till exempel, det är ju väldigt standardiserat så att det är ju enkelt att implementera på det sättet. Varenda språk liksom har ju sitt egna bibliotek för att hantera det. Man ska helst inte hålla på och skriva egna grejer, det är svårt att få det rätt, det mycket att tänka på.

Ja, men det är väl det. Alltså bara att det är ett standardiserat format. Det är inget som är speciellt med den, eller

[00:12:08] Madde: hur? Nej, som sagt det är ju bara JSON egentligen. Det väldigt simpelt egentligen. Absolut en fördel. En annan stor fördel också är ju att den har inget tillstånd Den är stateless. Du behöver inte spara ditt tillstånd på servern.

Som man annars behöver med andra typer av tensering. Och det gör ju att det är väldigt lätt att skala. Om du behöver fler servrar. För det är alltid svårt om du ska ha state på servern. Då är du väldigt bunden till att det är samma server som ska svara och så vidare. Så det är också en stor fördel skulle jag säga.

Men ja, allt är ju inte... Liksom fine and dandy superenkelt och sånt bara för det en sak som skulle kunna vara, eller som som jag tycker är krångligt i alla fall är alltså allting med typ expiry och sånt det går ju inte att typ såhär enkelt bara revoka den om det skulle vara så att man behöver ja, om den har kommit på villovägar eller någonting, utan expiry som står, det är ju den som gäller liksom

Ja, så har du tabbat dig där och Så att expiry date till ett år.

Ja det är ju inte bra skulle jag säga. Jo men du kan väl ändå se till att ingen kommer åt din server med den. Det kan man väl göra.

[00:13:31] Madde: Alltså servern den validerar ju på expiry. Så det finns ju inte så mycket mer att göra.

Ja men om den skulle kontrollera vilken typ. Hur den har blivit signerad. Och så har du bytt din privata nyckel.

För att du har kommit på att, oj nu har jag lämnat ut token i ett år till någon elak person. Ja. Då skulle jag väl kunna byta ut min privata nyckel och se till att den här signeringen är inte giltig längre. Alltså typ så. Ja, det kanske man kan

[00:14:01] Madde: göra.

Men problemet är nog att du vet oftast inte att den hamnat i fel händer.

Alltså du kommer inte riktigt... Det är nog det som är svårt med dem. Alltså man vill ju egentligen.

[00:14:15] Madde: Man ska ju inte ha ett års Alltså man vill ju oftast ha kanske typ en kvart Att den lever. För det finns ju. Det finns någonting som heter Refresh Token också. Och det är ju. Ett sätt att hantera längre sessioner.

Så om har din första initialtoken som har 15 minuter. Och sen så kan man med en refresh token i bakgrunden refresha. Så att användaren ser inte. Det hade varit skitstört om den blev utloggad på 15 minuter. Det hade inte varit hållbart. Men om man då istället i bakgrunden ber om en ny refresh token. Så kan man hantera det på det sättet.

Och de kan vi också återkalla om det skulle behövas, för de brukar man ofta lagra i en server-side. Så de går ju ogiltigt att förklara om det nu skulle ha varit så att det kriser sig. Sen så om vi ändå pratar säkerhet så kan man ju säga att man ska ju alltid skicka tokens över HTTPS såklart. När det gäller lagring i klienten så vill man ju skicka den i HTTP only cookies för att hindra sådana här XSS lagringar Cross-site scripting-attacker.

Jag läste, det här var ju typ före min tid som utvecklare innan jag började använda token så så här. Men i början när det var nytt så fanns vissa implementationer Av då typ bibliotek för att hantera tokens. Som accepterade tokens utan signatur. Så om man bara skrev då. Att man har så här. Alg none i headrun.

Så kunde man ju jätterätt skapa fejkade tokens. Och det är ju väldigt obra. Det är ju patchat i typ alla bibliotek idag. Alltså jag tror den här. Vad säger man. Exploiten. Kom fram typ 2015 eller någonting. Så att det var ju länge sedan. Men det är ju ett tydligt tecken på varför man inte ska bygga allt det här själv.

Utan använd liksom de färdiga biblioteken som finns. Ja,

definitivt. Men med det sagt ändå fortfarande. En JVT-token är inte, alltså det är ingen garanti på säkerhet Nej. För att om du har en kvart på dig så kanske det räcker. Ofta tror jag att folk sätter någonting i en timme och sånt där. Bara du får tag i den så kan du göra mycket grejer.

Ja, så är det ju. Alltså det är så hela internet fungerar. Jag har nog alltid varit förvånad när jag kollar på de här sakerna. Att det är så himla känsligt. Att det är såhär ja, det är såhär man gör.

[00:16:50] Madde: Är det inte mer än såhär?

Ja. Så det är därför det är viktigt att rotera dina nycklar och sånt Men jag vet ju att folk inte gör det.

[00:17:01] Madde: Nej. Jag tror att många är skyldiga till att inte göra, absolut.

Ja, men som du säger, det är därför det är väldigt bra att använda moderna ramverk som har stöd för det här.

[00:17:15] Madde: Ja det ska man definitivt göra. Men ja... Har du använt mycket GVT-tokens i dina uppdrag Jag har använt dem, ja.

Det har alla.

[00:17:29] Madde: Men jag tänkte, man kanske inte själv har suttit och implementerat det särskilt mycket.

Även om man använder det i sitt system.

Det är någonting som vi sitter med just nu faktiskt. Väldigt mycket. Jag kan ju såklart inte berätta exakt vad för det här handlar om säkerhet. Men det har varit lite intressant att fundera på vad som är rimliga tider och hur man ska... När man behöver signera och inte, hur signerar du? Typ såhär, vart har du din private key?

Ska du signera... I din applikation med en nyckel som du har sparad någonstans i den eller ska du använda någon annan tjänst du skickar iväg du genererar ju ett UID och sen ska du signera det du kan göra det själv men du kan också skicka iväg det till någon som signerar där du har nyckelrotation alltså massa såna här grejer som man det är intressant att bara för att du lägger till mer komplexitet så betyder det inte att det är säkrare är det Så mycket sådant har vi jobbat på de senaste veckorna faktiskt.

Ja, då var det ju läskigt att göra ett avsnitt

[00:18:49] Madde: om

det. Ja, men jag känner mig nästan mer förvirrad och dum. Ju mer man börjar tänka på det så har vi just sett så att, som jag sa, att vi gör det här och det här och det här och det här, blir jättesäker. Så bara, nej det där påverkar ju inte säkerheten kanske.

Ja, för det kanske är hur länge tokenen lever som i slutändan är alltid problemet. Ja, så det är ju, jag vet inte, mer kanske relaterat till arkitektur och komplexitet i kod som jag tänkt på det. Mm. Men har du jobbat mycket med GVT-tokens?

[00:19:34] Madde: Något som någon så här typ frågar på någon stel blind date eller någonting sånt här.

Verkligen.

Sexigt.

[00:19:43] Madde: Alltså jag har ju implementerat det med typ så här Azure AD till exempel. Eller Azure AD B2B B2C. Eller med Googles sådana här single sign-on. Bygger ju också på GVT-tokens Finns den här? Säger man Auth0? Eller hur säger man?

Auth0?

[00:20:05] Madde: Ja. Jag läser alltid som typ såhär, Auth. Nej,

det är inte så Auschwitz, men Auth0.

Och det heter ju faktiskt inte Azure AD längre. Nej, det är

[00:20:20] Madde: ju Entra. Microsoft Entra, just det. Entra ID. Helt rätt. Ja. Så att ja, i de fallen har jag ju stött på det, helt klart. Och som sagt där har man ju ofta bibliotek kring det. Till exempel då när vi... Implementerade RCA-DB2C som det heter då. Sen använder man ju MSAL.

Microsoft Authentication Library kanske det står för. Jag vet inte. Jag faktiskt aldrig tänkt på vad det står för. Jag

tror att

[00:20:50] Madde: det står för

det.

[00:20:51] Madde: Antagligen. Och

jag hatar det.

[00:20:53] Madde: Ja, jag med. Men jag kommer ihåg faktiskt första gången jag kom i kontakt med JVT. Det var på ett jättelänge sedan ett kundutdrag jag var på.

Och vi... Vi byggde en e-handel och ett admin-gränssnitt. Men så var det en i teamet i alla fall som bara, ja jag har hittat det här nya sättet att autensera som är givet till token. Och jag har aldrig talats om det då. Detta var typ 2015. Ja. Jo, det var det nog. Men då ville han verkligen bygga det från scratch själv.

Och det lät jättekomplicerat. Och jag bara, det här kan man inte jobba med.

Ibland kan man typ behöva göra lite saker själv. I fall i de fallen. För du och jag satt hos samma kund. När det var mycket... Azure AD då? Och då var liksom allt bara funkade typ out of the box. Men har du sitter du som jag på ett så stort företag som har massa olika franchises och alla har någon kör Google, någon kör alltså de har alla olika implementationer av vart användarna finns.

Så är det inte så lätt längre. Och då Och då blir det lite mer eget Du får ju fortfarande använda färdiga bibliotek Men som är mer generellt kan hantera det. Det kanske är då folk faller till att börja skriva egna grejer. Nu vet jag inte av anledning varför den där personen gjorde det. Det kanske bara för att...

[00:22:37] Madde: Det var nog då för att det var nytt Och kanske det fanns inte så himla mycket.

Jag vet inte.

[00:22:43] Madde: Nej.

Nej. Men ibland jag har i alla fall sett nu att det finns behov av custom-grejer och det blir så jäkla svårt.

[00:22:53] Madde: Ja, då gäller det verkligen att hålla koll på allting med expiry och sånt För det ju lätt att du bara skapar en token och säger att den ska ha expiry men du måste ju faktiskt validera det sen också när den skickas tillbaka från klienten

Precis.

Men det är också att man lär sig den här mekanismen bakom. Förut har det bara varit så här, om Azure AD är löst Ja

[00:23:14] Madde: man får den, man skickar vidare den typ.

Det

[00:23:18] Madde: finns ju en RFC om man vill nörda ner sig rejält. RFC 7519. Var det den du läste i där det stod att den heter JOTS?

Ja, det är tydligen den där det står.

Så att alla som har läst den visste det.

[00:23:31] Madde: Det här kommer fram att vi inte läser RFCs då.

Nej, men fan vad... Ja, jag öppnade upp den RFCn till och med faktiskt. The suggested pronunciation of JWT is the same as the English word yacht. Ja Det är helt galet. Det är min största takeaway från det här avsnittet.

[00:23:55] Madde: Först störde vi oss. Och sen insåg vi att det är vi som har fel. Det händer ganska ofta faktiskt.

Ja. Nej men vi har väl inte så mycket mer att säga om JVT tokens. Det finns säkert någon som kan säga mycket mer. Som. Implementerat allt det här- på kastan väg och vet allting om det. Men det här är lite- pejsigt då, vad det är.

[00:24:21] Madde: Ja, det är väl trevligt med det ibland också. Kanske börja välja in kommentarer nu- när folk säger att vi har sagt fel om någonting.

Ja. Men om man inte gjort det- tidigare, eller jag tror att de flesta har- kanske packat upp- eller vad man ska säga, en JVT och tittat i den. Men- Att man kanske tittar igen då och verkligen så här med nya ögon och så här, jaha, här ser jag ju headern och jag vet inte, vad finns det för claims?

Vad skickas i den här payloaden? Man kanske helt plötsligt upptäcker att, oj, vi skickar nog lite för mycket payload här. Ja, det

[00:25:02] Madde: var väl allt vi hade att säga om JOTS då.

Vi hörs nästa vecka i alla fall Det

[00:25:09] Madde: gör vi Hejdå

Skapare och gäster

Madeleine Schönemann
Värd
Madeleine Schönemann
Madde är en riktig allrounder! Hon har haft många roliga och lärorika roller inom branschen, som utvecklare, scrum master, product manager, konferensarrangör och föreläsare på flera olika evenemang. Programmering ligger henne varmt om hjärtat och hennes stora glädje är att tillsammans med sitt team leverera produkter som gör verklig skillnad för användarna.
Sofia Larsson
Värd
Sofia Larsson
Sofia är en erfaren utvecklare som tycker om att vara en del av produktupptäcktsfasen och skapa effektiva lösningar med användaren i fokus. Hon har ett starkt engagemang för digital hållbarhet och i sin roll som Digital Sustanability Competence Lead jobbar hon för att öka det digitala mijömedvetandet. LinkedIn
image of podcast supporter image of podcast supporter image of podcast supporter image of podcast supporter image of podcast supporter
Bli en av 35 supportrar