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
PrivilegeGroupdé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/privilegesIntermediateainsi 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/privilegesIntermediateest transformée. - La revendication OpenID Connect / JWT
privileges_intermediateest transformée.
Configurez le transformateur de revendication de privilège DK sur une méthode d’authentification SAML 2.0 dans FoxIDs Control Client :
- Sélectionnez l’onglet Claim transform
- Cliquez sur Add claim transform et cliquez sur DK XML privilege to JSON
- Cliquez sur Update

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
}