Privilège DK - transformations de revendications

FoxIDs prend en charge la conversion du privilège DK XML en JSON, ce qui rend les tokens lisibles et la structure des privilèges plus facile à utiliser. Le privilège DK est utilisé dans NemLog-in et Context Handler (en danois appelé Fælleskommunal Adgangsstyring).

Standard de privilège pris en charge :

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs prend en charge les éléments PrivilegeGroup définis dans le modèle 2 (scoping et delegation) et le modèle 3 (scoping, delegation et constraint).
  • FoxIDs prend en charge la lecture de la chaîne de privilège encodée en base64 à partir de la revendication standard https://data.gov.dk/model/core/eid/privilegesIntermediate ainsi qu’une revendication définie sur mesure.

Configuration du privilège DK - transformations de revendications

Le privilège DK peut être configuré à la fois dans une méthode d’authentification SAML 2.0 et un enregistrement d’application, ainsi que dans une méthode d’authentification OpenID Connect et un enregistrement d’application.

  • La revendication SAML 2.0 https://data.gov.dk/model/core/eid/privilegesIntermediate est transformée.
  • La revendication OpenID Connect / JWT privileges_intermediate est transformée.

Configurez le transformateur de revendication de privilège DK sur une méthode d’authentification SAML 2.0 dans FoxIDs Control Client :

  1. Sélectionnez l’onglet Claim transform
  2. Cliquez sur Add claim transform et cliquez sur DK XML privilege to JSON
  3. Cliquez sur Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Modèle 2

La revendication de privilège DK est transformée en une liste de revendications, une revendication pour chaque groupe. L’élément XML PrivilegeGroup est transformé en un objet JSON et sérialisé en chaîne.

Les 4 scopes possibles sont traduits en propriétés avec un nom court :

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

Les éléments Privilege sont traduits en propriété p avec les valeurs de privilèges sous forme de liste.

Exemple de privilège DK décodé en base64 :
(avec des espaces et des retours à la ligne supplémentaires uniquement pour l’affichage)

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

Est traduit en deux revendications avec des valeurs JSON :
(avec des espaces et des retours à la ligne supplémentaires uniquement pour l’affichage)

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

et

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

Modèle 3

Le modèle 3 est une extension du modèle 2.

Les éléments Constraint sont traduits en propriété c avec les contraintes sous forme de liste de paires clé valeur.

Exemple de privilège DK décodé en base64 :
(avec des espaces et des retours à la ligne supplémentaires uniquement pour l’affichage)

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

Est traduit en une revendication avec des valeurs JSON :
(avec des espaces et des retours à la ligne supplémentaires uniquement pour l’affichage)

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

Utiliser la revendication de privilège JSON dans une application

L’application enregistrement d’application reçoit la revendication de privilège avec le privilège sérialisé sous forme de chaîne JSON.
L’exemple de code C# suivant montre comment désérialiser la revendication JSON en objet dans une application ASP.NET Core avec Newtonsoft.Json.

Créer la classe de groupe de privilèges

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

et désérialiser la revendication dans, par exemple, un contrôleur

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
}

Votre confidentialité

Nous utilisons des cookies pour améliorer votre expérience sur nos sites. Cliquez sur « Accepter tous les cookies » pour accepter l'utilisation des cookies. Pour refuser les cookies non essentiels, cliquez sur « Cookies nécessaires uniquement ».

Consultez notre politique de confidentialité pour en savoir plus