Hvordan bygger dere tilgangsstyring i en kundeportal?
Kort svar
Vi legger tilgangsstyringen i databasen, ikke bare i grensesnittet. Med radnivåsikkerhet i Postgres kan en innlogget bruker bare lese og endre rader vedkommende har rett til, selv om en feil i koden over skulle slippe gjennom en forespørsel. Roller leses fra databasen og ikke fra innloggingstokenet, slik at en fjernet tilgang ikke henger igjen. Isolasjonen mellom kunder testes automatisk.
Vi legger tilgangsstyringen i databasen og i et eget lag for datatilgang, ikke bare i grensesnittet eller i middleware. Det betyr at reglene for hvem som får se og endre hva, håndheves der dataene ligger. En feil i en skjerm eller et API-kall skal ikke kunne gi en bruker tilgang til noe vedkommende ikke har rett til.
Hvorfor grensesnittet ikke er nok
I mange løsninger er tilgangsstyringen bygget ved at knapper og menyer skjules for brukere som ikke har rett til dem. Det ser riktig ut, men dataene bak er like tilgjengelige for den som sender forespørselen direkte. I en kundeportal der flere bedrifter deler samme løsning, betyr en slik lekkasje at én kunde kan se en annens priser, ordrer eller dokumenter.
Slik er det bygget i praksis
I en B2B-løsning vi bygger for en kunde, er tilgangsstyringen bygget slik:
- Radnivåsikkerhet i Postgres: databasen avgjør hvilke rader en innlogget bruker kan lese og endre.
- Brukerbundet klient: kundevendt kode bruker alltid en databaseklient som er bundet til den innloggede brukeren, aldri en med fulle rettigheter.
- Roller fra databasen: roller leses fra databasen, ikke fra påstander i innloggingstokenet. Et token kan være gyldig i opptil en time etter at en rolle er fjernet, og så lenge skal ingen beholde en tilgang de har mistet.
- Ansattnivåer: admin har tre nivåer, og nye kontoer opprettes med et midlertidig passord som må byttes.
- Nøkler: integrasjonsnøkler lagres kryptert med AES-256-GCM og vises bare med de fire siste tegnene.
Prosjektet er under utvikling og ikke lansert, men det er denne arkitekturen vi bygger kundeportaler etter.
Testet, ikke antatt
Tilgangsregler som ikke testes, forvitrer når løsningen endres. I samme prosjekt kjører isolasjonstester mot en lokal database som sjekker at én kunde ikke kan lese en annens data, sammen med enhetstester og ende-til-ende-tester, automatisk i CI hver gang koden endres.
Hva vi avklarer med dere
- Hvilke roller som finnes, og hva hver av dem skal kunne gjøre.
- Hvem hos dere som oppretter og fjerner brukere.
- Hva som skal skje når en ansatt slutter, eller en kunde avslutter avtalen.
- Hvilke integrasjoner som trenger nøkler, og hvem som eier dem.
Les mer om hvordan vi bygger webapplikasjoner og kundeportaler, hvordan integrasjoner håndterer nøkler og feil, og hvordan tilganger følges opp etter lansering på vedlikehold og videreutvikling.
Beskriv hvilke brukergrupper portalen skal ha og hva hver av dem skal se, så skisserer vi hvordan rollene kan bygges.
Beskriv rollene i portalenGratis verktøy
Hvor synlig er dere i AI-svar?
Skriv inn domenet, så sjekker vi hvor lett nettstedet er å lese og sitere for ChatGPT, Perplexity og Google AI Overviews. Rapporten med score kommer på e-post.
Relaterte spørsmål