Transformações e tarefas de claims
Cada método de autenticação e registo de aplicação do FoxIDs trata claims e suporta transformações e tarefas de claims. Isto significa que múltiplos conjuntos de transformações e tarefas de claims podem ser executados para cada autenticação de utilizador. Primeiro, as transformações e tarefas de claims são executadas no método de autenticação e depois no registo de aplicação.
Subconjuntos adicionais de transformações e tarefas de claims podem ser executados se for criado um utilizador ou um utilizador externo.
Se criar um novo claim com uma transformação ou tarefa de claim de primeiro nível, o claim é local ao método de autenticação, exceto num método de autenticação Login.
Num método de autenticação, o claim é encaminhado se o tipo de claim for adicionado à lista Forward claims, ou se * (predefinição) estiver incluído nessa lista.
Se criar um novo claim com uma transformação ou tarefa de claim, o claim é local ao registo de aplicação.
Num registo de aplicação, deve adicionar o claim ou * à lista Issue claims. Em alternativa, para OpenID Connect, adicione o claim à lista Voluntary claims de um scope e peça o scope a partir da sua aplicação.
Veja por favor os exemplos de transformação de claims.
Ative
Log claim tracenas definições de log para ver os claims antes e depois da transformação nos logs.
As transformações de claims podem ser configuradas num método de autenticação login.

E tarefas de claims.

Da mesma forma, transformações e tarefas de claims podem ser configuradas como primeiro e segundo nível num método de autenticação OpenID Connect.

Os claims são, por predefinição, representados como claims JWT. Se o método de autenticação for SAML 2.0, os claims de primeiro nível são representados como claims SAML 2.0. Se o registo de aplicação for SAML 2.0, os claims são representados como claims SAML 2.0.
Uma transformação de claim e uma tarefa de claim executam uma de até sete ações diferentes, dependendo do tipo específico de transformação ou tarefa.
Ações de transformações e tarefas de claims:
Add claim- adicionar um novo claimAdd claim, if not match- executar a ação de adicionar se a condição não corresponderReplace claim- adicionar um novo claim e remover claims existentes se um ou mais existiremReplace claim, if not match- executar a ação de substituir se a condição não corresponderRemove claim- remover os claims se um ou mais existiremIf match- executar a ação se a condição corresponderIf not match- executar a ação se a condição não corresponder
As transformações e tarefas de claims são executadas por ordem, e as ações são por isso executadas por ordem. Isto significa que é possível criar uma variável local adicionando um claim e mais tarde, na sequência, tomar decisões com base nesse claim.
Um claim é local no conjunto de transformações e tarefas de claims se começar por _local:.
Quando transformações e tarefas de claims correm num fluxo de login, o FoxIDs adiciona automaticamente claims locais do pedido de login antes de executar as transformações. Estes claims _local: destinam-se a decisões internas dentro da sequência de transformação/tarefa e são removidos da saída.
Claims locais adicionados em AddLocalClaims:
_local:login_action- a ação do pedido de login, guardada como camelCase_local:user_id- o ID de utilizador do pedido de login (apenas se fornecido)_local:max_age- o max age do pedido de login (apenas se definido e superior a 0)_local:login_hint- o hint do pedido de login (apenas se fornecido)_local:acr- os valores ACR do pedido de login como lista delimitada por espaços (apenas se fornecida)
Com a ação Add claim, if not match é possível adicionar um claim (variável local) se outro claim ou um valor de claim não existir.
Tipos de transformação de claims que suportam todas as ações:
Match claim- executar a ação se o tipo de claim corresponderMatch claim and value- executar a ação se o tipo de claim e o valor do claim corresponderemRegex match- executar a ação se o tipo de claim corresponder e o valor do claim corresponder à expressão regular
Tipos de transformação de claims que suportam as ações Add claim, Replace claim e Add claim, if new claim does not exist:
Map- executar a ação se o tipo de claim corresponder, e depois mapear o valor do claim para um novo claimRegex map- executar a ação se o tipo de claim corresponder e o valor do claim corresponder ao grupo da expressão regular, e depois mapear o valor do grupo para um novo claim
Tipos de transformação de claims que suportam as ações Add claim e Replace claim:
Constant- executar sempre a ação (adicionar/substituir um claim com um valor constante)Concatenate- executar a ação se um ou mais tipos de claim corresponderem, e depois concatenar os valores dos claims para um novo claimExternal claims API- chamar uma API externa com os claims selecionados para adicionar/substituir claims com claims externosDK XML privilege to JSON- converter o DK privilege para JSON
Tipos de tarefa de claim que suportam as ações Add claim e Replace claim:
Query internal user- usar o valor do claim de lookup para encontrar um utilizador interno e depois adicionar ou substituir claims selecionados desse utilizador interno no claim set atual.Query external user- usar o valor do claim de lookup para encontrar um utilizador externo e depois adicionar ou substituir claims selecionados desse utilizador externo no claim set atual.Save claim on internal user- usar o valor do claim de lookup para encontrar um utilizador interno e depois adicionar ou substituir o claim selecionado nesse utilizador interno com valores do claim de valor de atualização selecionado no claim set atual.Save claim on external user- usar o valor do claim de lookup para encontrar um utilizador externo e depois adicionar ou substituir o claim selecionado nesse utilizador externo com valores do claim de valor de atualização selecionado no claim set atual.
Tipos de claim transform que suportam todas as ações:
Match claim- verifica se o tipo de claim selecionado existe. Para ações add e replace, o claim de saída é escrito com o novo valor quando o claim existe. As açõesif not matchsão executadas quando o claim não existe. Uma ação remove remove o claim de saída selecionado quando o claim existe.Match claim and value- verifica se o tipo de claim selecionado existe com o valor configurado. Para ações add e replace, o claim de saída é escrito com o novo valor quando o tipo e o valor correspondem. As açõesif not matchsão executadas quando o claim existe mas o valor não corresponde. Uma ação remove remove o claim de saída selecionado quando o tipo e o valor correspondem.Regex match- verifica se o tipo de claim selecionado existe e se o valor corresponde à expressão regular configurada. Para ações add e replace, o claim de saída é escrito com o novo valor quando a expressão regular corresponde. As açõesif not matchsão executadas quando o claim existe mas o valor não corresponde à expressão regular. Uma ação remove remove o claim de saída selecionado quando a expressão regular corresponde.
Tipos de claim transform que suportam as ações Add claim, Replace claim e Add claim, if new claim does not exist:
Map- copia o valor do claim selecionado para o claim de saída. ComAdd claim, if new claim does not exist, o valor só é escrito se o claim de saída ainda não existir.Regex map- extrai o grupo regex nomeadomapdo valor do claim selecionado e escreve o valor extraído no claim de saída. ComAdd claim, if new claim does not exist, o valor só é escrito se o claim de saída ainda não existir.
Tipos de claim transform que suportam as ações Add claim e Replace claim:
Constant- escreve sempre o valor constante configurado no claim de saída.Concatenate- constrói o claim de saída a partir de valores nos claims selecionados. A format string usa placeholders como{0},{1}e{2}para os valores selecionados por ordem.External claims API- envia claims selecionados para uma API externa. Claims devolvidos pela API são adicionados ou substituem claims de saída.DK XML privilege to JSON- converte um claim XML DK privilege para claims JSON, um claim para cada elemento XMLPrivilegeGroup.
Tipos de claim task que suportam as ações Add claim e Replace claim:
Query internal user- usa o valor do lookup claim para encontrar exatamente um utilizador interno e depois adiciona ou substitui claims selecionados desse utilizador no claim set atual.Query external user- usa o valor do lookup claim para encontrar exatamente um utilizador externo e depois adiciona ou substitui claims selecionados desse utilizador no claim set atual.Save claim on internal user- usa o valor do lookup claim para encontrar exatamente um utilizador interno e depois adiciona ou substitui o claim selecionado nesse utilizador com valores do update value claim selecionado no claim set atual.Save claim on external user- usa o valor do lookup claim para encontrar exatamente um utilizador externo e depois adiciona ou substitui o claim selecionado nesse utilizador com valores do update value claim selecionado no claim set atual.
As quatro tarefas de utilizador indicadas acima consideram um utilizador indisponível quando a conta está desativada diretamente ou através de uma membership ativa numa estrutura de acesso. O utilizador é excluído antes de o FoxIDs determinar se a pesquisa encontrou exatamente um utilizador, pelo que as tarefas query não adicionam claims e as tarefas save não efetuam alterações.
Quando uma das duas tarefas query user é executada num método de autenticação e ainda não existe uma conta local associada à resposta de autenticação atual, o primeiro utilizador correspondido de forma inequívoca na ordem de execução das claim transformations torna-se a conta local da resposta. Se a autenticação continuar através de passos Extended UI, o FoxIDs mantém este snapshot de acesso na sequência server-side e utiliza-o quando a resposta é concluída. Em seguida, o FoxIDs aplica a associação às sessões ativas e aos refresh token grants. Um utilizador interno ou um utilizador externo associado que seja autenticado diretamente pelo método de autenticação tem prioridade, e uma associação existente nunca é substituída por uma query posterior.
Se uma claim transformation iniciar interativamente outro método de autenticação, a autenticação redirecionada é executada como um novo login flow. Uma associação de conta local selecionada por uma query anterior não é transportada através desse redirecionamento.
As tarefas query user num registo de aplicação podem adicionar claims, mas não criam nem alteram a associação de conta local do login.
As tarefas query user disponibilizam o ID estável do utilizador selecionado como um claim local:
| Claim task | Claim local | Valor |
|---|---|---|
Query internal user |
_local:internal_user_id |
O ID técnico e estável de utilizador FoxIDs do utilizador interno selecionado. |
Query external user |
_local:external_user_id |
O ID técnico e estável de utilizador externo FoxIDs do utilizador externo selecionado. |
Selecione explicitamente o claim local nos outgoing claims da tarefa, ou selecione *, para o disponibilizar às transformações seguintes na mesma sequência. Os claims locais são removidos do resultado final, exceto se o respetivo valor for mapeado para um claim não local.
Os tipos de claim que começam por _local: e _internal: são reservados pelo FoxIDs. Os claims em qualquer destes namespaces recebidos de um método de autenticação, de uma entrada de protocolo ou de uma claims API externa são removidos antes de poderem ser considerados fidedignos. Os claims reservados armazenados num utilizador existente são ignorados, e as claim tasks não podem guardá-los num utilizador interno ou externo.
- Os claims
_local:existem apenas no conjunto atual de claim transformations e claim tasks. Qualquer transformação normal pode criar um claim_local:*, as transformações seguintes no mesmo conjunto podem utilizá-lo e o FoxIDs remove-o sempre quando o conjunto termina. - Os claims
_internal:podem transportar valores entre conjuntos de claim transformations e claim tasks dentro do FoxIDs. Qualquer transformação normal pode criar um claim_internal:*e um conjunto posterior pode lê-lo. O FoxIDs remove os claims internos antes de os claims saírem do FoxIDs num token, numa assertion ou noutra resposta de protocolo.
Por exemplo, uma transformação num método de autenticação pode criar _internal:account_category. Um conjunto de transformações posterior no método de autenticação ou no registo de aplicação pode utilizar esse claim para tomar uma decisão sem o expor à aplicação.
Por exemplo, depois de procurar um utilizador interno por e-mail ou nome de utilizador, uma tarefa Match claim and return error pode verificar _local:internal_user_id e interromper o flow se não tiver sido encontrado um único utilizador interno. Uma transformação Match claim pode, em alternativa, adicionar outro claim apenas quando a pesquisa for bem-sucedida. O ID estável do utilizador permanece local à sequência de transformações, continuando a fornecer uma base fiável para decisões posteriores.
Para Query internal user e Save claim on internal user, o lookup claim é lido a partir do claim set atual. O valor Lookup claim on internal user define como o utilizador interno é correspondido:
subcorresponde ao ID de utilizador do utilizador interno.email,phone_numberepreferred_usernamepesquisam primeiro nos identifiers do utilizador interno com correspondência sem distinguir maiúsculas de minúsculas quando a capitalização é relevante. Se nenhum utilizador for encontrado por identifier, a pesquisa continua nos claims guardados do utilizador.- A pesquisa continua depois nos claims guardados do utilizador interno para o mesmo tipo de claim e um valor correspondente sem distinguir maiúsculas de minúsculas. Isto aplica-se a todos os tipos de lookup claim se nenhum utilizador tiver sido encontrado primeiro.
Se a pesquisa encontrar exatamente um utilizador interno, Query internal user adiciona ou substitui claims selecionados desse utilizador no claim set atual. Save claim on internal user adiciona ou substitui o claim selecionado nesse utilizador com valores do update value claim selecionado. Se nenhum utilizador for encontrado, ou se for encontrado mais do que um utilizador através de claims, não são adicionados nem guardados claims de utilizador interno.
Para Query external user e Save claim on external user, o lookup claim é lido a partir do claim set atual e correspondido contra a fonte de utilizadores externos selecionada. Use link_claim como lookup claim no utilizador externo para corresponder ao valor de link claim desse utilizador.
Tipos de claim task que suportam as ações If match e If not match:
Match claim and return error- devolve um erro se o tipo de claim corresponder ou não corresponder.Match claim and value and return error- devolve um erro se o tipo de claim e o valor corresponderem ou não corresponderem.Regex match and return error- devolve um erro se o tipo de claim e o valor corresponderem ou não corresponderem à expressão regular.Match claim and log event- escreve o valor do claim selecionado no log se o tipo de claim corresponder.Match claim and start authentication- inicia um novo login flow ao iniciar um método de autenticação se o tipo de claim corresponder ou não corresponder.Match claim and value and start authentication- inicia um novo login flow ao iniciar um método de autenticação se o tipo de claim e o valor corresponderem ou não corresponderem.Regex match and start authentication- inicia um novo login flow ao iniciar um método de autenticação se o tipo de claim e o valor corresponderem ou não corresponderem à expressão regular.
Para return error tasks, configure o erro de protocolo devolvido ao cliente ou requester. Configurações OpenID Connect e OAuth 2.0 devolvem um error e uma error description opcional. Configurações SAML 2.0 devolvem um SAML status code e uma message.
As start authentication claim tasks podem ser usadas para step-up quando o utilizador inicia sessão com um fator e é necessário outro fator, ou quando são necessárias informações adicionais (claims).
Claims externos - API
Pode chamar a sua própria API a partir do FoxIDs com uma transformação de claims. A API é chamada com claims e os claims devolvidos pela API podem ser adicionados com uma ação de add ou replace.
A API só é chamada se pelo menos um claim selecionado existir. Pode usar * para selecionar e enviar todos os claims para a sua API.
Cenários de utilização:
- Chamar a sua API a partir de um método de autenticação sempre que um utilizador se autentica no FoxIDs ou com um identity provider externo. Pode então encontrar o utilizador na sua base de dados e devolver um user ID e talvez um customer ID ou basicamente qualquer coisa relevante. Por exemplo, também pode criar o utilizador na sua base de dados.
- Chamar a sua API a partir de um registo de aplicação com o user ID (
sub) e consultar os roles do utilizador na sua base de dados. A sua API devolveria então uma lista vazia ou uma lista de role claims ou talvez uma estrutura de permissões mais complexa.
Implementar API
Tem de implementar uma API simples que o FoxIDs chama quando a transformação de claims é executada. Veja por favor o código de exemplo.
A API tem um URL base e a funcionalidade está dividida em pastas. Atualmente, apenas a pasta claims (funcionalidade) para pedir uma lista de claims é suportada.
Se o URL base da API for https://somewhere.org/myclaimsstore, o URL para a pasta claims será https://somewhere.org/myclaimsstore/claims.
O FoxIDs Cloud chama a sua API a partir do endereço IP
57.128.60.142. O endereço IP de saída pode mudar e mais podem ser adicionados ao longo do tempo.
Pedido
Protegido com HTTP Basic auth: username external_claims, password = secret configurado.
A API é chamada com HTTP POST e um corpo JSON.
Este é um corpo JSON de pedido com dois claims de entrada:
{
"claims": [
{ "type": "sub", "value": "1b1ac05e-5937-4939-a49c-0e84a89662df" },
{ "type": "email", "value": "some@test.org" }
]
}
Resposta - Sucesso
Em caso de sucesso, a API deve devolver código HTTP 200 e uma lista de claims (a lista pode estar vazia).
O FoxIDs ignora os claims cujo type ou value está em falta, é null, está vazio ou contém apenas espaços em branco. Com o rastreio de mensagens de registo ativado, o rastreio da resposta inclui os claims recebidos antes de serem filtrados. As mensagens de rastreio longas são truncadas.
Por exemplo, o sub do utilizador (user ID / username), customer ID e roles:
{
"claims": [
{ "type": "sub", "value": "somewhere/external-some@test.org" },
{ "type": "customer_id", "value": "1234abcd" },
{ "type": "role", "value": "admin_access" },
{ "type": "role", "value": "read_access" },
{ "type": "role", "value": "write_access" }
]
}
Resposta - Erro
A API tem de devolver código HTTP 401 (Unauthorized) e um error (obrigatório) se o Basic auth for rejeitado. Opcionalmente, adicione uma descrição do erro em ErrorMessage.
{
"error": "invalid_api_id_secret",
"ErrorMessage": "Invalid API ID or secret"
}
Se ocorrerem outros erros, a API deve devolver código HTTP 500 ou outro código de erro apropriado.
Recomenda-se adicionar uma mensagem de erro técnica em ErrorMessage para diagnóstico (apenas é registada no log; nunca é mostrada ao utilizador final).
As mensagens de erro devolvidas pela API em
ErrorMessageNÃO são mostradas ao utilizador; são apenas registadas em log.
Exemplo de API
O sample ExternalClaimsApiSample mostra como implementar a API em ASP.NET Core.
Pode usar esta Postman collection para chamar e testar a sua API com Postman.
Configurar
Configure o FoxIDs para chamar a sua API a partir de uma transformação de claims no FoxIDs Control Client.
- Navegue até à secção Claim Transform
- Clique em Add claim transform
- Clique em External claims API
- Selecione Add claim ou Replace claim
- Adicione os claims selecionados, por exemplo
sub, em Select claims - Adicione o URL base da API sem a pasta
claimsem API URL - Adicione o API secret

- Clique em Update
Exemplos de transformação de claims
Dividir o claim name nos dois claims given_name e family_name
A transformação divide o valor do claim name no primeiro espaço encontrado e adiciona, respetivamente, os claims given_name e family_name, se ainda não existirem.
Se existir mais do que um espaço no valor do claim name, novos claims given_name e family_name não serão adicionados porque já existirão.
Use duas transformações de claims Regex map.

- Encontrar o valor do claim
family_namecom a regex^\S+\s(?<map>\S+)$ - Encontrar o valor do claim
given_namecom a regex^(?<map>\S+)\s\S+$
Remover o nome do método de autenticação adicionado por predefinição de sub
O nome do método de autenticação é adicionado por predefinição ao valor do claim sub como prefixo separado por um pipe, por exemplo some-auth-method|my-external-user-id.
Pode usar replace claim no claim sub para remover o valor prefixado adicionado por predefinição.
A transformação dividirá o valor do claim sub e substituirá o claim por um novo sub que contém apenas o ID original.
Use uma transformação de claim Regex map e selecione a ação Replace claim.

Encontrar o ID sem o nome do método de autenticação adicionado por predefinição com a regex ^([^|]+)\|(?<map>.+)$
Pode fazer o mesmo num método de autenticação SAML 2.0 usando o claim
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier(que contém o valorNameIDda SAML 2.0 Authn Response) em vez do claimsub.
Comparar email com _local:mfa:email e adicionar amr
O exemplo compara o email do utilizador atualmente autenticado com o _local:mfa:email do utilizador MFA já autenticado.
Se os dois valores de email forem iguais e corresponderem a uma expressão regular, o claim amr é adicionado com o nome do método de autenticação como valor (o nome do método de autenticação é configurado como valor amr).
Use uma transformação de claim Concatenate seguida de uma transformação de claim Regex match.

Concatenate: Novo claim_local:compare_emails, açãoReplace claim, concatenar claimsemaile_local:mfa:email, formato de concatenação{0}|{1}.Regex match: Novo claimamr, açãoReplace claim, selecionar claim_local:compare_emails, regex value match^([^|]+)\|\1$, novo valor definido para o nome do método de autenticação (por exemplo9fk5z3vg).