DK privilege - claim transforms
FoxIDs støtter konvertering av DK XML privilege til JSON, slik at tokens blir lesbare og privilege strukturen er enklere å jobbe med. DK privilege brukes i den danske NemLog-in og Context Handler (på dansk kalt Fælleskommunal Adgangsstyring).
Støttet privilege standard:
- OIO Basic Privilege Profile, Version 1.2
- FoxIDs støtter
PrivilegeGroupelementer definert i modell 2 (scoping og delegasjon) og modell 3 (scoping, delegasjon og constraint). - FoxIDs støtter både å lese base64 kodet privilege streng fra standard claim
https://data.gov.dk/model/core/eid/privilegesIntermediateog et custom definert claim.
Konfigurere DK privilege - claim transforms
DK privilege kan konfigureres både i en SAML 2.0 autentiseringsmetode og applikasjonsregistrering og også i en OpenID Connect autentiseringsmetode og applikasjonsregistrering.
- SAML 2.0 claim
https://data.gov.dk/model/core/eid/privilegesIntermediatetransformeres. - OpenID Connect / JWT claim
privileges_intermediatetransformeres.
Konfigurer DK privilege claim transformer på SAML 2.0 autentiseringsmetode i FoxIDs Control Client:
- Velg fanen Claim transform
- Klikk Add claim transform og klikk DK XML privilege to JSON
- Klikk Update

Modell 2
DK privilege claim transformeres til en liste med claims, én claim for hver gruppe. XML PrivilegeGroup elementet transformeres til et JSON objekt og serialiseres som en string.
De 4 mulige scopes oversettes til properties med et kort navn:
Scope="urn:dk:gov:saml:cvrNumberIdentifier:<cvr_number>"blir"cvr": "<cvr_number>"Scope="urn:dk:gov:saml:productionUnitIdentifier:<p_number>"blir"p": "<p_number>"Scope="urn:dk:gov:saml:seNumberIdentifier:<se_number>"blir"se": "<se_number>"Scope="urn:dk:gov:saml:cprNumberIdentifier:<cpr_number>"blir"cpr": "<cpr_number>"
Privilege element(er) oversettes til property p med privilege verdi(er) som en liste.
DK privilege base64 dekodet eksempel: (med ekstra mellomrom og linjeskift kun for visning)
<?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>
Oversettes til to claims med JSON verdier: (med ekstra mellomrom og linjeskift kun for visning)
{
"cvr": "12345678",
"p": [ "urn:dk:some_domain:myPrivilege1A", "urn:dk:some_domain:myPrivilege1B" ]
}
og
{
"se": "27384223",
"p": [ "urn:dk:some_domain:myPrivilege1C", "urn:dk:some_domain:myPrivilege1D" ]
}
Modell 3
Modell 3 er en utvidelse av modell 2.
Constraint element(er) oversettes til property c med constraint(s) som en liste med key value par.
DK privilege base64 dekodet eksempel: (med ekstra mellomrom og linjeskift kun for visning)
<?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>
Oversettes til ett claim med JSON verdi: (med ekstra mellomrom og linjeskift kun for visning)
{
"cvr": "12345678",
"c": [ { "urn:dk:kombit:KLE": "25.*" }, { "urn:dk:kombit:sensitivity": "3" } ]
"p": [ "urn:dk:kombit:system_xyz:view_case" ]
}
Bruke JSON privilege claim i en applikasjon
Applikasjonsregistreringen mottar privilege claim med privilege serialisert som en JSON string.
Følgende C# kode eksempel viser hvordan JSON claim deserialiseres til et objekt i en ASP.NET Core applikasjon med Newtonsoft.Json.
Opprett privilege group class
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; }
}
og deserialiser claim i f.eks. en controller
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
}