Teknik og integration

Hvad er OpenID Connect?

OpenID Connect er et autentifikationslag oven på OAuth 2.0. Det giver et standardiseret svar på, hvem brugeren er, i form af en signeret ID-token.

Kaldes også: OIDC, OpenID Connect Core 1.0

OpenID Connect er et autentifikationslag oven på OAuth 2.0. Specifikationen hedder OpenID Connect Core 1.0 og forvaltes af OpenID Foundation. OAuth 2.0 alene siger kun, at en klient har fået adgang til noget. OIDC tilføjer et standardiseret svar på, hvem brugeren er, og hvordan vedkommende blev autentificeret.

ID-tokenet

Svaret kommer i en ID-token. Det er en JWT, og den skal være signeret. Fem claims er obligatoriske:

  • iss, altså hvem der har udstedt tokenet.
  • sub, et unikt bruger-id hos udstederen. Værdien bliver aldrig genbrugt til en anden person.
  • aud, som skal indeholde din egen client_id.
  • exp, udløbstidspunktet.
  • iat, udstedelsestidspunktet.

Kontrollen af signaturen og af aud hører hjemme på serveren. Flytter man den ud i browseren, er det brugeren selv, der afgør, hvad der bliver godkendt.

Scope og flows

En OIDC-forespørgsel skal indeholde scope-værdien openid. Mangler den, er adfærden udefineret, og du sidder reelt tilbage med en almindelig OAuth-udveksling uden noget udsagn om identitet.

Der findes tre flows: Authorization Code Flow, Implicit Flow og Hybrid Flow. Implicit frarådes i dag, fordi tokenet leveres direkte i browserens adresselinje og dermed havner i historik, logfiler og eventuelle referrers. Authorization Code Flow er standardvalget til nye integrationer.

PKCE

PKCE er beskrevet i RFC 7636 og lukker et konkret hul i mobilapps og enkeltsideapplikationer. Klienten laver en tilfældig code_verifier på 43 til 128 tegn og sender code_challenge = BASE64URL(SHA256(verifier)) med metoden S256. Først når koden skal veksles til et token, afslører klienten den oprindelige værdi.

Uden PKCE kan en ondsindet app på samme enhed opsnappe autorisationskoden og indløse den. Med PKCE er koden værdiløs for den, der ikke kender verifieren.

Hvad tokenet må indeholde

Hvor meget der står i tokenet, er et valg. I Signaturgruppens flow til aldersverifikation beder tjenesten om scope openid age_verify:16, og svaret er claimet idbrokerdk_age_verified med værdien "16:true" eller "16:false". Hverken CPR-nummer eller fødselsdato bliver udleveret.

Skal du derimod lave KYC, er det omvendt. Der skal identiteten kendes, og så kommer navn og CPR-nummer med i svaret. Samme protokol, to vidt forskellige mængder personoplysninger, og det er den forskel, du skal kunne forklare, hvis nogen spørger, hvorfor I opbevarer det, I opbevarer.

Teksten er sidst tjekket .

Vi lægger OIDC bag ét endpoint

Vores API taler OpenID Connect ud mod brokeren, så du får samme flow uanset om brugeren logger ind med MitID, svensk BankID, itsme eller AltID. Bruger du Shopify, WooCommerce, WordPress eller PrestaShop, ligger det i pluginnet, og du skal ikke selv bygge en token-validering.