Altinn / altinn-authentication

Altinn platform microservice for handling authentication
5 stars 3 forks source link

Tilby App/Ressurs Token for asyncrone prosesser #769

Open TheTechArch opened 1 week ago

TheTechArch commented 1 week ago

Beskrivelse

Det er behov for at Apper i Altinn platformen utfører operasjoner på data som krever tilgangstyring hvor det ikke er en sluttbruker som er den som direkte trigger operasjonen. I dag utføres slike jobber med at Appene tar vare på token fra bruker og bruker det til den asynkrone prosessen er over. Et eksempel på slikt bruk er PDF generering.

Man ønsker å se på en løsning som muligjør at appene kan trigger prosesser som får lov å endre data uten at denne prosessen sitter på en bruker token.

Krav

Definisjoner

In scope

Altinn App token endepunkt i Altinn Autentication

Et nytt endepunkt introduseres som lar App kalle endepunkt for å generere Altinn token. Endepunktet bør ha følgende begrensinger

Endepunktet kan lages slik at Appen autentiseres seg med Access Token som appen selv genererer basert på sertifikat tilgjengelig i AKS.

Endepunkt i autentisering validererer at ISS i token matcher org i app identifer som det bes om.

Autorisasjon av App token

For å kunne autorisere tilgang til at App kan modifisere data tilknyttet en instance for en avgiver så må reglene i policy oppdateres slik at de definerer hva appen kan utføres. I mange tilfeller vil det mest sannsynlig være det å kunne lese og skrive data til instance. F.eks legge til PDF eller oppdatere status på en instance.

Relle behov er beskrevet i denne issue https://github.com/Altinn/app-lib-dotnet/issues/813

Vi må legge til en regel som referer til App identity som utførende av operasjonen. Formatet må nok være på {org}/{app} formatet

<xacml:Rule RuleId="urn:altinn:resource:ske-innrapportering-boligselskap:ruleid:1" Effect="Permit">
        <xacml:Description></xacml:Description>
        <xacml:Target>
            <xacml:AnyOf>
                <xacml:AllOf>
                    <xacml:Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
                        <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">app_skd_flyttemelding</xacml:AttributeValue>
                        <xacml:AttributeDesignator AttributeId="urn:altinn:resource" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </xacml:Match>
                </xacml:AllOf>
            </xacml:AnyOf>
            <xacml:AnyOf>
                <xacml:AllOf>
                    <xacml:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ske-innrapportering-boligselskap</xacml:AttributeValue>
                        <xacml:AttributeDesignator AttributeId="urn:altinn:resource" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </xacml:Match>
                </xacml:AllOf>
            </xacml:AnyOf>
            <xacml:AnyOf>
                <xacml:AllOf>
                    <xacml:Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
                        <xacml:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">write</xacml:AttributeValue>
                        <xacml:AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </xacml:Match>
                </xacml:AllOf>
            </xacml:AnyOf>
        </xacml:Target>
    </xacml:Rule>

Out of scope (evt. senere leveranse)

# Features
- [ ] Legg til features her
martinothamar commented 1 week ago

Tror dette hadde funket bra, eneste mismatchen er som nevnt det at appen må oppdatere policy. En kategori av ting vi ønsker å gjøre i appens kontekst er cleanup og bookkeping av intern state. I den settingen er det rart at vi ber app-koden om lov til å gjøre ting som appen gjøre for å funke (det burde ikke være optional/opt-in)