DK privilege - claim transforms

FoxIDs understøtter konvertering af DK XML privilege til JSON, så tokens bliver læsbare og privilege strukturen er nemmere at arbejde med. DK privilege bruges i den danske NemLog-in og Context Handler (på dansk kaldet Fælleskommunal Adgangsstyring).

Understøttet privilege standard:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs understøtter PrivilegeGroup elementer defineret i model 2 (scoping og delegation) og model 3 (scoping, delegation og constraint).
  • FoxIDs understøtter både at læse den base64 kodede privilege streng fra standard claim https://data.gov.dk/model/core/eid/privilegesIntermediate og en custom defineret claim.

Konfigurering af DK privilege - claim transforms

DK privilege kan konfigureres både i en SAML 2.0 autentificeringsmetode og applikationsregistrering og ligeledes i en OpenID Connect autentificeringsmetode og applikationsregistrering.

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

Konfigurer DK privilege claim transformer på SAML 2.0 autentificeringsmetode i FoxIDs Control Client:

  1. Vælg fanen Claim transform
  2. Klik Add claim transform og klik DK XML privilege to JSON
  3. Klik Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Model 2

DK privilege claim transformeres til en liste af claims, én claim for hver gruppe. XML PrivilegeGroup elementet transformeres til et JSON objekt og serialiseres som en streng.

De 4 mulige scopes oversættes til properties med et kort navn:

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

Privilege element(er) oversættes til property p med privilege værdi(er) som en liste.

DK privilege base64 dekodet eksempel: (med ekstra mellemrum og linjeskift kun til visning)

<?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>

Oversættes til to claims med JSON værdier: (med ekstra mellemrum og linjeskift kun til visning)

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

og

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

Model 3

Model 3 er en udvidelse af Model 2.

Constraint element(er) oversættes til property c med constraint(s) som en liste af key value par.

DK privilege base64 dekodet eksempel: (med ekstra mellemrum og linjeskift kun til visning)

<?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>

Oversættes til en claim med JSON værdi: (med ekstra mellemrum og linjeskift kun til visning)

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

Brug JSON privilege claim i en applikation

Applikationsregistreringen modtager privilege claim med privilege serialiseret som en JSON streng. Følgende C# kode eksempel viser hvordan JSON claim deserialiseres til et objekt i en ASP.NET Core applikation med Newtonsoft.Json.

Opret 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; }
}

og deserialiser claim i f.eks. en 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
}

Dit privatliv

Vi bruger cookies til at gøre din oplevelse på vores websites bedre. Klik på 'Acceptér alle cookies' for at acceptere brugen af cookies. For at fravælge ikke-nødvendige cookies, klik på 'Kun nødvendige cookies'.

Besøg vores privatlivspolitik for mere