Uprawnienia DK - transformacje oświadczeń

FoxIDs obsługuje konwersję uprawnienia DK w formacie XML do JSON, co ułatwia odczyt tokenów i pracę ze strukturą uprawnień. Uprawnienie DK jest używane w duńskich integracjach NemLog-in i Context Handler (po duńsku Fælleskommunal Adgangsstyring).

Obsługiwany standard uprawnień:

  • OIO Basic Privilege Profile, Version 1.2
  • FoxIDs obsługuje elementy PrivilegeGroup zdefiniowane w modelu 2 (zakres i delegacja) oraz modelu 3 (zakres, delegacja i ograniczenia).
  • FoxIDs obsługuje odczyt zakodowanego base64 ciągu uprawnienia zarówno ze standardowego oświadczenia https://data.gov.dk/model/core/eid/privilegesIntermediate, jak i z niestandardowego oświadczenia.

Konfiguracja uprawnień DK - transformacje oświadczeń

Uprawnienia DK można skonfigurować zarówno w metodzie uwierzytelniania SAML 2.0 i rejestracji aplikacji, jak i w metodzie uwierzytelniania OpenID Connect i rejestracji aplikacji.

  • Transformowane jest oświadczenie SAML 2.0 https://data.gov.dk/model/core/eid/privilegesIntermediate.
  • Transformowane jest oświadczenie OpenID Connect / JWT privileges_intermediate.

Skonfiguruj transformację oświadczeń uprawnień DK w metodzie uwierzytelniania SAML 2.0 w FoxIDs Control Client:

  1. Wybierz kartę Claim transform
  2. Kliknij Add claim transform i wybierz DK XML privilege to JSON
  3. Kliknij Update

Transformacja oświadczeń uprawnień w metodzie uwierzytelniania SAML 2.0 Context Handler

Model 2

Oświadczenie uprawnień DK jest przekształcane w listę oświadczeń, po jednym oświadczeniu dla każdej grupy. Element XML PrivilegeGroup jest przekształcany w obiekt JSON i serializowany jako łańcuch.

4 możliwe zakresy są tłumaczone na właściwości z krótką nazwą:

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

Element(y) Privilege są tłumaczone na właściwość p z listą wartości uprawnień.

Przykład uprawnienia DK po dekodowaniu base64:
(z dodatkowymi spacjami i podziałami wierszy wyłącznie do celów prezentacji)

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

Jest tłumaczone na dwa oświadczenia z wartościami JSON:
(z dodatkowymi spacjami i podziałami wierszy wyłącznie do celów prezentacji)

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

oraz

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

Model 3

Model 3 jest rozszerzeniem Modelu 2.

Element(y) Constraint są tłumaczone na właściwość c z ograniczeniami jako listą par klucz-wartość.

Przykład uprawnienia DK po dekodowaniu base64:
(z dodatkowymi spacjami i podziałami wierszy wyłącznie do celów prezentacji)

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

Jest tłumaczone na jedno oświadczenie z wartościami JSON:
(z dodatkowymi spacjami i podziałami wierszy wyłącznie do celów prezentacji)

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

Użycie oświadczenia uprawnień JSON w aplikacji

Rejestracja aplikacji otrzymuje oświadczenie uprawnień z uprawnieniem zserializowanym jako łańcuch JSON.
Poniższy przykład kodu C# pokazuje, jak zdeserializować oświadczenie JSON do obiektu w aplikacji ASP.NET Core z użyciem Newtonsoft.Json.

Utwórz klasę grupy uprawnień

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

oraz zdeserializuj oświadczenie np. w kontrolerze

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
}

Twoja prywatność

Używamy plików cookie, aby poprawić korzystanie z naszych stron internetowych. Kliknij przycisk „Akceptuj wszystkie pliki cookie”, aby wyrazić zgodę na ich użycie. Aby zrezygnować z nieistotnych plików cookie, kliknij „Tylko niezbędne pliki cookie”.

Odwiedź naszą politykę prywatności, aby dowiedzieć się więcej