Skip to content
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 støtte for å definere og kontrollere krav til scope i token ved referanse til tjenesteressurs #40

Open
2 of 4 tasks
elsand opened this issue Jun 6, 2023 · 0 comments
Labels
auth Issue related to authentication / authorization enhancement New feature or request

Comments

@elsand
Copy link
Member

elsand commented Jun 6, 2023

Det er behov for tjenesteeier å begrense hvilke tjenester (altså service resources) en gitt klient hos dem kan aksessere for å bygge sikring mellom de ulike systemene. Dette løses gjennom å kreve at ytterligere scopes oppgis for å kunne aksessere en gitt tjenesteressurs.

Disse reglene defineres i XACML-policy for den aktuelel ressursen gjennom en "action" vi kaller "administrate". Kun scopes-attributter på subjektet støttes/hensyntas.

I tillegg må det vurderes om dette er noe som også skal være en del av dialog-entiteten slik at tjenesteeiere kan ytterligere styre egen tilgang på dialog-nivå. Edit: Dette gjøres i egen issue.

Implementasjon

I stedet for å gjøre kall mot PEP-API, henter vi policies for hver ressurs og benytter Altinn.Authorization.ABAC for å parse ut reglene som regulerer dette og utvider cachen med informasjon om scope-krav.

Ved hjelp av FusionCache som etableres i #274, har vi en to-nivå cache som lar oss finne ut hvilke ressurser som eies av en gitt tjenesteeier, og evt. hvilke scopes denne krever.

Det etableres to stk to-nivå cache; hvor nivå 1 er en memorycache som populeres gjennom en BackgroundService. Denne background-servicen har en IDistributedCache som den populerer memorycachen med. IDistributedCache skal ha Redis som backing, men dette løses i #275.

Cache nr 1 har èn key - som inneholder en liste over ressurser i ressursregisteret knyttet til organisasjonsnummer (tjenesteeier), altså det vi har i dag. TTL på denne settes til 1200 sekunder, med eager refresh (etter 80% av TTL). Jitter for å unngå flere samtidige requests på tvers av replikas.

Cache nr 2 har keys per ressurs fra listen over. Denne inneholder en liste over scopes som evt. kreves oppgitt av tjenesteeier per ressurs. TTL på denne 3600 sekunder, med eager refresh (etter 80% TTL). Jitter for å unngå flere samtidige requestes på tvers av replikas.

Som en optimalisering, etableres en egen backgroundservice som - med utgangspunkt i cache #1 - regelmessig løper gjennom alle keys for å pre-populere cache #2. Dette vil innebære at under normale omstendigheter vil requester alltid treffe cache.

  • Ressursenes policy ligger på /resourceregistry/api/v1/resource/{ressursId}/Policy
  • ABAC-biblioteket brukes for å hente ut scope-krav
    • subject-attributt(er) av typen "urn:altinn:scope"
    • resource-attributt av typen "urn:altinn:resource" der verdien matcher serviceIdentifier
    • action-attributt av for verdien "administrate"

Tasks

Preview Give feedback

Se også

@elsand elsand added this to the PoC gjennomført milestone Jun 6, 2023
@elsand elsand added auth Issue related to authentication / authorization analysis Pre-architecture/design work labels Jul 6, 2023
@elsand elsand removed the analysis Pre-architecture/design work label Nov 13, 2023
@oskogstad oskogstad assigned oskogstad and unassigned oskogstad Aug 13, 2024
@elsand elsand removed this from the Fullskala produksjon milestone Sep 12, 2024
@elsand elsand added the enhancement New feature or request label Sep 12, 2024
@elsand elsand added the needs consideration Requires additional consideration label Oct 9, 2024
@elsand elsand removed the needs consideration Requires additional consideration label Nov 13, 2024
elsand added a commit that referenced this issue Nov 15, 2024
## Description

This adds a command akin to sync-subject-resources which fetches
information about resource policies and stores the information to a
table in postgres. For now, this only parses and stores XACML
obligations for required authentication level, but can be fairly easily
extended to implement eg. #40

There are however some real limitations to the Resource Registry as of
now for Altinn Apps, as they are not really stored there, but merely
have a representation that does not include the policy. ~~For these, we
store a default authentication level.~~ Edit: We don't do this, as we
cannot safely assume anything here. So we do not store anything unless
we have an explicit obligation for authentication level set in a policy
we can reach. For all other resources, no authentication level handling
will be performed.

## Related Issue(s)

- #1214 
 
## 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)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Release Notes

- **New Features**
	- Introduced a new command for synchronizing resource policies.
- Added support for managing resource policy information in various
environments (production, staging, test).
- Enhanced deployment capabilities with a new scheduled job for resource
policy synchronization.
  
- **Bug Fixes**
	- Improved error handling and logging during synchronization processes.

- **Documentation**
- Updated command documentation to include new synchronization options
and parameters.

- **Chores**
- Added new settings to local development configurations to manage
synchronization behavior at startup.
- Introduced additional configuration settings for local development to
control synchronization processes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Magnus Sandgren <5285192+MagnusSandgren@users.noreply.github.com>
Co-authored-by: Ole Jørgen Skogstad <skogstad@softis.net>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
auth Issue related to authentication / authorization enhancement New feature or request
Projects
Development

No branches or pull requests

2 participants