Project

General

Profile

Project activity #30905

closed

Gebruikers authorisatie contezza-proxy

Added by Tahir Malik 3 months ago. Updated about 2 months ago.

Status:
Resolved
Priority:
P4 Normal
Assignee:
Category:
-
Target version:
Start date:
10/02/2025
Due date:
% Done:

100%

Estimated time:

Description

Probleem nu is dat de proxy zonder gebruikers authenticatie de calls doet naar de backend en die dan een systeem gebruikers gebruikt om bijv. calls te doen naar OpenZaak.

Je kunt nu bijv. via de Contezza Proxy een zaak bijwerken terwijl je geen lid bent van een site of zelfs consumer lid bent.
Initieel:
  • Als je consumer bent van de resource bijv. UUID, dan mag je alle GET's doen
  • Als je collaborator bent van de resource, dan mag je alle POST, PUT, PATCH doen
  • Als je manager bent dan de resource, dan mag je DELETE doen
    • Dit klopt niet voor andere resources zoals Zaak Eigenschappen, Rollen etc.
Brainstorm:
  • AP-Backend leidend maken voor alle permissies ook voor Frontend + Backend
    • Bijv. probleem nu van dat je zaak wel/niet vertouwelijk kan maken frontend vs backend wil je maar op 1 plek beheren

Related issues 4 (3 open1 closed)

Related to Tezza - Project activity #30143: Analyse: ztc en zrc webscripts omzetten naar oz api via contezza-proxy FeedbackContezza Development30/12/2024

Actions
Related to Tezza - Project activity #30436: Ztc en zrc webscripts omzetten naar oz api via contezza-proxyResolvedDiego Mirandola31/12/2024

Actions
Related to Tezza - Project activity #31066: Refactor klanten paginaOn HoldDiego Mirandola27/02/2025

Actions
Related to Tezza - Project activity #31218: Refactor zaken webscriptReady in DevRick de Rooij13/03/2025

Actions
Actions #1

Updated by Tahir Malik 3 months ago

  1. Tezza stuurt een X-API-Resource header mee van de Zaak
    • Contezza-Proxy checkt in Alfresco of de ingelogde gebruiker rechten heeft op de zaak
    • UUID wordt gehasht en daarmee eenvoudig in Alfresco opgezocht
    • Hierdoor hoeft Contezza-Proxy niet UUID's uit de body te halen
  2. Tezza stuurt de requests door naar AP-Backend + Alfresco-Event-Listener ==> Dit wordt de nieuwe Tezza-Backend voor ook toekomstige ontwikkelingen
    • AP Backend doet een check of de ingelogde gebruiker volgens de locale AP rechten heeft op de ZaakType
    • AP Backend doet calls naar OpenZaak/Objecten/Notificaties
    • Overige calls blijven via Contezza-Proxy lopen zoals iConnect,BRP waar geen gebruikers-authenticatie nodig is en voor projecten die geen Tezza hebben
Actions #2

Updated by Diego Mirandola 3 months ago

Oplossing 1 voegt niets toe qua security.
Bovendien de backend heeft al alle informatie om te valideren als de gebruiker rechten heeft, dus het is ook onlogisch dat de gebruiker iets moet toevoegen.
Contezza-proxy moet de uuid's uit de body halen. Dit is geen overhead, het is gewoon noodzakelijk.

Mijn oplossing zou zijn:

Oplossing 2 moet uiteindelijk deze stappen ook volgen, de verandering zou zijn dat de filter niet gebaseerd op alfresco is maar op AP. Ook let op dat de huidige AP implementatie niet kan weten als de gebruiker toegang heeft (en met welke rechten) tot een bepaalde zaak.

Actions #3

Updated by Rick de Rooij 3 months ago

We hebben het volgende afgesproken:

- Contezza Proxy wordt uitgebreid met een filteroptie, waarbij je in je configuratie filters moet instellen.
- De filter kan worden geïmplementeerd in een andere module, namelijk Tezza Services. Dit wordt een Spring Bean.
- De logica gaan we in de code verwerken; we denken nu nog niet na over hoe dit in een configuratiebestand komt, omdat we daar op dit moment niet genoeg overzicht over hebben.
- Een eerste oplossing zou kunnen zijn dat we voor de OpenZaak Proxy alle methodes blokkeren, behalve GET, en deze vervolgens implementeren met een filter.

Actions #4

Updated by Diego Mirandola 3 months ago

  • Assignee changed from Tahir Malik to Diego Mirandola
Actions #5

Updated by Diego Mirandola 3 months ago

  • Status changed from Backlog to In Progress
Actions #6

Updated by Diego Mirandola 3 months ago

Actions #7

Updated by Diego Mirandola 3 months ago

Actions #8

Updated by Diego Mirandola 3 months ago · Edited

Dit is klaar in contezza-proxy branch feature/filters/#30905:
  • FilterRegistryService aangemaakt en geconfigureerd als spring bean:
    • dit verzamelt alle implementaties van interface 'Filter' en bevat een method getFilterByKey om de goede filter op te halen
    • ik heb dit vanuit tezza-services getest, een bean gedefinieerd in de xml context van tezza-services was correct beschikbaar in de registry
  • flow van webscript ContezzaRestProxy aangepast om filters toe te passen:
    • als een filter is gedefinieerd in de configuratie maar bestaat niet in FilterRegistryService -> return 500 en log error
    • als de filter wordt toegepast en de request is niet toegestaan -> return 403 en log error
    • als de filter wordt toegepast en de request wordt wel toegestaan -> log debug en normale flow
    • als er geen filter is gedefinieerd dan er is geen wijziging ten opzicht van de huidige flow
  • filter toegevoegd in de default configuratie van zrc, met key "zrcFilter"
Dit is klaar in tezza-services branch feature/proxy-zrc-filter/#30905:
  • basis ZrcFilter implementation aangemaakt (accepteert alle GET request, weigert de rest) en geconfigureerd in xml context
Actions #9

Updated by Diego Mirandola 3 months ago

Nog een punt waarmee we geen rekening hebben gehouden:
wat moet gebeuren bij een GET/zaken request? In dit geval is er geen resource uuid in de url en ook niet in de body (er is geen body), ideaal zouden we de response moeten uitfilteren maar dit is duidelijk niet realistisch.
De snelste oplossing zou zijn om alle requests die geen resource uuid bevatten uit te filteren.

Actions #10

Updated by Tahir Malik 3 months ago

Voor get zaken zou je alles kunnen laten zien wat geen vertrouwelijke zaken zijn.

Actions #11

Updated by Diego Mirandola 3 months ago

Dus alle zaken door alle pagina's ophalen, filteren, en weer pagination toepassen. Dit lijkt me geen 'proxy' meer.
Ik zou deze functionaliteit in een webscript laten blijven.

Actions #12

Updated by Diego Mirandola 3 months ago · Edited

In contezza-proxy:
  • filters gemarkeerd als required=false in registry service
  • webscript foutmeldingen verbeterd met gebruik van WebScriptException
In tezza-services, zrcFilter implementeert nu de volgende:
  1. De request wordt geweigerd als het is naar endpoint zaken/uuid en het is niet GET
  2. de uuid van de target zaak is gelezen vanuit de request met de volgende logica:
    • als de endpoint heeft de vorm zaken/uuid of zaken/uuid/secondary_path dan de uuid wordt teruggegeven;
    • als het een GET request is en de endpoint 'zaak' als query parameter ondersteunt dan wordt de uuid gelezen vanuit de url van de query parameter 'zaak'
      met name: als er geen zaak uuid gelezen kan worden vanuit de request, dan wordt de request geweigerd (dus GET /zaken wordt altijd geweigerd).
  3. De request wordt geaccepteerd als de gebruiker voldoende rechten (leesrechten voor GET requests, anders schrijfrechten) heeft op de node met dezelfde id als de zaak.
Actions #13

Updated by Diego Mirandola 3 months ago

  • Status changed from In Progress to Ready in Dev
  • Assignee changed from Diego Mirandola to Tahir Malik

Dit is klaar in de branches gemeld in https://support.contezza.nl/issues/30905#note-8
Graag valideren / laten valideren.

De huidige implementatie van de filter zou compatible moeten zijn met bijna alle refactoring uitgevoerd/gepland in #30143 (inclusief bewerken van zaakeigenschappen via proxy).
De uitzondering zijn de calls GET api/zrc/zaken uitgevoerd vanuit widget 'betrokken bij' en pagina 'klanten'. Dit komt omdat de response zou gefilterd moeten worden en het heeft geen zin om dit in een proxy te doen.
Webscript GET api/zrc/zaken moet dus blijven om deze request te ondersteunen en moet aangepast worden om alleen resultaten terug te geven waarop de gebruiker rechten heeft.

Actions #14

Updated by Olav Allema 2 months ago

  • Assignee changed from Tahir Malik to Rick de Rooij
Actions #15

Updated by Tahir Malik 2 months ago

  • Hergebruik van Contezza-Proxy
    • Dus een post-processing van de informatie zodat hij alleen de resultaten teruggeeft van Alfresco
  • Contezza-Proxy extenden in Tezza-service of een service maken van Contezza-Proxy zodat je dit in een tezza-services webscript kan hergebruiken
Actions #16

Updated by Diego Mirandola 2 months ago

Actions #17

Updated by Rick de Rooij about 2 months ago

Ik heb refactor gedaan en gemerged met dev. Bij volgende deploy staat de gewijzigde contezza proxy met filter op dev.

Actions #18

Updated by Diego Mirandola about 2 months ago

@Rick de Rooij @Tahir Malik
Hiermee zou ik #30436 kunnen afronden.
Wat is nu de volgende stap ivm https://support.contezza.nl/issues/30905#note-15 en #31066?
Mijn voorkeur zou zijn om wat nu klaar is te releasen (want in #30436 ligt er best wat werk en die blijft nu hangen) en de volgende stap apart op te pakken.

Actions #19

Updated by Rick de Rooij about 2 months ago

Besproken met Diego:

Actions #20

Updated by Diego Mirandola about 2 months ago

Actions #21

Updated by Diego Mirandola about 2 months ago

Vervolgstappen in https://support.contezza.nl/issues/30905#note-19 worden opgepakt in #31218

Actions #22

Updated by Rick de Rooij about 2 months ago

  • Status changed from Ready in Dev to Resolved
  • % Done changed from 0 to 100

Wijzigingen (filter) zit in release 0.3.0 (7.x) en 1.0.0 (23.x).

Also available in: Atom PDF