-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implementere full autorisasjonskontroll på dialoger i søke-API for sluttbrukere #42
Closed
4 tasks done
Tracked by
#41
Milestone
Comments
elsand
moved this from 🆕 New
to 📋 Backlog
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Jun 6, 2023
This was referenced Jul 4, 2023
elsand
moved this from 📋 Backlog
to 🔖 Klar for implementering
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Jul 6, 2023
elsand
moved this from 🔖 Klar for implementering
to 📋 Backlog
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Jul 6, 2023
elsand
changed the title
Implementere autorisasjonskontroll på dialoger i liste-API
Implementere autorisasjonskontroll på dialoger i liste-API for sluttbrukere
Jul 6, 2023
elsand
changed the title
Implementere autorisasjonskontroll på dialoger i liste-API for sluttbrukere
Implementere autorisasjonskontroll på dialoger i søke-API for sluttbrukere
Jul 19, 2023
elsand
moved this from 📋 Backlog
to 🔖 Klar for implementering
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Jul 20, 2023
elsand
changed the title
Implementere autorisasjonskontroll på dialoger i søke-API for sluttbrukere
Implementere full autorisasjonskontroll på dialoger i søke-API for sluttbrukere
Nov 15, 2023
elsand
moved this from 🔖 Klar for implementering
to 📋 Backlog
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Nov 16, 2023
elsand
moved this from Backlog
to 🔖 Klar for implementering
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Apr 9, 2024
2 tasks
elsand
moved this from Ready
to Doing
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Jun 21, 2024
4 tasks
5 tasks
4 tasks
elsand
added a commit
that referenced
this issue
Sep 4, 2024
## Description This is the precursor to #875, adding the SubjectResource (was "RoleResource") entity and update mechanism that uses the new changefeed API in RR This adds a "Janitor" console project, which can be invoked in container app jobs (or manually) to perform the syncronization. ## Related Issue(s) - #42 ## Verification - [ ] **Your** code builds clean without any errors or warnings - [ ] Manual testing done (required) - [ ] Relevant automated test added (if you find this hard, leave it and we'll help out) ## Documentation - [ ] Documentation is updated (either in `docs`-directory, Altinnpedia or a separate linked PR in [altinn-studio-docs.](https://github.com/Altinn/altinn-studio-docs), if applicable) --------- Co-authored-by: Magnus Sandgren <5285192+MagnusSandgren@users.noreply.github.com> Co-authored-by: Are Almaas <arealmaas@gmail.com> Co-authored-by: Ole Jørgen Skogstad <skogstad@softis.net>
elsand
added a commit
that referenced
this issue
Sep 6, 2024
## Description This implements a authorized-parties based approach to list/search authorization, which should scale better than the current approach. This builds on the syncronization of data from RR, which contains a map of subjects (role codes and eventually access packages) and resources. This data is persisted in Dialogporten DB, and used as a cache. A new predicate builder `PrefilterAuthorizedDialogs` replaces`WhereUserIsAuthorizedFor`, and constructs a SQL manually in order to propertly handle the new property `SubjectsByParties` in `DialogSearchAuthorizationResult`, which is a dict of party->subjects. Each of the roles grant access to a list of resources. This also removes legacy system users, as they cannot be authorized this way (not possible to get a list of parties from Authorization APIs for a legacy system user). ## Related Issue(s) - #42 ## Verification - [x] **Your** code builds clean without any errors or warnings - [x] Manual testing done (required) - [ ] Relevant automated test added (if you find this hard, leave it and we'll help out) ## Documentation - [ ] Documentation is updated (either in `docs`-directory, Altinnpedia or a separate linked PR in [altinn-studio-docs.](https://github.com/Altinn/altinn-studio-docs), if applicable) --------- Co-authored-by: Magnus Sandgren <5285192+MagnusSandgren@users.noreply.github.com>
github-project-automation
bot
moved this from Testing / Design QA
to Done
in ⚠️ Dialogporten / Arbeidsflate - GAMMEL - se https://github.com/orgs/Altinn/projects/146 ⚠️
Sep 12, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Søke-API-et skal i likhet med oppslag på enkelt-dialoger (#43) være gjenstand for autorisasjons. Hvorvidt tilgang skal gis for et gitt elemeent defineres på samme måte som i #43, altså at den autentiserte brukeren er gitt enten en rolle eller tjeneste-/instansrettighet for den aktuelle dialogen. Det skilles altså ikke på "actions" her; brukeren kan f.eks. kun være gitt "sign", men også det vil være nok til å kunne se dialogen i både søke- og detalj-API-et i Dialogporten.
En "naiv" tilnærming til være å først foreta søket i databasen basert på de parametre som oppgis, og så autorisere dem etterpå (enten én og én eller i batcher av multi-requests). Dette vil ikke fungere, siden det vil være mulig å konstruere søk som treffer veldig mange elementer i databasen, men hvor brukeren bare er autorisert til å se en liten del av dem. LIMIT-delen av spørringen vil derfor kunne føre til at man ikke treffer noe av det brukeren er autorisert for i det hele tatt, og vil da ende opp med en tom liste. I Altinn2 er dette "løst" med at man gjør en noenlunde spisset spørring på en "kandidatliste" på inntil 5000 elementer, som da autoriseres etterpå. Dette er ineffektivt, og gjør bl.a. paginering vanskeligere.
En bedre løsning er å foreta en autorisasjonforespørsel først basert på søkeparametrene, og basert på svaret man får, bygge en spørring til database som inkorporerer denne informasjonen, slik at det en får tilbake fra databasen alltid er noe brukeren er autorisert til å se. Dette har vesentlige fordeler:
after
-parameter), eller bare endrer på sortering, blir autorisasjonsforespørselen den samme; så en kortlevd cache på denne requesten vil ha god effektEn utfordring med denne løsningen er at det vil føre til stor ulikhet i queries mot databasen, og noen vil potensielt kunne innholde store mengder parametere i worst case (f.eks. DAGL hos et stort regnskapshus vil med søk kun på tjenesteressurs ende opp med at det blir sendt noe tilsvarende en
WHERE party IN (...)
med titusenvis av verdier. Instansdelegeringer må også håndteres. Det antas dog at dette er et enklere problem å skulle optimalisere, enn en tilnærming hvor én og én autoriseres i etterkant.Per kriteriene i #34 vil vi som et minimum enten ha en liste med tjenesteressurser eller en liste med parties brukeren ønsker å filtrere på, så det er disse tre casene som må støttes:
For autentisert bruker, uthenting av alle autoriserte dialoger ...
Antagelsen er at et case hvor det verken filtreres på tjenesteressurs eller parties vil være for krevende ytelsesmessig (siden man for hver eneste party (eller ressurs) også må finne ut alle autoriserte ressurser (eller parties). En slags "upper bound" for antall "ressurstilganger" (altså en eller annen tilgang til en ressurs for en party) vil være
antall ressurser*antall avgivere
, som for enkelte brukere vil kunne være mange millioner. Ved å kreve én av delene, og ha et maks antall verdier i disse listene kan man begrense størrelsen på reponse-payloads for brukere som har svært mange avgivere.Oppslag mot API-er i access-management
For case 2 kan det benyttes noe ala /{party}/authorizedparties/filtered, hvor man da oppgir autentisert bruker som {party} og legger inn oppgitte tjenesteressurser i
filterResource
. En utvidelse i må imidlertid på plass for å kunne håndtere å vite hvilke av de oppgitte tjenesteressursene er det gitt tilgang til for hver party, samt instansdelegering, altså hvor autentisert bruker kun er autorisert for enkelte instanser knyttet til en tjenesteressurs. FEDIT: utlisting av ressurser er blitt forsøkt, men dette blir for ytelseskrevende og resulterer i enorme DTOer. Dette API-et vil kun gi en liste over hvilke roller/access groups innlogget bruker har for et gitt party. Instansdelegering vil komme ettehvert.
For case 1 vil det være behov for det "inverse" oppslaget, altså noe ala
/{party}/authorizedresources/filtered
, hvor man sender inn en request-modell med enfilterParties
, og får tilbake en liste med de tjenesteressursene brukeren har tilgang til. Også her vil det være behov for en håndtering av tjenesteressurser/parties, samt instansdelegering tilsvarende utvidelsen skissert for case 2.EDIT: case 1 vil ikke implementeres i denne omgang
Eksempel på responsmodell for
authorizedresources
For case 3 vil begge oppslagene kunne brukes, hvorpå Dialogporten etterpå filtrerer resultatet utfra oppgitt party- eller tjenesteressurs-filter. Her vil man potensielt kunne dynamisk velge det ene eller det andre kallet avhengig av hvor mange parties eller tjenesteressurser det filtreres på.
EDIT: det må etableres en cache i Dialogporten som mapper ressurs og rolle/access group. Dette krever et nytt API i resource registry, samt en mekanisme for synkronisere.
Tasks
Akseptansekriterier
GITT en autentisert bruker som foretar en request til søke-API-et
NÅR brukeren har tilgang til en gitt dialog som omfattes av søket
SÅ skal dialogen inkluderes i responsen
GITT en autentisert bruker som foretar en request til søke-API-et
NÅR brukeren ikke har tilgang til en gitt dialog som omfattes av søket
SÅ skal dialogen ikke inkluderes i responsen
De funksjonelle kriteriene for #34 ligger for øvrig til grunn.
Avhenger av
Se også
The text was updated successfully, but these errors were encountered: