Autentisering med OpenID Connect

Introduksjon til OpenID Connect

APIet benytter seg av OpenID Connect for autentisering. Brukeren må være autentisert og benytte et access token fra identitetsserveren for å gjøre forespørsler mot APIet.

Brukeren autentiserer seg ved at klientprogrammet sender en autentiseringsforespørsel til identitetsserveren. Her sendes det med blant annet client_id for å identifisere klientprogrammet som spør om å autentisere brukeren. redirect_uri brukes til å angi returadressen etter at brukeren er autentisert.

Eksempel på en autentiseringsforespørsel.

GET https://identity.arkitektum.no/core/connect/authorize?client_id=n5-js-demo
&redirect_uri=http%3A%2F%2Fn5-js-demo.kxml.no%2Findex.html
&response_type=id_token%20token
&scope=openid%20profile%20email%20n5api
&state=9684153216013622
&nonce=6435832393391487

Etter at brukeren har blitt autentisert, sendes brukeren tilbake til den angitte returadressen sammen med id token og/eller access token. Disse er enkodet med Base64. Dekodet ser de slik ut:

id_token: { 
  "nonce": "42670226088652203", 
  "iat": 1409037625, 
  "at_hash": "_axdJkc0-hiXZnGXKedgJw", 
  "sub": "818727", 
  "amr": "password", 
  "auth_time": 1409034293, 
  "idp": "idsrv", 
  "name": "alice", 
  "iss": "https://identity.arkitektum.no", 
  "aud": "n5-js-demo", 
  "exp": 1409041224, 
  "nbf": 1409037624
}

access_token: { 
  "client_id": "n5-js-demo", 
  "scope": [ "openid", "profile", "email", "n5api" ], 
  "sub": "818727", 
  "amr": "password", 
  "auth_time": 1409034293, 
  "idp": "idsrv", 
  "name": "alice", 
  "iss": "https://identity.arkitektum.no", 
  "aud": "https://identity.arkitektum.no/resources", 
  "exp": 1409041224, 
  "nbf": 1409037624 
}

For å kommunisere med APIet så må klientapplikasjonen sende med access token i Authorization-headeren enkodet som Base64 (samme måte som det blir motatt fra identitetsserveren).

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5uREw1SD.....

APIet vil nå sjekke at tokenet som sendes med er gyldig og deretter gi tilgang deretter.

Demoapplikasjon laget i JavaScript

Det er laget en demoapplikasjon i JavaScript for å vise hvordan autentiseringen kan gjøres, http://n5-js-demo.kxml.no.

JavaScript-bibliotek

Autentisering med JavaScript er samlet i et lite bibliotek som du kan finne her på GitHub.