Keycloak

Autentisering og autorisering er nødvendig i de fleste moderne løsninger, enten det er snakk om en webapplikasjon, et REST API eller andre typer tjenester som innebærer sikker håndtering av data og brukere. Det er heller ikke å stikke under en stol at det kan utrolig slitsomt å implementere slik funksjonalitet, og det er mange feil som kan gjøres på veien.

Her kommer Keycloak inn, en open-source løsning som kan løse utfordringer som:

  • Autentisering av brukere/prosesser basert på standard og moderne protokoller
  • Autorisere tilganger til ressurser som eksponeres over for eksempel et REST-API
  • Å legge til ekstra informasjon om en bruker, som ligger hos en ekstern aktør (organisasjonsmedlemskap/roller/osv.)

Hva er Keycloak

Keycloak er da en åpen kildekode-løsning skrevet i Java, som implementerer moderne autentisering og autorisasjon basert på OAuth 2.0 rammeverket. OAuth 2.0 er et autorisasjonsrammeverk som gjør det mulig for applikasjoner å få begrenset og kontrollert tilgang til brukerkontoer over en kommunikasjonsprotokoll som for eksempel en HTTP-tjeneste. Når du ser «Sign in with Google» eller «Log in with Facebook» på nettsider og i apper, så er det OAuth 2.0 som ligger til grunn for denne funksjonaliteten som lar brukere benytte en identitet fra ett sted (Google eller Facebook, for eksempel) for å logge seg inn et annet sted.

Bruk av Keycloak i praksis

Bortsett fra å være en moderne og pålitelig autentisering og autorisasjonsserver, er Keycloak meget fleksibel og tilpasningsvennlig. For eksempel støtter Keycloak «extensions», og du kan finne diverse eksempler på følgende URL: https://www.keycloak.org/extensions.html. Sannsynligheten er stor for at noen allerede har implementer en løsning på utfordringen du prøver å håndtere.

En av våre kunder hadde behov for å gi tilgang til noen REST-tjenester, basert på hvilke roller personene hadde i enkelte organisasjoner registrert hos Altinn. For å løse utfordringen måtte vi hente og lagre en liste over organisasjoner/roller tilknyttet en privat person/bedriftskunde fra Altinn, da etter at vedkommende hadde autentisert seg med ID-Porten.

Her kunne vi bruke Keycloak for å delegere autentisering av brukere til ID-Porten, mens vi utviklet en modul som hentet nødvendig rolle-informasjon fra Altinn. Siden Keycloak gir mulighet til å utvikle diverse egendefinerte integrasjonsmoduler/plugins via sin Service Provider Interface, ble det mulig å utvikle en liten modul som ble registrert i Keycloak som et ekstra steg i autentiseringsflyten. Etter at brukeren autentiserte seg med ID-porten, ble modulen aktivert for å hente ekstra data fra Altinn for å kunne oppdatere brukerens rolle/organisasjonsmedlemskap ved hjelp av Keycloak.

Dette ekstra steget resulterer i at brukerens access_token, som blir generert av Keycloak etter en vellykket autentisering med ID-porten, også inneholder relevant informasjon fra Altinn.  Dermed kan kundens applikasjoner gi brukeren tilgang til interne ressurser, basert på hvilke Altinn roller eller organisasjoner vedkommende har eller er medlem av.

Keycloak støtter følgende standard autentiseringsprotokoller:

OIDC er en enkel autentiseringsprotokoll bygget på toppen av OAuth 2.0 rammeverket for å dekke både autentisering og autorisasjonsbehovet til moderne applikasjoner og IT-tjenester. OpenID Connect er dermed en fullstendig autentisering og autorisasjonsprotokoll.

OIDC protokollen gir IT-tjenester mulighet til å verifisere identiteten til sluttbrukere, og/eller klient-applikasjoner basert på autentiseringen utført av autentiseringsserveren. Dette gjøres på en enkel måte ved hjelp av en identitetstoken i JWT format.

SAML 2.0 er en åpen og standardisert XML-basert protokoll. Her benyttes sikkerhetstokener for å identifisere brukere, ved å formidle brukerinformasjon mellom en Identitetsleverandør (Identity Provider) og en tjenesteleverandør (Service Provider). Mens OIDC bruker JWT som token-format, bruker SAML XML-dokumenter for å kommunisere en brukers identitet og profil-informasjon.

Hvorfor Keycloak?

Keycloak er en open-source autentiserings- og autoriseringsløsning som vedlikeholdes av utviklere verden rundt. Løsningen er fleksibel, og kan tilpasses av deg for å tilfredsstille ditt behov. Som utvikler av en applikasjon eller tjeneste, trenger du ikke lenger å lagre og administrere brukere, brukerroller og tilganger. Keycloak tar seg av alt dette for deg, slik at du fokuserer på forretningsmodellen, og selvsagt supertjenesten som super-applikasjon din skal levere.


Nyttige ressurser: