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
}

Ihre Privatsphäre

Wir verwenden Cookies, um Ihre Erfahrung auf unseren Websites zu verbessern. Klicken Sie auf 'Alle Cookies akzeptieren', um der Verwendung von Cookies zuzustimmen. Um nicht notwendige Cookies abzulehnen, klicken Sie auf 'Nur notwendige Cookies'.

Weitere Informationen finden Sie in unserer Datenschutzerklärung