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

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