DK privilege - claim transforms

FoxIDs støtter konvertering av DK XML privilege til JSON, slik at tokens blir lesbare og privilege strukturen er enklere å jobbe med. DK privilege brukes i den danske NemLog-in og Context Handler (på dansk kalt Fælleskommunal Adgangsstyring).

Støttet privilege standard:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs støtter PrivilegeGroup elementer definert i modell 2 (scoping og delegasjon) og modell 3 (scoping, delegasjon og constraint).
  • FoxIDs støtter både å lese base64 kodet privilege streng fra standard claim https://data.gov.dk/model/core/eid/privilegesIntermediate og et custom definert claim.

Konfigurere DK privilege - claim transforms

DK privilege kan konfigureres både i en SAML 2.0 autentiseringsmetode og applikasjonsregistrering og også i en OpenID Connect autentiseringsmetode og applikasjonsregistrering.

  • 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 autentiseringsmetode i FoxIDs Control Client:

  1. Velg fanen Claim transform
  2. Klikk Add claim transform og klikk DK XML privilege to JSON
  3. Klikk Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Modell 2

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

De 4 mulige scopes oversettes til properties med et kort navn:

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

Privilege element(er) oversettes til property p med privilege verdi(er) som en liste.

DK privilege base64 dekodet eksempel: (med ekstra mellomrom og linjeskift kun for 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>

Oversettes til to claims med JSON verdier: (med ekstra mellomrom og linjeskift kun for 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" ]
}

Modell 3

Modell 3 er en utvidelse av modell 2.

Constraint element(er) oversettes til property c med constraint(s) som en liste med key value par.

DK privilege base64 dekodet eksempel: (med ekstra mellomrom og linjeskift kun for 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>

Oversettes til ett claim med JSON verdi: (med ekstra mellomrom og linjeskift kun for visning)

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

Bruke JSON privilege claim i en applikasjon

Applikasjonsregistreringen mottar privilege claim med privilege serialisert som en JSON string. Følgende C# kode eksempel viser hvordan JSON claim deserialiseres til et objekt i en ASP.NET Core applikasjon med Newtonsoft.Json.

Opprett 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
}

Ditt personvern

Vi bruker cookies for å gjøre opplevelsen av nettstedene våre bedre. Klikk på 'Godta alle cookies' for å samtykke til bruk av cookies. For å reservere deg mot ikke-nødvendige cookies, klikk på 'Kun nødvendige cookies'.

Besøk vår personvernerklæring for mer