DK privilege - trasformazioni delle claims

FoxIDs supporta la conversione del privilege XML DK in JSON, rendendo i token leggibili e la struttura dei privilegi piu semplice da usare. Il privilege DK viene usato nel NemLog-in danese e nel Context Handler (in danese chiamato Faelleskommunal Adgangsstyring).

Standard privilege supportato:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs supporta gli elementi PrivilegeGroup definiti nel model 2 (scoping e delega) e nel model 3 (scoping, delega e vincolo).
  • FoxIDs supporta sia la lettura della stringa privilege codificata in base64 dalla claim standard https://data.gov.dk/model/core/eid/privilegesIntermediate sia da una claim definita personalizzata.

Configuring DK privilege - claim transforms

Il privilege DK puo essere configurato sia in un metodo di autenticazione e registrazione applicazione SAML 2.0 sia in un metodo di autenticazione e registrazione applicazione OpenID Connect.

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

Configura il trasformatore di claim privilege DK sul metodo di autenticazione SAML 2.0 in FoxIDs Control Client:

  1. Seleziona la scheda Claim transform
  2. Fai clic su Add claim transform e poi su DK XML privilege to JSON
  3. Fai clic su Update

Trasformazione claim privilege del metodo di autenticazione SAML 2.0 Context Handler

Model 2

La claim privilege DK viene trasformata in un elenco di claims, una claim per ogni gruppo. L'elemento XML PrivilegeGroup viene trasformato in un oggetto JSON e serializzato come stringa.

I 4 scope possibili vengono tradotti in proprieta con un nome breve:

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

L'elemento o gli elementi Privilege vengono tradotti nella proprieta p con i valori privilege come elenco.

Esempio privilege DK decodificato da base64: (con spazi extra e interruzioni di riga solo a scopo di visualizzazione)

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

Viene tradotto in due claims con valori JSON: (con spazi extra e interruzioni di riga solo a scopo di visualizzazione)

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

e

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

Model 3

Model 3 e un'estensione di Model 2.

L'elemento o gli elementi Constraint vengono tradotti nella proprieta c con i constraint come elenco di coppie chiave-valore.

Esempio privilege DK decodificato da base64: (con spazi extra e interruzioni di riga solo a scopo di visualizzazione)

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

Viene tradotto in una claim con valori JSON: (con spazi extra e interruzioni di riga solo a scopo di visualizzazione)

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

Using JSON privilege claim in an application

La registrazione applicazione riceve la claim privilege con il privilege serializzato come stringa JSON. L'esempio di codice C# seguente mostra come deserializzare la claim JSON in un oggetto in un'applicazione ASP.NET Core usando Newtonsoft.Json.

Crea la classe privilege group

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

e deserializza la claim, ad esempio, in un controller

var privileges = User.Claims.Where(c => c.Type == "privilege")
    .Select(c => JsonConvert.DeserializeObject<DkPrivilegeGroup>(c.Value)).ToList();
foreach(var privilege in privileges)
{
    // TODO gestire l'accesso in base al privilege
}
La tua privacy

La tua privacy

Usiamo i cookie per migliorare la tua esperienza sui nostri siti. Fai clic sul pulsante 'Accetta tutti i cookie' per acconsentire all'uso dei cookie. Per rifiutare i cookie non essenziali, fai clic su 'Solo cookie necessari'.

Visita la nostra pagina di Informativa sulla privacy per saperne di più