Mapeamento de solicitação do OpenID Connect para solicitações de consentimento
O fluxo de autorização OAuth e OpenID Connect pode apresentar aos usuários um prompt de consentimento que solicita autorização.
- Compartilhar dados do perfil do usuário, como o endereço de e-mail. Essa solicitação pode, opcionalmente, ser complementada com informações que indicam o propósito para o qual os dados estão sendo compartilhados.
- Executar ações em nome do usuário, como iniciar o veículo do usuário e aquecer durante um dia frio ou iniciar um pagamento.
scope parâmetro. No entanto, às vezes, pode ser necessário modificar a solicitação. Por exemplo,- Verifique sempre o status da autorização do usuário no contrato de licença do usuário.
- Filtre valores de
scopeespecíficos com base na sessão de autenticação do usuário. - Inclua mais contexto que indique por que os dados estão sendo solicitados, se isso é codificado dentro do
scope(exemplo,email_for_billing) ou está disponível como parte de outro parâmetro de solicitação (comoauthorization_details).
Esse tipo de modificação pode ser obtido com o uso da regra customizada do parâmetro de solicitação de consentimento. Consulte r_attr_functions.html. A regra pode ser gravada usando uma linguagem simples de expressão de linha única ou como um documento baseado em YAML multilinhas mais avançado. Consulte Executor de regras multilinhas.
Objetos de entrada disponíveis
Como essa regra customizada é executada após a autenticação, mas antes da autorização, as informações que estão disponíveis não incluem todos os objetos de domínio possíveis. Eles são limitados aos tipos a seguir.
- Contexto de solicitação de HTTP
- Quando um usuário efetua o login no Verify, o contexto de solicitação HTTP recebida pode ser acessado na regra de mapeamento de solicitação. Todos os parâmetros de solicitação de OAuth, como
claimsescope, estão disponíveis nesterequestContext. A estrutura geral e o uso derequestContextsão descritos na seção “Contexto de solicitação do HTTP ” do documento “ r_attr_functions.html ”.Pela simplicidade de acesso, certos valores são pré-calculados norequestContext. O parâmetro daclaimssolicitação é representado em JSON, conforme o exemplo a seguir.{ "id_token": { "claim_name": { "essential": false, "value": "some_value" } }, "userinfo": { "claim_name": { "essential": false, "value": "some_value" } } }Esse JSON pode ser incômodo de acessar e por isso a chave que é usada no
requestContextestá no formatoclaims_claimType_claimName. OclaimTypeéuserinfoouidtoken. Observe o sublinhado ausente. Assim, com o exemplo anterior, o valorclaim_namepode ser obtido usandorequestContext.getValue('claims_idtoken_claim_name').Da mesma forma,
scopeé calculado e dividido por um espaço para construção de uma matriz de sequência. - Credencial de origem de identidade
Quando um usuário efetua login no Verify, os atributos de credencial de origem de identidade são incluídos na sessão de login e podem ser acessados na regra de mapeamento de solicitação.
O objeto de domínioidsuserestá disponível como um mapa com uma chave de sequência e um valor de matriz de sequência. Por exemplo,
Para mais informações, consulte r_attr_functions.html.{ "realmName": ["cloudIdentityRealm"], "displayName": ["Jessica J. Hill"], "phone": ["+12324321234"] }- Outras funções e operadores
Operadores e funções padrão estão disponíveis na regra de mapeamento. O cliente HTTP também está disponível para fazer solicitações de saída. Outras funções suportadas incluem hashing e registros de data e hora. Consulte as seções pertinentes do Manual de Normas de Qualidade ( r_attr_functions.html ).
Objeto de retorno
Espera-se que a regra customizada retorne uma matriz que contenha sequências ou objetos. As sequências são escopos, enquanto os objetos são escopos com informações adicionais para associá-los a um propósito de privacidade. Veja... /tasks/t_manage_purposes.html.
marketingQuando o usuário concorda com o primeiro objeto de solicitação, é criado um consentimento para o email atributo. Além disso, o escopo personal:email é concedido e a solicitação personal_email_allowed é incluída no token de ID.
[
{
"purpose": "marketing",
"attribute": "email",
"accessType": "read",
"value": "jhill@ibm.com",
"custom": {
"type": "personal"
},
"claims": {
"personal_email_allowed": true
},
"scope": "personal:email"
},
{
"purpose": "defaultEULA"
},
"profile",
"email"
] + requestContext.scopeA lista aqui substitui completamente os escopos solicitados e é usada para construir a página de consentimento. Consulte “Modificar o logon único para páginas do OpenID ”. Se a intenção for pedir mais consentimento ao usuário, deve-se anexar requestScope.scope como mostrado na inclusão e remoção de escopos de exemplo.
No exemplo, a matriz pode levar dois tipos - escopo OAuth como uma sequência e um objeto que tem mais contexto e resultados em um registro de autorização de consentimento de mais baixa granularidade. Essas propriedades são as propriedades que são permitidas no objeto.
| Propriedade | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
purpose |
Sequência | Sim | ../tasks/t_manage_purposes.html |
attribute |
Sequência | Depende de propósito | Gerenciando atributos |
accessType |
Sequência | Depende de propósito | O tipo de acesso é configurado com o propósito de privacidade de dados. Ele é padronizado para default se não fornecido. |
value |
Sequência | Não | Indica um pedido de consentimento mais específico. Por exemplo, consentimento para um e-mail específico. |
custom |
Objeto JSON. O tipo de valor da propriedade JSON é sequência. | Não | Qualquer informação de contexto adicional a ser incluída no consentimento. Esta propriedade pode ser exibida na página de consentimento na forma de macros de modelo. |
claim |
Objeto JSON. O tipo de valor da propriedade JSON é sequência. | Não | Se a solicitação for autorizada, as solicitações correspondentes serão incluídas no token de ID emitido. |
scope |
Sequência | Não | Se a solicitação for autorizada, esse valor será incluído nos escopos concedidos. |
required |
Booleano | Não | Se required estiver definido como verdadeiro, o usuário deverá responder afirmativamente. Esse consentimento não é necessário se a política de privacidade indicar que o consentimento nunca pode ser aceito. |
autoGrant |
Booleano | Não | Se autoGrant estiver definido como verdadeiro, o usuário não será solicitado a dar seu consentimento e o item de consentimento será automaticamente autorizado. |
global |
Booleano | Não | Se global estiver definido como verdadeiro, o consentimento registrado será válido para todas as aplicações. Esta propriedade é relevante para itens de consentimento, como documentos de Termos e Condições que o usuário aceita apenas uma vez. |
audience |
Sequência | Não | Se a solicitação for autorizada, esse valor será adicionado aos públicos-alvo concedidos, juntamente com a lista de públicos-alvo configurada no aplicativo e o ID de cliente padrão. |
- Exemplo para inclusão e remoção de escopos
- Neste exemplo, um novo objeto de solicitação de consentimento é incluído, e um escopo é removido.
[ { "purpose": "defaultEula", "scope": "eula:default" } ] + requestContext.scope.filter(x, x != "badscope")
Esta regra concede o escopo eula:default na autorização e associa-o ao consentimento da UELA. Ela também filtra badscope dos escopos solicitados.
A página de consentimento pode ser customizada para exibir detalhes da solicitação de consentimento que foram incluídos por meio dessa regra de mapeamento. Um exemplo está disponível em OpenID Mapeamento de solicitação de conexão com o ID de intenção do Open Banking.