ID de intenção do Open Banking de mapeamento de solicitação do OpenID Connect
Quando um aplicativo de terceiros deseja iniciar uma transação que requer autorização do usuário (por exemplo, transferência de pagamento), ele usa uma API que é fornecida pela instituição financeira ou banco para registrar os detalhes da transação. Por exemplo, ele registra a quantia da transação e o tipo de moeda. Esse processo, às vezes, é chamado de "alojar uma intenção". A API responde com um identificador de intenção, também chamado de ID de consentimento em especificações de Open Banking do Reino Unido. O aplicativo inicia um fluxo de código de autorização OAuth para obter a autorização do usuário que é registrada como um consentimento do usuário.
- Extraia o ID de intenção da solicitação.
- Obtenha as informações de contexto de intenção, geralmente chamando a API do banco.
- Escolha como representar a autorização no
id_tokencomo um valor de solicitação ou escopo.
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 de solicitaçãoclaimsgeralmente é representado como um JSON como 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 Execução ( r_attr_functions.html ).
Objeto de retorno
Como esta regra customizada deve ser interpretada para construir um contexto de autorização, o valor de retorno desta regra deve ser um objeto JSON que deve incluir as propriedades obrigatórias a seguir:
| Propriedade | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
type |
Sequência | Sim | O tipo indica o tipo de transação que está sendo realizada. Por exemplo, uma iniciação de pagamento. Isso é representado no Verify como um Propósito de privacidade de dados. O ID do propósito que é fornecido ou gerado pelo sistema é o valor de type. |
intentID |
Sequência | Sim | O ID de intenção deve ser fornecido. Ele geralmente é calculado por meio de requestContext. |
claims |
Objeto JSON. O valor da propriedade JSON pode ser de qualquer tipo. | Não | Geralmente, na autorização do usuário, o token de ID gerado contém alguma indicação de que o usuário autorizou a transação que é identificada pelo ID de intenção. O claims é um objeto ou mapa JSON, no qual a chave é o nome da solicitação e o valor pode ser qualquer estrutura compatível com JSON, como sequência, número inteiro, outro objeto, matriz ou outras estruturas. Várias solicitações também podem ser especificadas. |
scope |
Sequência | Não | Se a solicitação for autorizada, esse valor será incluído nos escopos concedidos. |
Quaisquer atributos adicionais, como a quantia ou a moeda são tratados como atributos customizados. Eles podem ser mostrados na página de consentimento do usuário usando as macros de modelo correspondentes que são descritas posteriormente.
Exemplo do UK Open Banking
- Um provedor de serviços de iniciação de pagamento (PISP) que reside no provedor de terceiros e inicia a transação de pagamento.
- Um servidor de autorização do provedor de serviços de informações de conta (ASPSP). Nesse cenário, o ASPSP é Verify.
- Um servidor de recursos ASPSP que hospeda a API de iniciação de pagamento.
- Extraia o ID de intenção.
- Recupere as informações sobre esta transação por meio do servidor de recursos.
- Extraindo o ID de intenção da solicitação
- Este exemplo segue o padrão do UK Open Banking de enviar o ID de intenção por meio do
claims. A solicitação de autorização recebida contém oopenbanking_intent_idnas solicitações.
As solicitações são extraídas e disponibilizadas no contexto de solicitação. O código que é usado para recuperar o valor é{ "id_token": { "openbanking_intent_id": { "value": "b508f9df-799b-4120-a13e-5d09f2931fa6", "essential": true } } }requestContext.getValue('claims_idtoken_openbanking_intent_id') - Recuperar informações da transação
- As informações da transação são armazenadas no servidor de recursos do provedor de serviços de pagamento de manutenção de conta (ASPSP), que é onde o ID de consentimento ou intenção foi gerado. Use o cliente HTTP para fazer uma solicitação ao servidor de recursos. A solicitação a seguir é um exemplo.
hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID - Mapear transação para um propósito de privacidade e solicitações
- Para capturar a iniciação de pagamento do Open Banking e os consentimentos de acesso à conta, devem ser criados propósitos de privacidade relevantes. Por exemplo, um propósito de privacidade
payment_initiationdeve ser criado para quaisquer solicitações de consentimento de iniciação de pagamento. Esse propósito é então mapeado para a propriedadetypeno objeto de retorno.Além disso, para o UK Open Banking, uma solicitaçãoopenbanking_intent_idprecisa ser criada. As demais informações sobre a transação também podem ser incluídas no objeto de retorno.{ "type": "payment_initiation", "intentID": "b508f9df-799b-4120-a13e-5d09f2931fa6", "currency": "USD", "amount": "1200.35", "merchant": "Merchant A", "claims": { "openbanking_intent_id": "b508f9df-799b-4120-a13e-5d09f2931fa6" } } - Regra de mapeamento de amostra
statements: - if: match: "!has(requestContext.claims_idtoken_openbanking_intent_id)" return: null - context: "intentID := requestContext.getValue('claims_idtoken_openbanking_intent_id')" - context: 'intentContext := hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID, { "Authorization": "apikey supersecretapikey" })' - return: >- { "type": context.intentContext.type, "intentID": context.intentID, "currency": context.intentContext.instructedAmount.currency, "amount": context.intentContext.instructedAmount.amount, "merchant": context.intentContext.creditorName, "claims": { "openbanking_intent_id": context.intentID } }
Customizando a página de consentimento
Como a experiência do usuário no consentimento para autorização de transações difere do consentimento de escopo padrão do OAuth e do Open ID Connect, é possível criar uma seção personalizada no modelo da página de consentimento; consulte “Modificar o logon único para páginas OpenID ”.
[RPT purpose_payment_initiation]
<input type="hidden" name="@PRIVACY_SCOPE_PNAME_REPEAT@"
value="@PRIVACY_SCOPE_REPEAT@" privacy-readonly="true" />
<input type="hidden" id="@PRIVACY_SCOPE_PNAME_REPEAT@_state" name="@PRIVACY_SCOPE_PSTATE_REPEAT@"
value="CONSENT_ALLOW" privacy-required="@PRIVACY_SCOPE_REQUIRED_REPEAT@" />
<div id="@PRIVACY_SCOPE_PNAME_REPEAT@_widget" class="bx--form-item" style="width:350px;"></div>
<div class="bx--grid" style="padding-left:0">
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Amount</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_currency@ @PRIVACY_SCOPE_CUSTOM_amount@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Merchant</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_merchant@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Reference</div>
<div class="bx--col">@PRIVACY_SCOPE_ATTRVALUE_REPEAT@</div>
</div>
</div>
[ERPT purpose_payment_initiation]Observe os aspectos a seguir.- Uma nova seção repetível que é usada para um propósito específico de privacidade de dados. O nome que é usado segue o formato
purpose_{purposeID}. OpurposeIDé o ID de propósito de privacidade de dados. Esse ID de propósito pode ser gerado pelo sistema ou fornecido pelo usuário. - Dois campos de Formulário HTML são essenciais e são denominados
@PRIVACY_SCOPE_PNAME_REPEAT@e@PRIVACY_SCOPE_PNAME_REPEAT@_state. O primeiro campo contém o identificador Verify para o registro de consentimento. O segundo campo contém o estado de consentimento. - Atributos customizados que são retornados pela regra avançada podem ser referenciados usando a macro
@PRIVACY_SCOPE_CUSTOM_{attributeName}@. Por exemplo,@PRIVACY_SCOPE_CUSTOM_currency@é substituído pelo valor da moeda que é retornado na regra avançada de intenção.