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:

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:

solicitacao-consentimento


Veja abaixo um exemplo de permissão concedida:

consentimento-aprovado


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.



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!



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.




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.


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

Última modificação: 28.06.2021