DK privilege - claim transforms

FoxIDs unterstützt die Konvertierung von DK XML privilege in JSON, sodass Tokens lesbar sind und die privilege Struktur leichter zu verarbeiten ist. DK privilege wird im dänischen NemLog-in und Context Handler (auf Dänisch Fælleskommunal Adgangsstyring) verwendet.

Unterstützter privilege Standard:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs unterstützt PrivilegeGroup Elemente definiert in Modell 2 (Scoping und Delegation) und Modell 3 (Scoping, Delegation und Constraint).
  • FoxIDs unterstützt sowohl das Lesen des base64 kodierten privilege Strings aus dem Standard Claim https://data.gov.dk/model/core/eid/privilegesIntermediate als auch ein benutzerdefiniertes Claim.

DK privilege - claim transforms konfigurieren

DK privilege kann sowohl in einer SAML 2.0 Authentifizierungsmethode und Anwendungsregistrierung als auch in einer OpenID Connect Authentifizierungsmethode und Anwendungsregistrierung konfiguriert werden.

  • Das SAML 2.0 Claim https://data.gov.dk/model/core/eid/privilegesIntermediate wird transformiert.
  • Das OpenID Connect / JWT Claim privileges_intermediate wird transformiert.

Konfigurieren Sie den DK privilege Claim Transformer in der SAML 2.0 Authentifizierungsmethode im FoxIDs Control Client:

  1. Tab Claim transform auswählen
  2. Add claim transform klicken und DK XML privilege to JSON auswählen
  3. Update klicken

Context Handler SAML 2.0 authentication method privilege claim transformation

Modell 2

Das DK privilege Claim wird in eine Liste von Claims transformiert, ein Claim pro Gruppe. Das XML PrivilegeGroup Element wird in ein JSON Objekt transformiert und als String serialisiert.

Die 4 möglichen Scopes werden in Properties mit kurzen Namen übersetzt:

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

Die Privilege Elemente werden in die Property p mit den privilege Werten als Liste übersetzt.

DK privilege base64 decodiertes Beispiel: (mit zusätzlichen Leerzeichen und Zeilenumbrüchen nur zur Darstellung)

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

Wird in zwei Claims mit JSON Werten übersetzt: (mit zusätzlichen Leerzeichen und Zeilenumbrüchen nur zur Darstellung)

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

und

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

Modell 3

Modell 3 ist eine Erweiterung von Modell 2.

Die Constraint Elemente werden in die Property c mit den Constraints als Liste von Key Value Paaren übersetzt.

DK privilege base64 decodiertes Beispiel: (mit zusätzlichen Leerzeichen und Zeilenumbrüchen nur zur Darstellung)

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

Wird in ein Claim mit JSON Wert übersetzt: (mit zusätzlichen Leerzeichen und Zeilenumbrüchen nur zur Darstellung)

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

JSON privilege Claim in einer Anwendung verwenden

Die Anwendungsregistrierung erhält den privilege Claim mit der privilege Struktur als JSON String. Das folgende C# Code Beispiel zeigt, wie der JSON Claim in einer ASP.NET Core Anwendung mit Newtonsoft.Json zu einem Objekt deserialisiert wird.

Privilege Group Klasse erstellen

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

und den Claim z. B. in einem Controller deserialisieren

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
}