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:
- Hämta ut länken från attributet
iss
i ID token. - Utföra en GET {iss}/.well-known/openid-configuration
- Hämta ut auktorisationstjänstens publika nyckel genom att följa länken i attributet
jwks_uri
, se ovan. - Validera signaturen för ID token med den publika nyckeln
- Extrahera användarinformation (personnummer, namn) från attributen
personal_identity_number
,given_name
ochsurname
{ "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