Authenticatie, Autorisatie & Beveiliging
De Apotheek Jansen App bevat medische en bedrijfsgevoelige informatie en maakt daarom gebruik van een strikt beveiligingsmodel. Dit document beschrijft hoe we de toegang tot de app en de zichtbaarheid van gegevens binnen de app beheren.
Toegangsbeheer op basis van rollen (RBAC)
De applicatie maakt gebruik van Role-Based Access Control (RBAC). De toegang tot gegevens is direct gekoppeld aan de specifieke functie van een medewerker (zoals apotheker, assistent of bezorger).
- Een medewerker krijgt uitsluitend toegang tot modules en overzichten die noodzakelijk zijn voor de uitvoering van zijn of haar werkzaamheden (Least Privilege).
- Autorisatierechten worden op serverniveau gevalideerd bij elke aanvraag.
Beveiliging van patiëntgegevens
Wanneer er binnen modules gewerkt wordt met herleidbare patiëntgegevens, gelden aanvullende beveiligingsmaatregelen:
- Versleutelde Opslag: Gevoelige gegevens, zoals patiëntnamen en geboortedata, worden versleuteld in de database bewaard. Zonder de juiste cryptografische sleutels zijn deze gegevens niet leesbaar op databaseniveau.
- Herauthenticatie per inzage: Voordat een scherm met patiëntgegevens opengaat, moet de gebruiker zich opnieuw bevestigen met een code uit zijn authenticator-app of met biometrie. Ingelogd zijn is niet genoeg. Die bevestiging blijft daarna een beperkte tijd geldig en vervalt vanzelf. Hoe dat er in de praktijk uitziet staat verderop, onder "Bevestigen bij patiëntgegevens".
- Alleen op het netwerk van de apotheek: schermen met patiëntgegevens gaan alleen open vanaf de netwerken die de apotheek daarvoor heeft vastgelegd. Op een telefoon buiten de apotheek blijven ze dicht, ook met het juiste recht en een verse bevestiging.
- Geen uitzonderingen voor beheerders: ook een beheerdersaccount moet deze bevestiging geven, en ook een beheerder komt er van buiten het netwerk niet in. Er is geen rol die eromheen komt.
- Vastlegging: elke raadpleging van een patiëntdossier wordt vastgelegd met gebruiker en tijdstip, in een logboek dat de app zelf niet kan wijzigen of wissen. Een geweigerde poging wordt net zo goed vastgelegd.
Die drie horen bij elkaar en vervangen elkaar niet. Het recht bepaalt wie iets mag zien, de bevestiging bepaalt dat het ook echt die persoon is, en het netwerk bepaalt van waaraf. De netwerkbeperking geldt uitsluitend voor patiëntgegevens. Rooster, agenda, uren, voorraad, de reviewplanner en Atlas blijven overal gewoon werken.
Twee prijzen: inloggen en bevestigen
Alles hieronder is een variant op één regel. Inloggen kost één bewijs. Patiëntgegevens openen kost daarbovenop een verse tweede bevestiging, elke keer opnieuw. Wie dat onderscheid eenmaal ziet, snapt de rest van deze pagina vanzelf.
Je account in gebruik nemen
Een beheerder nodigt je uit en je krijgt een mail met een link die één keer werkt. Daar kies je je wachtwoord en koppel je je authenticator-app door een QR-code te scannen. Dat koppelen is verplicht: zonder authenticator komt niemand binnen, langs welke inlogmethode dan ook.
De code die je daar meteen intypt telt al als bevestiging. Zet je aansluitend biometrie aan, dan is je telefoon direct volledig bruikbaar en hoef je niets extra's te doen.
Rond je die uitnodiging niet af, dan lukt inloggen niet. De app zegt dan alleen dat de combinatie niet klopt, en met opzet niets specifiekers: aan een foutmelding mag niet af te lezen zijn of een account bestaat.
De manieren om in te loggen
| Manier | Waar | Wat je doet |
|---|---|---|
| Wachtwoord | overal | e-mailadres of naam, plus je wachtwoord |
| Biometrie | app op de telefoon | Face ID of Touch ID |
| Passkey | browser op de telefoon | Face ID, Touch ID of je schermvergrendeling |
| QR-code | computer | de code op je scherm scannen met je telefoon |
| Google, Apple of Microsoft | overal | inloggen bij die dienst |
| Baliecomputer | computer in de apotheek | niets, de computer is herkend |
Bij geen enkele hiervan wordt om een authenticatorcode gevraagd. Die hoort bij de tweede prijs, niet bij de eerste.
De QR-code op de computer scan je met de gewone camera van je telefoon. Heb je de app, dan opent hij meteen op het bevestigingsscherm. Heb je hem nog niet, dan opent je browser een pagina met de app-download bovenaan en daaronder de mogelijkheid om gewoon in te loggen en de computer te bevestigen. Die pagina werkt altijd: de app is de snelle weg, niet de enige weg.
Een paar dingen die opvallen in dat rijtje:
- Een passkey geeft meteen ook de bevestiging. Hij bewijst twee dingen tegelijk: dat dit het juiste apparaat is en dat de juiste persoon het vasthoudt. Dat is precies wat er bij patiëntgegevens gevraagd wordt. Nieuwe passkeys worden niet meer aangeboden; wie er al een heeft blijft hem gewoon gebruiken.
- Biometrie op de telefoon doet dat pas na één keer. Zie de volgende paragraaf.
- Inloggen met Google, Apple of Microsoft telt nooit als tweede bewijs. Het is een manier om binnen te komen, verder niets. Je kunt zo'n koppeling altijd weghalen, want je wachtwoord en je authenticator blijven er altijd naast staan.
- De baliecomputer is een gedeelde inlog en komt daarom nooit bij patiëntgegevens. Aan die inlog kun je ook geen telefoon koppelen, omdat hij niet bij één persoon hoort. Een computer wordt herkend zodra iemand er in de apotheek een keer op inlogt, op welke manier uit dit rijtje dan ook, en blijft herkend zolang de computer in gebruik is. Op een telefoon of tablet met de app werkt dit niet.
Biometrie op je telefoon: één keer een code
Biometrisch inloggen aanzetten kost niets. Je zet het aan, je bevestigt met Face ID of Touch ID, en vanaf dat moment log je zo in.
De eerste keer dat je met diezelfde telefoon ook patiëntgegevens wilt bevestigen, vraagt de app eenmalig een code. Dat gebeurt vanzelf op het eerste moment dat het nodig is, en er zijn vier van die momenten:
- bij het bevestigen van je uitnodiging;
- bij het instellen van een nieuwe authenticator;
- bij het eerste patiëntscherm dat je op je telefoon opent;
- bij het scannen van een QR-code om een computer te bevestigen.
Bij de eerste twee heb je die code toch al gegeven en merk je er niets van. Na dat ene moment volstaat Face ID of Touch ID, ook voor het bevestigen van een computer. De app laat het één keer weten wanneer het zover is.
Je hoeft dat moment niet af te wachten. Zodra je biometrie hebt aangezet, vraagt de app één keer of je van deze telefoon meteen een vertrouwd apparaat wilt maken. Kies je "Doorgaan", dan typ je je code en is het geregeld. Kies je "Niet nu", dan verandert er niets en komt het moment later vanzelf langs. Die vraag komt alleen als er iets te vragen valt: is je telefoon al vertrouwd, dan zegt de app niets.
In je profiel, onder Beveiliging, staat onder "Biometrische login" in één regel waar deze telefoon aan toe is. Staat biometrie uit terwijl je telefoon het kan, dan is die regel de uitnodiging om het aan te zetten. Onder Apparaten zie je welke telefoons aan je account hangen en welke daarvan een vertrouwd apparaat is. Daar kun je het ook zelf in orde maken met de knop "Vertrouwd maken", en een telefoon die je niet meer gebruikt intrekken.
Bevestigen bij patiëntgegevens
Open je iets gevoeligs, dan verschijnt hetzelfde bevestigingsscherm, of je nu in een medicatiebeoordeling, in beheer of in je profiel zit. Wat je ziet hangt af van je apparaat:
- Vertrouwd apparaat: Face ID of Touch ID komt vanzelf in beeld en je tikt verder niets. Breek je af, dan staat het codeveld er gewoon nog.
- Telefoon die dat nog niet is: geen prompt, maar direct het codeveld. Je typt één keer een code, en daarmee hoor je voortaan bij het geval hierboven.
- Telefoon zonder biometrie: het scherm wijst je naar het codeveld op de computer. Kan je telefoon wel biometrie maar staat het uit, dan vertelt het scherm waar je het aanzet.
- Computer: een codeveld met daarnaast een QR-code. Scan je die met een telefoon die al bevestigd mag hebben, dan is Face ID genoeg. Kan die telefoon dat nog niet, dan vraagt hij eenmalig je code en is het daarna geregeld. Heb je geen biometrie op je telefoon, dan typ je de code gewoon op de computer.
Krijg je een bevestigingsverzoek op je telefoon dat je niet zelf startte, dan kun je het weigeren met "Ik was dit niet". Daar is geen Face ID voor nodig: nee zeggen moet altijd kunnen. Herken je het verzoek niet, wijzig dan je wachtwoord.
Een bevestiging blijft daarna een beperkte tijd geldig en loopt mee zolang je doorwerkt. Daarna vervalt hij vanzelf.
Op de baliecomputer
De kiosk-login is een gedeeld account, dus de app kan niet vastleggen wie er achter het scherm zit. Open je daarmee een scherm met patiëntgegevens of een andere gevoelige handeling, dan krijg je geen codeveld en geen QR-code maar een uitleg. Een code zou hier niets oplossen, omdat het gedeelde account zelf niets kan bevestigen.
Waarom dat zo is: bij patiëntgegevens moet vastliggen welke medewerker ze bekijkt. Dat hoort bij persoonsgebonden logging en informatiebeveiliging volgens NEN 7510, en met een gedeeld account kan dat niet.
Op dat scherm staan twee knoppen: Uitloggen en Terug. Log je uit, dan kom je op het gewone inlogscherm en kies je zelf hoe je met je eigen account inlogt. De kiosk-login blijft daar staan voor de volgende collega die alleen even het rooster wil zien.
Buiten de apotheek
Zit je niet op het netwerk van de apotheek, dan krijg je bij een scherm met patiëntgegevens geen codeveld maar een uitleg: patiëntgegevens zijn alleen binnen de apotheek te openen. Er wordt met opzet niet om een code gevraagd, omdat ook een goede code je hier niet binnen zou brengen.
Op dat scherm staat het adres dat de app van jouw verbinding ziet. Dat adres is wat een beheerder nodig heeft om het toe te voegen, dus geef het door als je denkt dat je wel op het juiste netwerk zit. Verder staan er twee knoppen: Opnieuw proberen, voor als je net op het netwerk van de apotheek bent gekomen, en Terug.
De rest van de app werkt in die situatie gewoon door. Kom je op het netwerk van de apotheek, of laat je een beheerder je adres toevoegen, dan gaan de schermen zonder verder gedoe weer open.
Als je iets kwijt bent
Je wachtwoord vergeten regel je zelf: vraag vanaf het inlogscherm een herstelmail aan, kies via de link een nieuw wachtwoord en log daarna gewoon opnieuw in.
Je authenticator kwijt is de enige situatie waarvoor je een beheerder nodig hebt. Die zet een nieuwe voor je klaar, en je stelt hem in via een link in de mail die je dan krijgt.
Let op wat er in beide gevallen ook gebeurt: bij een wachtwoordwijziging of een nieuwe authenticator worden alle gekoppelde telefoons ingetrokken. Dat is een beveiligingsmaatregel, geen storing. Je zet biometrie daarna gewoon opnieuw aan, en betaalt eenmalig weer die ene code. Intrekken is definitief: dezelfde telefoon opnieuw koppelen levert een nieuwe koppeling op die weer bij nul begint.
Sessiebeheer
Na het inloggen krijgt het apparaat tijdelijke toegang die periodiek automatisch wordt vernieuwd. Rond het beëindigen van een sessie gelden de volgende regels:
- In de browser blijf je ingelogd: de toegangsgegevens worden zo bewaard dat ze een herlaadbeurt, een nieuw tabblad en een afgesloten laptop overleven, terwijl scripts op de pagina er niet bij kunnen.
- Uitloggen werkt direct: zodra een gebruiker uitlogt, worden de toegangsgegevens van dat apparaat ingetrokken. Het apparaat kan bij de eerstvolgende aanvraag niets meer opvragen. Dit werkt ook wanneer de sessie al verlopen was.
- Wachtwoord wijzigen of authenticator vervangen: hierbij worden alle andere sessies beëindigd. Die apparaten kunnen hun toegang niet meer vernieuwen. Het apparaat waarop de wijziging is gedaan blijft ingelogd.
- Begrensde uitloop: een ander apparaat dat op dat moment al was ingelogd, kan nog een korte, begrensde periode werken voordat de toegang vervalt. Wie zeker wil zijn dat een verloren apparaat per direct niets meer kan, laat de beheerder de tweefactorauthenticatie opnieuw instellen.
Transportbeveiliging
Al het verkeer naar de app loopt over HTTPS. De server dwingt dit af en instrueert de browser om voortaan alleen nog een beveiligde verbinding te gebruiken. Cookies die de server plaatst zijn niet leesbaar voor JavaScript in de browser en worden uitsluitend over een beveiligde verbinding verstuurd.
Interne beveiliging
De onderdelen van de app praten onderling niet zomaar met elkaar. Elk onderdeel krijgt uitsluitend toegang tot de gegevens en diensten die het voor zijn eigen taak nodig heeft, en die toegang wordt per aanvraag door de cloudomgeving zelf afgedwongen in plaats van door een gedeeld wachtwoord. Alle gegevens staan versleuteld opgeslagen en blijven binnen de Europese Unie.