Privilegio DK - transformaciones de claims

FoxIDs admite convertir el privilegio DK XML a JSON, haciendo que los tokens sean legibles y que la estructura del privilegio sea más fácil de usar. El privilegio DK se utiliza en NemLog-in y Context Handler (en danés llamado Fælleskommunal Adgangsstyring).

Estándar de privilegios compatible:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs admite elementos PrivilegeGroup definidos en el modelo 2 (scoping y delegation) y el modelo 3 (scoping, delegation y constraint).
  • FoxIDs admite tanto leer la cadena de privilegio codificada en base64 de la claim estándar https://data.gov.dk/model/core/eid/privilegesIntermediate como una claim definida de forma personalizada.

Configurar privilegio DK - transformaciones de claims

El privilegio DK puede configurarse tanto en un método de autenticación SAML 2.0 y registro de aplicación como en un método de autenticación OpenID Connect y registro de aplicación.

  • La claim SAML 2.0 https://data.gov.dk/model/core/eid/privilegesIntermediate se transforma.
  • La claim OpenID Connect / JWT privileges_intermediate se transforma.

Configure el transformador de claims de privilegio DK en el método de autenticación SAML 2.0 en FoxIDs Control Client:

  1. Seleccione la pestaña Claim transform
  2. Haga clic en Add claim transform y haga clic en DK XML privilege to JSON
  3. Haga clic en Update

Context Handler SAML 2.0 authentication method privilege claim transformation

Modelo 2

La claim de privilegio DK se transforma en una lista de claims, una claim por cada grupo. El elemento XML PrivilegeGroup se transforma en un objeto JSON y se serializa como cadena.

Los 4 scopes posibles se traducen en propiedades con un nombre corto:

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

Los elementos Privilege se traducen a la propiedad p con los valores de privilegio como una lista.

Ejemplo de privilegio DK decodificado en base64:
(con espacios y saltos de línea adicionales solo para fines de visualización)

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

Se traduce en dos claims con valores JSON:
(con espacios y saltos de línea adicionales solo para fines de visualización)

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

y

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

Modelo 3

El modelo 3 es una extensión del modelo 2.

Los elementos Constraint se traducen a la propiedad c con las restricciones como una lista de pares clave valor.

Ejemplo de privilegio DK decodificado en base64:
(con espacios y saltos de línea adicionales solo para fines de visualización)

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

Se traduce en una claim con valores JSON:
(con espacios y saltos de línea adicionales solo para fines de visualización)

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

Usar la claim de privilegio JSON en una aplicación

La aplicación de registro de aplicación recibe la claim de privilegio con el privilegio serializado como una cadena JSON.
El siguiente ejemplo de código C# muestra cómo deserializar la claim JSON a un objeto en una aplicación ASP.NET Core usando Newtonsoft.Json.

Crear la clase de grupo de privilegios

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

y deserializar la claim, por ejemplo, en un controlador

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
}

Tu privacidad

Usamos cookies para mejorar tu experiencia en nuestros sitios web. Haz clic en «Aceptar todas las cookies» para aceptar su uso. Para rechazar cookies no esenciales, haz clic en «Solo cookies necesarias».

Visita nuestra política de privacidad para saber más