OFB-FAPI-1-ID3 | March 2023 | |
Security | Standards Track | [Page] |
The normative version in English¶
A Estrutura Inicial do Open Finance Brasil (EIOFB) é responsável por criar padrões e especificações necessárias para atender aos requisitos e obrigações da Legislação do Open Finance do Brasil, conforme originalmente delineado pelo Banco Central do Brasil. É possível que alguns dos elementos deste documento estejam sujeitos a direitos autorais ou patenteados. O EIOFB não se responsabiliza pela identificação de qualquer ou todos esses direitos.¶
O Financial-grade API 1.0 do Open Finance Brasil consiste nas seguintes partes:¶
Estas partes são destinados a serem usados com RFC6749, RFC6750, RFC7636, OIDC, FAPI-1-Baseline e FAPI-1-Advanced¶
A Financial-grade API do Open Finance Brasil é um perfil OAuth altamente seguro que visa fornecer diretrizes de implementação específicas para segurança e interoperabilidade que podem ser aplicadas a APIs na área de Open Finance do Brasil que requerem um nível de privacidade superior ao fornecido pelo padrão Financial-grade API Security Profile 1.0 - Part 2: Advanced. Entre outras melhorias, esta especificação aborda considerações de privacidade identificadas em FAPI-1-Advanced que são relevantes nas especificações do Open Finance Brasil, mas não foram, até agora, exigidas por outras jurisdições.¶
Embora seja possível codificar um provedor de OpenID e parte de confiança a partir dos primeiros princípios usando esta especificação, o público principal para esta especificação são as partes que já possuem uma implementação certificada do Financial-grade API Security Profile 1.0 - Part 2: Advanced e deseja obter a certificação para o programa Brasil Open Finance.¶
As palavras-chave "deve" (shall), "não deve" (shall not), "deveria" (should), "não deveria" (should not) e "pode" (may) presentes nesse documento devem ser interpretadas conforme as diretrizes descritas em ISO Directive Part 2 observando seguinte equivalência:¶
Estas palavras-chave não são usadas como termos de dicionário, de modo que qualquer ocorrência deles deve ser interpretada como palavras-chave e não devem ser interpretados com seus significados de linguagem natural.¶
Este documento especifica o método para os aplicativos¶
Este documento é aplicável a todos os participantes do Open Finance no Brasil.¶
Os seguintes documentos referenciados são indispensáveis para a adoção das especificações deste documento. Para referências datadas, apenas a edição citada se aplica. Para referências não datadas, deve-se aplicar a última edição do documento referenciado (incluindo quaisquer emendas).¶
ISODIR2 - ISO/IEC Directives Part 2¶
RFC6749 - The OAuth 2.0 Authorization Framework¶
RFC6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage¶
RFC7636 - Proof Key for Code Exchange by OAuth Public Clients¶
RFC6819 - OAuth 2.0 Threat Model and Security Considerations¶
RFC7515 - JSON Web Signature (JWS)¶
RFC7519 - JSON Web Token (JWT)¶
RFC7591 - OAuth 2.0 Dynamic Client Registration Protocol¶
RFC7592 - OAuth 2.0 Dynamic Client Registration Management Protocol¶
BCP195 - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)¶
OIDC - OpenID Connect Core 1.0 incorporating errata set 1¶
FAPI-CIBA - Financial-grade API: Client Initiated Backchannel Authentication Profile¶
OIDD - OpenID Connect Discovery 1.0 incorporating errata set 1¶
OIDR - OpenID Connect Registration 1.0 incorporating errata set 1¶
RFC8705 - OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens¶
JARM - Financial-grade API: JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)¶
PAR - OAuth 2.0 Pushed Authorization Requests¶
JAR - OAuth 2.0 JWT Secured Authorization Request¶
FAPI-1-Baseline - Financial-grade API Security Profile 1.0 - Part 1: Baseline¶
FAPI-1-Advanced - Financial-grade API Security Profile 1.0 - Part 2: Advanced¶
FAPI-2-Baseline - Financial-grade API Security Profile 2.0 - Part 1: Baseline¶
LIWP - OIDF FAPI WG Lodging Intent Working Paper¶
LIWP - OIDF FAPI WG Lodging Intent Working Paper¶
OFB-FAPI-DCR - Open Finance Brasil Financial-grade API Dynamic Client Registration Profile 1.0¶
Para efeitos deste documento, os termos definidos em RFC6749, RFC6750, RFC7636, OpenID Connect Core e ISO29100 se aplicam.¶
O perfil de segurança do Open Finance Brasil especifica requisitos adicionais de segurança e de identificação para o acesso a API's com recursos críticos protegidas pelo OAuth 2.0 Authorization Framework, que consiste em RFC6749, RFC6750, RFC7636, FAPI-1-Baseline, FAPI-1-Advanced e outras especificações.¶
Este perfil descreve as capacidades e os recursos de segurança que devem ser oferecidos por servidores e clientes que são necessários para o Programa do Open Finance Brasil, definindo as medidas para mitigar ou endereçar:¶
claim
de identificação do usuário como parte do fluxo de autorização.¶
O Open Finance Brasil tem um requisito para endereçar considerações de privacidade que foram identificadas, mas não abordadas na especificação final FAPI-1-Advanced, sem impor requisitos adicionais aos Servidores de Autorização que estão sendo propostos em FAPI-2-Baseline.¶
Os participantes desse ecossistema precisam que os clientes de API solicitem a um provedor openid a confirmação dos valores das claims
de identificação do usuário como parte de uma solicitação de autorização usando o mecanismo definido na cláusula 5.5.1 de OIDC.¶
O uso do parâmetro claims
para solicitar a validação de valores de identificação explícitos requer que os clientes de API protejam com criptografia o Request Object para evitar vazamento de informações. Este risco é identificado na cláusula 7.4.1 do FAPI-1-Baseline.¶
Além disso, este perfil descreve o escopo específico, valores de acr
e requisitos de gerenciamento de clientes necessários para dar suporte ao ecossistema Open Finance Brasil mais amplo.¶
Como um perfil do OAuth 2.0 Authorization Framework, este documento exige o seguinte para o perfil de segurança do Open Finance Brasil.¶
O Servidor de Autorização deve suportar as disposições especificadas na cláusula 5.2.2 de Financial-grade API Security Profile 1.0 - Parte 2: Advanced.¶
Além disso, ele deve:¶
claims
como definido no item 5.5 do OpenID Connect Core;¶
claim
padrão oidc "cpf" conforme definido no item 5.2.2.2 deste documento;¶
claim
padrão oidc "cnpj" conforme definido no item 5.2.2.3 deste documento, se a instituição for detentora de conta para pessoas jurídicas;¶
acr
"urn:brasil:openbanking:loa2" como definido no item 5.2.2.4 deste documento;¶
acr
"urn:brasil:openbanking:loa3" como definido no item 5.2.2.4 deste documento;¶
refresh tokens
;¶
access tokens
com o tempo de expiração entre 300 (mínimo) e 900 (máximo) segundos;¶
acr
no id_token;¶
code
e id_token
para o atributo response_type
;¶
code
para o atributo response_type
em conjunto com o valor jwt
para o atributo response_mode
;¶
refresh tokens
;¶
deve garantir que as configurações divulgadas aos demais participantes através do OpenID Discovery
(indicado pelo arquivo de Well-Known
cadastrado no Diretório) sejam restritos aos modos de operação aos quais a instituição se certificou;¶
request_uri
deve ser de 60 segundos;¶
x-fapi-interaction-id
em endpoints FAPI;¶
O Servidor de Autorização deve suportar as disposições especificadas na cláusula 5.2.2.1 de Financial-grade API Security Profile 1.0 - Parte 2: Advanced¶
Além disso, se o valor response_type
code id_token
for usado, o servidor de autorização:¶
Informação de Identificação Pessoal pode incluir, mas não está restrito a:¶
Caso seja solicitada alguma Claim contendo Informação de Identificação Pessoal:¶
JWKS
informado no parâmetro jwks_uri
durante o registro do cliente, indicada através do cabeçalho kid
do documento JWT;¶
x5u
, x5c
, jku
ou jkw
é vetado conforme definido na cláusula 2 OIDC.¶
Este perfil usa a definição oficial encontrada em: https://github.com/OpenBanking-Brasil/specs-seguranca/tree/main/idtoken_review. Isso significa que o sub é um identificador nunca transferido ou alterado para o usuário final. O valor para um dado usuário nunca deve mudar dentro de uma instituição, mesmo em diferentes consentimentos.¶
Este perfil define "cpf" como uma nova claim
padrão de acordo com
cláusula 5.1 OIDC¶
O número do CPF (Cadastro de Pessoas Físicas, [sepeˈɛfi]; português para "Registro de Pessoas Físicas") é o cadastro de pessoa física brasileira. Este número é atribuído pela Receita Federal Brasileira para brasileiros e estrangeiros residentes que, direta ou indiretamente, pagar impostos no Brasil.¶
No modelo de identidade do Open Finance Brasil, o cpf é uma string composta por números 11 caracteres de comprimento e podem começar com 0.¶
Se a Claim cpf for solicitada como essencial para constar no ID token ou na resposta ao endpoint de UserInfo
e na solicitação constar no parâmetro value
com determinado CPF exigido, o Authorization Server DEVE retornar no atributo cpf
o valor que corresponda ao da solicitação.¶
Se a Claim cpf for solicitada como essencial para constar no ID Token ou na resposta no endpoint de UserInfo, o Authorization Server deve retornar no atributo cpf o valor com o CPF do usuário autenticado.¶
Se a Claim cpf indicada como essencial não puder ser preenchida ou não for compatível com o requisito, o Authorization Server deve tratar a solicitação como uma tentativa de autenticação com falha.¶
Se a Claim cpf indicada como essencial for solicitada no endpoint de Autorização, deverá seguir as regras definidas na seção 5.2.2.1.¶
Nome: cpf, Tipo: String, Regex: 'd{11}$'¶
Este perfil define "cnpj" como uma nova reivindicação padrão de acordo com cláusula 5.1 OIDC¶
CNPJ, abreviação de Cadastro Nacional de Pessoas Jurídicas, é um número de identificação de empresas brasileiras emitidas pelo Ministério da Fazenda brasileira, na "Secretaria da Receita Federal" ou "Ministério da Fazenda" do Brasil. No modelo de identidade do Open Finance Brasil, pessoas físicas podem se associar a 0 ou mais CNPJs. Um CNPJ é uma string que consiste em números de 14 dígitos e pode começar com 0, os primeiros oito dígitos identificam a empresa, os quatro dígitos após a barra identificam a filial ou subsidiária ("0001" padrão para a sede), e os dois últimos são dígitos de soma de verificação. Para este perfil, o pedido de cnpj deve ser solicitado e fornecido como o número de 14 dígitos.¶
Se a Claim cnpj for solicitada como essencial para constar no ID Token ou na resposta ao endpoint UserInfo e na solicitação constar,
no parâmetro value
, determinado CNPJ exigido, o Authorization Server DEVE retornar no atributo cnpj
um conjunto de CNPJs relacionado com o usuário, um dos quais deve incluir valor que corresponda ao da solicitação.¶
Se a Claim cnpj for solicitada como essencial para constar no ID Token ou na resposta ao endpoint UserInfo, o Authorization Server deve incluir no ID Token ou na resposta ao endpoint UserInfo um conjunto que inclua um elemento com o número do CNPJ relacionado à conta utilizada na autenticação do usuário.¶
Se a Claim cnpj indicada como essencial não puder ser preenchida ou validada, o Authorization Server deve tratar a solicitação como uma tentativa de autenticação com falha.¶
Nome: cnpj, Tipo: Array of Strings, Array Element Regex: 'd{14}$'¶
Esse perfil define "urn:brasil:openbanking:loa2" e "urn:brasil:openbanking:loa3" como novas classes de "Authentication Context Request" (ACR)¶
A seguinte orientação deve ser observada para o mecanismo de autenticação das APIs do Open Finance Brasil:¶
Em observância à regulação em vigor, sugere-se que:¶
LoA2
; e¶
LoA3
ou superior.¶
Em todos os casos, a adoção de mecanismo de autenticação mais rigoroso (LoA3
ou superior) fica a critério da instituição transmissora ou detentora de conta, de acordo com sua avaliação de riscos e de forma compatível com os mecanismos habitualmente utilizados.¶
Esclarecimentos adicionais sobre fatores de autenticação¶
São fatores de autenticação:¶
Para realizar autenticação por múltiplos fatores (MFA) é necessário que o usuário apresente, ao menos, dois diferentes fatores dos listados acima. Um mesmo fator usado mais de uma vez - por exemplo, a apresentação de suas senhas que ele conhece - não pode ser aceito como MFA.¶
Um cliente confidencial deve apoiar as disposições especificadas na cláusula 5.2.3 de Financial-grade API Security Profile 1.0 - Part 2: Advanced,¶
Além disso, o cliente confidencial¶
refresh tokens
;¶
acr
;¶
acr
como essential;¶
refresh tokens
;¶
x-fapi-interaction-id
em endpoints FAPI;¶
Os participantes devem apoiar todas as considerações de segurança especificadas na cláusula 8 Financial-grade API Security Profile 1.0 - Parte 2: Advanced e o Manual de Segurança de Banco Central do Brasil. O ICP Brasil emite certificados RSA x509 somente, portanto, para simplificar, a seção remove o suporte para algoritmos EC e exige que apenas algoritmos de criptografia recomendados pela IANA sejam usados.¶
Para garantir a integridade e o não-repúdio das informações tramitadas em API's sensíveis e que indicam essa necessidade na sua documentação, deve ser adotado a estrutura no padrão JWS definida na RFC7515 e que inclui:¶
Cada elemento acima deve ser codificado utilizando o padrão Base64url RFC4648 e, feito isso, os elementos devem ser concatenados com "." (método JWS Compact Serialization, conforme definido na RFC7515).¶
O payload das mensagens (requisição JWT e resposta JWT) assinadas devem incluir as seguintes claims
presentes na RFC7519:¶
organisationId
listado no diretório;¶
organisationId
do emissor;¶
O content-type HTTP das requisições e respostas com mensagens JWS deve ser definido como: "application/jwt".¶
No cabeçalho JOSE deve constar os seguintes atributos:¶
Provedor do Recurso
a API deve retornar mensagem de erro HTTP com status code
400 e a resposta deve incluir na propriedade code
do objeto de resposta de erro especificado na API (ResponseError
) a indicação da falha com o conteúdo BAD_SIGNATURE
.¶
Provedor do Recurso
(p. ex. instituição detentora de conta) deve ser notificado.¶
O receptor deve validar a consistência da assinatura digital da mensagem JWS exclusivamente com base nas informações obtidas do diretório, ou seja, com base nas chaves publicadas no JWKS da instituição no diretório.¶
As assinaturas devem ser realizadas com uso do certificado digital de assinatura especificado no Padrão de Certificados Open Finance Brasil;¶
A claim iat deve ser numérica no formato Unix Time GMT+0 com tolerância de +/- 60 segundos;¶
A claim do jti deve ser única para um clientId dentro de um intervalo de tempo de 86.400 segundos (24h), não podendo ser reutilizada neste período. Em caso de reutilização, deverá ser retornado o código de erro HTTP 403. Demais casos seguir instrução da RFC 6749, item 5.2;¶
Para JWS, clientes e servidores de autorização¶
Para JWE, clientes e servidores de autorização¶
Para TLS, endpoints do Servidor de Autenticação e endpoints do Servidor de Recursos usados diretamente pelo cliente:¶
Os mecanismos existentes para gerenciar adequadamente o acesso aos recursos definidos em RFC6749 são insuficientes para atender aos requisitos de um ecossistema de compartilhamento de dados moderno. Aproveitar strings de escopo estático não fornece aos consumidores controle de granularidade suficiente para compartilhar com terceiros. O Open Finance Brasil optou por implementar uma API de consentimento como um recurso protegido OAuth 2.0 que pode ser usado para gerenciar o acesso granular aos recursos. A referência ao recurso de consentimento será transmitida como parte de um escopo de recurso dinâmico OAuth 2.0.¶
Este perfil define o escopo dinâmico do OAuth 2.0 "consentimento" da seguinte maneira:¶
Adicionalmente:¶
consent:urn:bancoex:C1DD33123¶
O recurso de consentimento tem um ciclo de vida gerenciado separada e distintamente da estrutura de autorização OAuth 2.0. As transições de estado e comportamentos esperados e condições de erro esperados dos Recursos REST protegidos com este perfil são definidos nas especificações funcionais da API publicadas pelo Open Finance Brasil.¶
Além dos requisitos descritos nas disposições de segurança do Open Finance Brasil, o Servidor de Autorização¶
só deve compartilhar o acesso aos recursos quando apresentado _accesstoken vinculado a um consentimento ativo e com o status "AUTHORIZED";¶
Além dos requisitos descritos nas disposições de segurança do Open Finance Brasil, o Cliente Confidencial¶
Agradecemos a todos que estabeleceram as bases para o compartilhamento seguro e seguro de dados por meio da formação do Grupo de Trabalho FAPI da OpenID Foundation, o GT de Segurança do Open Finance Brasil e aos pioneiros que ficarão em seus ombros.¶
As seguintes pessoas contribuíram para este documento:¶
Copyright (c) 2023 Estrutura Inicial do Open Finance Brasil¶
A Estrutura Inicial do Open Finance Brasil (EIOFB) concede a qualquer Colaborador, desenvolvedor, implementador ou outra parte interessada uma licença de direitos autorais mundial não exclusiva, livre de royalties para reproduzir, preparar trabalhos derivados, distribuir, executar e exibir, estes Implementadores Rascunho ou Especificação Final exclusivamente para fins de (i) desenvolver especificações e (ii) implementar Rascunhos de Implementadores e Especificações Finais com base em tais documentos, desde que a atribuição seja feita ao EIOFB como a fonte do material, mas que tal atribuição o faça não indica endosso do EIOFB.¶
A tecnologia descrita nesta especificação foi disponibilizada a partir de contribuições de várias fontes, incluindo membros da OpenID Foundation, do Grupo de Trabalho de Segurança do Open Finance Brasil e outros. Embora a Estrutura Inicial do Open Finance Brasil tenha tomado medidas para ajudar a garantir que a tecnologia esteja disponível para distribuição, ela não toma posição quanto à validade ou escopo de qualquer propriedade intelectual ou outros direitos que possam ser reivindicados como pertencentes à implementação ou uso do tecnologia descrita nesta especificação ou até que ponto qualquer licença sob tais direitos pode ou não estar disponível; nem representa que fez qualquer esforço independente para identificar tais direitos. A Estrutura Inicial do Open Finance Brasil e os contribuidores desta especificação não oferecem (e por meio deste expressamente se isentam de quaisquer) garantias (expressas, implícitas ou de outra forma), incluindo garantias implícitas de comercialização, não violação, adequação a uma finalidade específica ou título, relacionados a esta especificação, e todo o risco quanto à implementação desta especificação é assumido pelo implementador. A política de Direitos de Propriedade Intelectual do Open Finance Brasil exige que os contribuidores ofereçam uma promessa de patente de não fazer valer certas reivindicações de patentes contra outros contribuidores e implementadores. A Estrutura Inicial do Open Finance Brasil convida qualquer parte interessada a trazer à sua atenção quaisquer direitos autorais, patentes, pedidos de patentes ou outros direitos de propriedade que possam abranger a tecnologia que possa ser necessária para praticar esta especificação.¶