DK privilege - claim transforms

FoxIDs stöder konvertering av DK XML privilege till JSON, vilket gör tokens läsbara och privilege strukturen enklare att arbeta med. DK privilege används i den danska NemLog-in och Context Handler (på danska kallad Fælleskommunal Adgangsstyring).

Stödd privilege standard:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs stöder PrivilegeGroup element definierade i modell 2 (scoping och delegation) och modell 3 (scoping, delegation och constraint).
  • FoxIDs stöder både att läsa den base64 kodade privilege strängen från standard claim https://data.gov.dk/model/core/eid/privilegesIntermediate och en custom definierad claim.

Konfigurera DK privilege - claim transforms

DK privilege kan konfigureras både i en SAML 2.0 autentiseringsmetod och applikationsregistrering och även i en OpenID Connect autentiseringsmetod och applikationsregistrering.

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

Konfigurera DK privilege claim transformer på SAML 2.0 autentiseringsmetod i FoxIDs Control Client:

  1. Välj fliken Claim transform
  2. Klicka Add claim transform och klicka DK XML privilege to JSON
  3. Klicka Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Modell 2

DK privilege claim transformeras till en lista med claims, en claim per grupp. XML PrivilegeGroup elementet transformeras till ett JSON objekt och serialiseras som en string.

De 4 möjliga scopes översätts till properties med ett kort namn:

  • 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(en) översätts till property p med privilege värden som en lista.

DK privilege base64 dekodat exempel: (med extra mellanslag och radbrytningar endast för 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>

Översätts till två claims med JSON värden: (med extra mellanslag och radbrytningar endast för visning)

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

och

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

Modell 3

Modell 3 är en utvidgning av modell 2.

Constraint element(en) översätts till property c med constraint(s) som en lista av key value par.

DK privilege base64 dekodat exempel: (med extra mellanslag och radbrytningar endast för 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>

Översätts till en claim med JSON värde: (med extra mellanslag och radbrytningar endast för visning)

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

Använd JSON privilege claim i en applikation

Applikationsregistreringen tar emot privilege claim med privilege serialiserat som en JSON string. Följande C# kod exempel visar hur JSON claim deserialiseras till ett objekt i en ASP.NET Core applikation med Newtonsoft.Json.

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

och deserialisera claim i t.ex. 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
}

Din integritet

Vi använder cookies för att göra din upplevelse av våra webbplatser bättre. Klicka på 'Acceptera alla cookies' för att godkänna användningen av cookies. För att avstå från icke-nödvändiga cookies, klicka på 'Endast nödvändiga cookies'.

Besök vår integritetspolicy för mer