CONSENTIMENTO
Overview
O Consentimento é um conceito fundamental no Open Banking, pois a partir da realização desse processo, um usuário poderá permitir o compartilhamento de suas informações entre diferentes instituições autorizadas pelo Banco Central e a movimentação de suas contas bancárias a partir de diferentes plataformas e não apenas pelo aplicativo ou site do banco, de forma segura, ágil e conveniente.
Para instituições que desejem pedir consentimento a usuários da Conta Stone, basta gerar um link de consentimento em nossa API e enviá-lo para avaliação do usuário dono da conta.
A partir da aprovação do usuário, a plataforma parceira terá acesso aos escopos solicitados.
Fluxo de Consentimento
A partir da abertura de conta realizada pelo usuário, uma plataforma poderá solicitar acesso ao compartilhamento de informações e iniciação de pagamentos na conta de um usuário. Para isso, deverá gerar um Link de Consentimento dentro do padrão estabelecido.
Após gerar e enviar o link ao usuário, poderão acontecer três situações, das quais o parceiro será notificado:
Usuário acessa o link e dá consentimento ao parceiro
Ao acessar o link, o usuário será direcionado para uma página da Stone em que irá escolher a quais contas de pagamento ele deseja conceder acesso ao parceiro. Ele também poderá verificar a quais escopos o parceiro passará a ter acesso após dar consentimento. Uma vez dado o consentimento, o usuário deverá ser direcionado de volta a uma página do parceiro.
Veja abaixo um exemplo da tela de pedido de consentimento que será disponibilizada ao cliente:
Veja abaixo um exemplo de permissão concedida:
Ao clicar no botão “Ok, entendi”, o usuário será redirecionado para uma página da aplicação parceira, cujo endereço foi definido no Cadastro da Aplicação.
Usuário acessa o link e não dá consentimento ao parceiro
Pode acontecer também o caso em que o usuário rejeita o consentimento solicitado. Nesse caso, ele será redirecionado a uma página do parceiro. Consequentemente, o parceiro não poderá acessar informações nem operar a conta do usuário.
Atenção!
Em ambos os casos citados acima, faremos um redirecionamento para a URI cadastrada no token. Acrescentaremos na URI os seguintes campos:
Chave | Valor |
---|---|
session_metadata | Com os mesmos os valores passados no token. |
consent_result | Indica o resultado do pedido de consentimento e pode ter os seguintes valores: - ignored : caso o usuário não dê consentimento;- approved : caso ele dê o consentimento e- already_granted : caso o consentimento desse recurso para essa aplicação já tenha sido dado anteriormente. |
resource_id | Identificador do resource ao qual o consentimento foi dado. Só é retornado quando o resultado do consent é approved . |
Quando o consent_result for approved
, será enviado também o webhook consent_requested com os dados do consentimento dado. Dessa forma, você poderá prover uma experiência fluida para ambos os casos, basta validar esses campos!
Usuário ignora o link
O link de consentimento tem validade de 2 horas após a sua geração. Caso o usuário não acesse o link dentro desse período, será necessário gerar um novo link e fazer um novo envio.
Gerando Link de Consentimento
Após cadastrar e autenticar a sua aplicação, você estará apto a pedir consentimento aos seus clientes que tenham realizado a abertura de uma conta Stone. Ressaltamos que toda interação com o usuário nesse processo será gerida por nossa plataforma.
Seguindo os parâmetros descritos abaixo, você deverá enviar o link ao usuário por meio da sua aplicação.
O link de consentimento deve ser enviado dentro da própria aplicação. Você pode, por exemplo, disponibilizar um botão em sua plataforma para que o usuário acesse o link. Esse link não deve ser enviado ao usuário por e-mail sob hipótese alguma.
Parâmetros do link de consentimento
O link de consentimento deverá conter três parâmetros:
- client_id: o ClientID recebido pelo desenvolvedor após o cadastro;
- type: no caso, será sempre o valor “consent”;
- jwt: será um token gerado localmente pelo desenvolvedor com a mesma chave privada e algoritmo que ele usa para se autenticar. Mais detalhes abaixo.
Com esses parâmetros, basta gerar um link no seguinte formato (por ambiente), substituindo CLIENT_ID e JWT por seus respectivos valores:
Sandbox | https://sandbox.conta.stone.com.br/consentimento?client_id=CLIENT_ID&jwt=JWT |
Produção | https://conta.stone.com.br/consentimento?client_id=CLIENT_ID&jwt=JWT |
Assim como fizemos o processo de gerar um Token de Acesso autenticado, também será gerado um JWT para pedido do Consentimento.
Especificações do JWT para pedir consentimento
Header
Observe que é preciso assinar o token JWT com a chave privada da aplicação e o algoritmo RS256, assim como é feito para o token de autenticação. Dessa forma, nesse token também é preciso incluir um header com as informações sobre o algoritmo de criptografia utilizado, entre outros metadados, como um ID da chave utilizada. Por exemplo:
{
"alg": "RS256",
"typ": "JWT"
}
Payload
O token deve conter as claims abaixo:
Campos Obrigatórios | Descrição | Tipo |
---|---|---|
type | Será sempre “consent” neste caso. | String |
client_id | Será o ClientID da Aplicação Parceira. | String |
redirect_uri | A URI para redirecionamento após a ação do usuário. Essa URI foi informada previamente no cadastro da Aplicação Parceira. Caso seja enviada uma URI diferente, retornará erro. | String |
session_metadata | Um objeto que contenha qualquer chave relevante para o parceiro identificar a sessão do usuário. Esse valor estará presente na URI de redirecionamento e não pode ser nulo ou um mapa vazio. | Objeto |
iss | Usar o client_id da Aplicação. | String |
iat | Momento em que o token foi gerado. É um timestamp UTC. Exemplo: “iat”: 1542235633. | Int |
aud | accounts-hubid@openbank.stone.com.br | String |
jti | Identificador único do token gerado. Normalmente se utiliza um UUID. | String |
nbf | É o momento em que o token passa a ser válido. Na maioria dos casos terá o mesmo valor que iat (issued at), pois queremos que ele esteja válido logo a partir do momento de geração. | Int |
exp | Momento de expiração do token em segundos desde o início da era UNIX (1970). É um timestamp UTC e não pode ser maior que 2 horas. Exemplo: “exp”: 1542235633 | Int |
Segue um exemplo de como ficariam as claims preenchidas:
{
"type": "consent",
"client_id": "MY CLIENT ID",
"iss": "MY CLIENT ID",
"redirect_uri": "https://mypreviouslyregistereduri.com",
"session_metadata": {
"user_session": "xxxxxxxxxxxxxxxxxxxxx",
},
"iat": 1542235633,
"nbf": 1542235633,
"exp": 1549069563,
"jti": "41e8aa9f-bb9c-4fd2-9953-2595dbbd5a83",
"aud": "accounts-hubid@openbank.stone.com.br"
}