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
PrivilegeGroupzdefiniowane 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:
- Wybierz kartę Claim transform
- Kliknij Add claim transform i wybierz DK XML privilege to JSON
- Kliknij Update

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
}