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

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