DK privilege - transformacoes de claims

O FoxIDs suporta converter o privilege XML DK para JSON, tornando os tokens legiveis e a estrutura do privilege mais facil de utilizar. O privilege DK e utilizado no NemLog-in dinamarques e no Context Handler (em dinamarques chamado Faelleskommunal Adgangsstyring).

Standard de privilege suportado:

  • OIO Basic Privilege Profile, Version 1.2
  • O FoxIDs suporta elementos PrivilegeGroup definidos no model 2 (scoping e delegacao) e no model 3 (scoping, delegacao e constraint).
  • O FoxIDs suporta tanto ler a string privilege codificada em base64 a partir da claim standard https://data.gov.dk/model/core/eid/privilegesIntermediate como a partir de uma claim personalizada.

Configuring DK privilege - claim transforms

O privilege DK pode ser configurado tanto num metodo de autenticacao e registo de aplicacao SAML 2.0 como igualmente num metodo de autenticacao e registo de aplicacao OpenID Connect.

  • A claim SAML 2.0 https://data.gov.dk/model/core/eid/privilegesIntermediate e transformada.
  • A claim OpenID Connect / JWT privileges_intermediate e transformada.

Configure o transformador de claims do privilege DK no metodo de autenticacao SAML 2.0 no FoxIDs Control Client:

  1. Selecione o separador Claim transform
  2. Clique em Add claim transform e clique em DK XML privilege to JSON
  3. Clique em Update

Transformacao da claim privilege do metodo de autenticacao SAML 2.0 Context Handler

Model 2

A claim privilege DK e transformada numa lista de claims, uma claim por cada grupo. O elemento XML PrivilegeGroup e transformado num objeto JSON e serializado como string.

Os 4 scopes possiveis sao traduzidos em propriedades com um nome curto:

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

O elemento ou elementos Privilege sao traduzidos para a propriedade p com os valores de privilege como uma lista.

Exemplo de privilege DK descodificado de base64: (com espacos extra e quebras de linha apenas para efeitos de apresentacao)

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

E traduzido em duas claims com valores JSON: (com espacos extra e quebras de linha apenas para efeitos de apresentacao)

{
    "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

O Model 3 e uma extensao do Model 2.

O elemento ou elementos Constraint sao traduzidos para a propriedade c com os constraints como uma lista de pares chave-valor.

Exemplo de privilege DK descodificado de base64: (com espacos extra e quebras de linha apenas para efeitos de apresentacao)

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

E traduzido numa claim com valores JSON: (com espacos extra e quebras de linha apenas para efeitos de apresentacao)

{
    "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

O registo de aplicacao recebe a claim privilege com o privilege serializado como string JSON. O exemplo de codigo C# seguinte mostra como desserializar a claim JSON para um objeto numa aplicacao ASP.NET Core com Newtonsoft.Json.

Crie a 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 desserialize a claim, por exemplo, num controller

var privileges = User.Claims.Where(c => c.Type == "privilege")
    .Select(c => JsonConvert.DeserializeObject<DkPrivilegeGroup>(c.Value)).ToList();
foreach(var privilege in privileges)
{
    // TODO tratar o acesso com base no privilege
}
A sua privacidade

A sua privacidade

Usamos cookies para melhorar a sua experiência nos nossos sites. Clique no botão 'Aceitar todos os cookies' para concordar com a utilização de cookies. Para recusar cookies não essenciais, clique em 'Apenas cookies necessários'.

Visite a nossa página de Política de Privacidade para saber mais