Sådan håndterer du Log ind med Apple på serveren (Ruby on Rails) - House of Code
Luk

For nylig skulle jeg implementere “Log ind med Apple” for en af vores samarbejdspartnere/kunder, og ved første øjekast lod det til at være en relativ overkommelig opgave. Men når jeg havde behov for at validere brugeren på serversiden, endte jeg tomhændet. Jeg søgte rundt på Google og endte med at stykke noget kode sammen via diverse steder på internettet.

Denne artikel giver en hurtig løsning på at håndtere JWT’en samt hjælper dig med at afkode den, så du kan verificere brugeren på serveren. Jeg anvendte Ruby on Rails på serveren, men metoden skulle gerne være den samme på andre sprog.

Her følger nogle notater som måske er nyttige:

  1. JWT’en udløber efter 10 minutter.
  2. Efter validering bør du have din egen godkendelsesmekanisme – eksempelvis en token, som brugeren også anvender på alle de andre anmodninger, til dit API.
  3. JWT’en indeholder kun userIdentity og email (eksempelvis er der ingen fulde navne).
  4. Når du opretter brugere på din server, skal du anvende userIdentity som deres primary/look-up key, fordi email’en vil ændre sig afhængig af brugerindstillinger.

Sådan tilgås userIdentity og JWT’en

Denne er du nødt til at tilgå via en enhed. Det er relativt simpelt og ligetil. Du behøver blot at slå “Apple Log ind” til i Project -> Signing & Capabilities -> Tilføj “Log ind med Apple”.

Herfra kan du begynde log ind-sessionen ved at anvende nedenstående kode:

Og det var dét!

Grunden til at jeg sender brugernes fulde navne til vores server, er fordi de ikke indgår i JWT’en – den indeholder kun brugernes email og for at vi kan oprette en ny bruger på vores server, er både email og navn nødvendig. Dette kan dog være anderledes i dit tilfælde.

Håndtering af JWT’en på server-siden

For at afkode JWT’en får du brug for en offentlig nøgle fra Apple. Denne nøgle finder du på: https://appleid.apple.com/auth/keys, men i formatet JWK (JSON Web Key).

Vores script downloader nøglen og anvender den til at afkode JWT’en, for derefter at sammenligne informationen om userIdentity i JWT’en, som også blev sendt fra klienten.

Den gem, som jeg anvender til JWK/JWT har det simple navn “jwt”. Tilføj det til dit bundle og du burde være køreklar.

God fornøjelse 🤗

 

Rasmus Styrk

Skrevet af

Rasmus Styrk