DK privilege - claim transforms

FoxIDs ondersteunt het converteren van DK XML privilege naar JSON, zodat tokens leesbaar zijn en de privilege structuur eenvoudiger is om mee te werken. DK privilege wordt gebruikt in de Deense NemLog-in en Context Handler (in het Deens Fælleskommunal Adgangsstyring).

Ondersteunde privilege standaard:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs ondersteunt PrivilegeGroup elementen gedefinieerd in model 2 (scoping en delegatie) en model 3 (scoping, delegatie en constraint).
  • FoxIDs ondersteunt zowel het lezen van de base64 gecodeerde privilege string uit de standaard claim https://data.gov.dk/model/core/eid/privilegesIntermediate als een custom gedefinieerde claim.

DK privilege - claim transforms configureren

DK privilege kan zowel in een SAML 2.0 authenticatiemethode en app registratie als in een OpenID Connect authenticatiemethode en app registratie worden geconfigureerd.

  • De SAML 2.0 claim https://data.gov.dk/model/core/eid/privilegesIntermediate wordt getransformeerd.
  • De OpenID Connect / JWT claim privileges_intermediate wordt getransformeerd.

Configureer de DK privilege claim transformer op een SAML 2.0 authenticatiemethode in FoxIDs Control Client:

  1. Selecteer het tabblad Claim transform
  2. Klik Add claim transform en klik DK XML privilege to JSON
  3. Klik Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Model 2

De DK privilege claim wordt getransformeerd naar een lijst met claims, één claim per groep. Het XML PrivilegeGroup element wordt getransformeerd naar een JSON object en geserialiseerd als string.

De 4 mogelijke scopes worden vertaald naar properties met een korte naam:

  • Scope="urn:dk:gov:saml:cvrNumberIdentifier:<cvr_number>" wordt "cvr": "<cvr_number>"
  • Scope="urn:dk:gov:saml:productionUnitIdentifier:<p_number>" wordt "p": "<p_number>"
  • Scope="urn:dk:gov:saml:seNumberIdentifier:<se_number>" wordt "se": "<se_number>"
  • Scope="urn:dk:gov:saml:cprNumberIdentifier:<cpr_number>" wordt "cpr": "<cpr_number>"

De Privilege element(en) worden vertaald naar de property p met de privilege waarden als lijst.

DK privilege base64 gedecodeerd voorbeeld: (met extra spaties en regeleinden alleen voor weergave)

<?xml version="1.0" encoding="UTF-8"?>
<bpp:PrivilegeList xmlns:bpp="http://digst.dk/oiosaml/basic_privilege_profile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    <PrivilegeGroup Scope="urn:dk:gov:saml:cvrNumberIdentifier:12345678">
        <Privilege>urn:dk:some_domain:myPrivilege1A</Privilege>
        <Privilege>urn:dk:some_domain:myPrivilege1B</Privilege>
    </PrivilegeGroup>
    <PrivilegeGroup Scope="urn:dk:gov:saml:seNumberIdentifier:27384223">
        <Privilege>urn:dk:some_domain:myPrivilege1C</Privilege>
        <Privilege>urn:dk:some_domain:myPrivilege1D</Privilege>
    </PrivilegeGroup>
</bpp:PrivilegeList>

Wordt vertaald naar twee claims met JSON waarden: (met extra spaties en regeleinden alleen voor weergave)

{
    "cvr": "12345678",
    "p": [ "urn:dk:some_domain:myPrivilege1A", "urn:dk:some_domain:myPrivilege1B" ]
}

en

{
    "se": "27384223",
    "p": [ "urn:dk:some_domain:myPrivilege1C", "urn:dk:some_domain:myPrivilege1D" ]
}

Model 3

Model 3 is een uitbreiding van Model 2.

De Constraint element(en) worden vertaald naar de property c met de constraint(s) als lijst van key value paren.

DK privilege base64 gedecodeerd voorbeeld: (met extra spaties en regeleinden alleen voor weergave)

<?xml version="1.0" encoding="UTF-8"?>
<bpp:PrivilegeList xmlns:bpp="http://digst.dk/oiosaml/basic_privilege_profile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    <PrivilegeGroup Scope="urn:dk:gov:saml:cvrNumberIdentifier:12345678">
        <Constraint Name="urn:dk:kombit:KLE">25.*</Constraint>
        <Constraint Name="urn:dk:kombit:sensitivity">3</Constraint>
        <Privilege>urn:dk:kombit:system_xyz:view_case</Privilege>
    </PrivilegeGroup>
</bpp:PrivilegeList>

Wordt vertaald naar één claim met JSON waarde: (met extra spaties en regeleinden alleen voor weergave)

{
    "cvr": "12345678",
    "c": [ { "urn:dk:kombit:KLE": "25.*" }, { "urn:dk:kombit:sensitivity": "3" } ]
    "p": [ "urn:dk:kombit:system_xyz:view_case" ]
}

JSON privilege claim gebruiken in een applicatie

De app registratie ontvangt de privilege claim met de privilege structuur geserialiseerd als JSON string. De volgende C# code voorbeeld laat zien hoe je de JSON claim deserialiseert naar een object in een ASP.NET Core applicatie met Newtonsoft.Json.

Maak de privilege group class

public class DkPrivilegeGroup
{
    [JsonProperty(PropertyName = "cvr")]
    public string CvrNumber { get; set; }

    [JsonProperty(PropertyName = "pu")]
    public string ProductionUnit { get; set; }

    [JsonProperty(PropertyName = "se")]
    public string SeNumber { get; set; }

    [JsonProperty(PropertyName = "cpr")]
    public string CprNumber { get; set; }

    [JsonProperty(PropertyName = "c")]
    public Dictionary<string, string> Constraint { get; set; }

    [JsonProperty(PropertyName = "p")]
    public List<string> Privilege { get; set; }
}

en deserialiseer de claim bijvoorbeeld in een controller

var privileges = User.Claims.Where(c => c.Type == "privilege")
    .Select(c => JsonConvert.DeserializeObject<DkPrivilegeGroup>(c.Value)).ToList();
foreach(var privilege in privileges)
{
    // TODO handle access based on the privilege
}

Uw privacy

We gebruiken cookies om uw ervaring op onze websites te verbeteren. Klik op de knop 'Alle cookies accepteren' om akkoord te gaan met het gebruik van cookies. Om niet-noodzakelijke cookies te weigeren, klikt u op 'Alleen noodzakelijke cookies'.

Bezoek onze privacyverklaring voor meer informatie