Profil för OpenID Connect/OAuth2

OpenID Connect utökar OAuth2 med ett lager som hanterar användarens identitet, dvs. möjliggör för anslutna applikationer att identifiera använderen. Information om användaren returneras i enlighet med standarden för JSON Web Token (JWT) och kallas för ID token.

Observera att ID token id_token kan användas av applikationen för att identifera användaren och att Access token access_token (och token_type) alltid skickas med till API-tjänsten för åtkomst till informationsresurser.

OAuth2 HTTP-header Authorization: {token_type} {access_token}

OAuth2 flöden

För närvarande stöds enbart flödet Authorization Code Grant.

Konfiguration

Auktorisationstjänsten för utvecklarportalen tillhandahåller sin konfiguration via JSON länken:
https://authorizer.openservices.cambio.se/auth/realms/master/.well-known/openid-configuration
För att förenkla applikationens hantering av flera vårdgivares API-tjänster så rekommenderas att konfigurationen alltid utgår från denna typ av JSON länk/resurs.

Följande information i konfigurationen krävs för att koppla upp applikationen.

Attribut Länk
issuer  https://authorizer.openservices.cambio.se/auth/realms/master
authorization_endpoint  https://authorizer.openservices.cambio.se/auth/realms/master/protocol/openid-connect/auth
token_endpoint  https://authorizer.openservices.cambio.se/auth/realms/master/protocol/openid-connect/token
jwks_uri  https://authorizer.openservices.cambio.se/auth/realms/master/protocol/openid-connect/certs

Indikera/välj IdP

För att peka ut en specifik IdP för inlogging så kan query parametern kc_idp_hint användas. Identifiering med CGI eID (testtjänst med BankID) väljs genom att sätta kc_idp_hint till saml-cgi-eleg.
Exempel:

https://authorizer.openservices.cambio.se/auth/realms/master/protocol/openid-connect/auth?kc_idp_hint=saml-cgi-eleg&response_type=code&scope=...

Scope

För att begära användarens identitet ska openid anges i scope. Se respektive API för beskrivning av scope för åtkomst till informationsresurser.
Exempel på scope för ID token och Access token för åtkomst till labsvar: scope=openid user/Observation-read

Steg fär att använda ID token

För att anvvända ID token måste applikationen utföra följande steg:

  1. Hämta ut länken från attributet iss i ID token.
  2. Utföra en GET {iss}/.well-known/openid-configuration
  3. Hämta ut auktorisationstjänstens publika nyckel genom att följa länken i attributet jwks_uri, se ovan.
  4. Validera signaturen för ID token med den publika nyckeln
  5. Extrahera användarinformation (personnummer, namn) från attributen personal_identity_number, given_name och surname
Exempel på ett ID token:
{
  "jti": "7bf3cb39-1969-4baf-86ae-a2a989b03217",
  "exp": 1497860852,
  "nbf": 0,
  "iat": 1497860792,
  "iss": "https://authorizer.openservices.cambio.se/auth/realms/master",
  "aud": "poc-app",
  "sub": "2cfef360-ce44-4318-a11d-078de116c0f4",
  "typ": "ID",
  "azp": "poc-app",
  "auth_time": 1497860791,
  "session_state": "fc852cff-20d2-4ea1-8a91-05919b5759f7",
  "acr": "1",
  "personal_identity_number": "198701012554",
  "given_name": "Ulla",
  "surname": "Alm"
}
        

Tips på resurser

  • Spring Boot Starter - org.keycloak:keycloak-spring-security-adapter:3.1.0.Final
  • Java JWT bibliotek - com.auth0:java-jwt:3.2.0
  • JWT Debugger - https://jwt.io