Dynamic Client Registration (DCR) - Perfil único
Prefácio
A Estrutura Inicial do Open Insurance Brasil é responsável por criar os padrões e especificações necessários para atender aos requisitos e obrigações da Legislação do Open Insurance do Brasil, conforme originalmente delineado pela SUSEP. É possível que alguns dos elementos deste documento estejam sujeitos a direitos de patente. A Estrutura Inicial não se responsabiliza pela identificação de qualquer ou todos os direitos de patente.
O Perfil de Segurança Financial-grade API 1.0 do Open Insurance Brasil consiste nas seguintes partes:
Open Finance Brasil Financial-grade API Security Profile 1.0
Open Insurance Brasil Dynamic Client Registration Profile 1.0
Essas partes devem ser usadas com RFC6749, RFC6750, RFC7636, OIDC, OIDR, RFC7591, RFC7592, FAPI-1-Baseline e FAPI-1-Advanced
Changelog
Seção | Alteração |
---|---|
Exclusão do item 6.1.6 “se suportar OAuth 2.0 Pushed Authorisation Requests, deve…” do antigo documento | |
Item 6.1.5 alterado de “deve anunciar” para “pode anunciar” | |
Adição de “push_authorization_request_endpoint" no item 6.1.5 | |
Adição do item 6.1.7 | |
Adição do subitem “a” no item 7.1.5 | |
Exclusão do item 7.1.11 “se for compatível com o mecanismo de autenticação do cliente tls_client_auth…” do antigo documento | |
Adição dos itens 7.1.16 e 7.1.17 | |
Exclusão da subseção 7.1.2 Análise do Distinguished Name do Certificado | |
Exclusão da seção | |
9.3 Sobre os mecanismos de autenticação e autorização dos serviços de DCR e DCM | Exclusão do item 9.3.2.1 “validar que o certificado apresentado…” do antigo documento |
9.3 Sobre os mecanismos de autenticação e autorização dos serviços de DCR e DCM | Adição dos itens 9.3.2.2, 9.3.2.3 e 9.3.2.4 |
9.3 Sobre os mecanismos de autenticação e autorização dos serviços de DCR e DCM | Exclusão da observação “A RFC7592 prevê a possibilidade de rotação do registration_access_token..." |
Adição da seção |
Introdução
O Perfil de Registro de Cliente Dinâmico (DCR - Dynamic Client Registration) do Financial-grade API (FAPI) do Open Insurance Brasil é um perfil de RFC7591, RFC7592 e OIDR que visa fornecer diretrizes de implementação específicas para segurança e interoperabilidade que podem ser aplicadas à identificação, registro e gerenciamento de Clients OAuth operando no ecossistema Open Insurance Brasil.
Embora seja possível codificar um OpenID Provider e Relying Party desde o princípio usando esta especificação, o principal público para esta especificação são as partes que já possuem uma implementação certificada do OpenID Connect e desejam obter a certificação para o Open Insurance Brasil.
Convenções Notacionais
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:
"deve" => equivalente ao termo "shall" e expressa um requerimento definido no documento (nas traduções é similar ao termo "must", que pode denotar um requerimento externo ao documento);
"não deve" => equivalente ao termo "shall not" e também expressa um requerimento definido no documento;
"deveria" e "não deveria"=> equivalente ao termo "should" e "should not" e expressa uma recomendação
"pode" => equivalente ao termo "may" indica uma permissão
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.
1. Escopo
Este documento especifica o método de
aplicativos cadastrados no Diretorio de Participantes do Open Insurance para descobrir OpenID Providers que oferecem serviços no ecossistema Open Insurance Brasil;
aplicativos para usar o OpenID Connect Registration para integrar seus aplicativos com OpenID Providers das seguradoras; e
aplicativos para usar OAuth 2.0 Dynamic Client Registration Management Protocol para gerenciar seus aplicativos com OpenID Providers;
Este documento é aplicável a todos os participantes do Open Insurance no Brasil.
2. Referências normativas
Os seguintes documentos referenciados são indispensáveis para a aplicação deste documento. Para referências datadas, apenas a edição citada se aplica. Para referências não datadas, a última edição do documento referenciado (incluindo quaisquer emendas) se aplica.
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
RFC7519 - JSON Web Token (JWT)
RFC7592 - OAuth 2.0 Dynamic Client Registration Management Protocol
FAPI-CIBA - Financial-grade API: Client Initiated Backchannel Authentication Profile
RFC4514 - Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names
RFC4517 - Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules
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)
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
OFB-FAPI - Open Finance Brasil Financial-grade API Security Profile 1.0
OFB-Cert-Standards - Open Insurance Brasil x.509 Certificate Standards
OFB-DCR/DCM-Swagger - DCR & DCM Swagger
3. Termos e definições
Para efeitos deste documento, aplicam-se os termos definidos em RFC6749, RFC6750, RFC7636, OpenID Connect Core e ISO29100.
4. Símbolos e Termos abreviados
API – Application Programming Interface (Interface de Programação da Aplicação)
DCR – Dynamic Client Registration (Registro de Cliente Dinâmico)
FAPI - Financial-grade API
HTTP – Hyper Text Transfer Protocol
OIDF - OpenID Foundation
REST – Representational State Transfer
SS – Software Statement (Declaração de Software)
SSA – Software Statement Assertion (Afirmação de Declaração de Software)
TLS – Transport Layer Security
5. Introdução
O ecossistema Open Insurance Brasil apoia-se em um provedor de confiança ou diretório de participantes como a fonte mais valiosa de informações sobre participantes credenciados e softwares que estão autorizados a participar do ecossistema Open Insurance Brasil.
Os serviços do Diretório incluem:
Registro e gerenciamento de software
Registro e gerenciamento de credenciais de software usando certificados ICP
Geração de Software Statement Assertion (SSA)
Os participantes do ecossistema devem aproveitar esses serviços para facilitar o registro de cliente OAuth orientado por API usando o processo descrito na cláusula 3.1.1 do RFC7591 com metadados adicionais necessários para oferecer suporte ao OpenID Connect definido em OpenID Connect Registration.
É importante reforçar que o payload de registro de clientes possui a maior parte de seus atributos não obrigatórios, e que os atributos cujos valores conflitem com os presentes no software statement assertion serão sobrepostos pelos valores do próprio software statement assertion emitido pelo diretório central. Nem todos os metadados que um cliente deseja fornecer podem estar contidos em um software statement, por exemplo, alternativa Metadata Languages and Script values. Há casos ainda de metadados de cliente que são um subconjunto dos valores existentes no SSA, como por exemplo os redirect_URIs.
6. Provisionamentos do OpenID Connect Discovery do Open Insurance Brasil
6.1 Servidor de Autorização
O servidor de autorização deve suportar OpenID Connect Discovery conforme exigido pelo Financial-grade API Security Profile 1.0 - Part 1: Baseline. Este suporte deve estar explicito tanto na forma como o Servidor de Autorização está registrado no Diretório de Participantes quanto na declaração dos seus atributos no arquivo de Discovery (well-known), respeitando os mecanismos de autenticação certificados pela institição através dos testes de conformidade do Open Insurance Brasil.
Adicionalmente, o Servidor de Autorização:
deve anunciar sua presença no ecossistema Open Insurance Brasil, sendo listada no Diretório de Participantes;
deve anunciar todos os recursos API REST do Open Insurance Brasil protegidos pelo Provedor OpenID no Diretório de Participantes;
deve anunciar suporte para todos os mecanismos de assinatura, criptografia, autenticação e padrões necessários para suportar o Open Finance Brasil Financial API;
deve anunciar suporte para OpenID Dynamic Client Registration;
pode anunciar
mtls_endpoint_aliases
de acordo com a cláusula 5 RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication e Certificate-Bound Access Tokens otoken_endpoint
,registration_endpoint
euserinfo_endpoint
epush_authorization_request_endpoint
;se suportar Financial API - Client Initiated Back Channel Authentication, deve anunciar através de OIDD
mtls_endpoint_aliases
obackchannel_authentication_endpoint
;não deve rotacionar o registration_access_token.
6.2 Cliente
O cliente deve suportar OpenID Connect Discovery conforme exigido pelo Financial-grade API Security Profile 1.0 - Part 1: Baseline.
Além disso, o Cliente
deve contar com serviços de descoberta do ecossistemas fornecidos apenas pelo Diretório de Participantes;
deve derivar os metadados necessários do Authorization Server somente por meio do serviço OpenID Connect Discovery dos Authorization Servers;
quando presente, deve usar endpoints anunciados em
mtls_endpoint_aliases
conforme a cláusula 5 RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication e Certificate-Bound Access Tokens;
7. Provisionamento de registro OpenID Connect do Open Insurance Brasil
7.1 Servidor de Autorização
O servidor de autorização deve suportar as RFCs de Dynamic Client Registration (DCR) RFC7591, Dynamic Client Management (DCM) RFC7592 e OpenID Registration
Além disso, o servidor de autorização
deve rejeitar as solicitações de registro de cliente dinâmico não realizadas em uma conexão protegida com mTLS usando certificados emitidos pelo Brasil ICP (produção) ou o Diretório de Participantes (sandbox);
deve validar que a solicitação contém software_statement JWT assinado usando o algoritmo
PS256
emitido pelo Diretório de Participantes do Open Insurance Brasil;deve validar que o software_statement foi emitido (iat - issued at) não mais de 5 minutos antes do pedido ser recebido;
deve validar que um atributo
jwks
(definida por valor) não foi incluído, e sim declarado como referência no atributojwks_uri
;deve, quando informado, validar que o
jwks_uri
corresponda aosoftware_jwks_uri
fornecido na declaração do software;deve validar se o conteúdo obtido através do
jwks_uri
contém um certificado do tipo“use": "enc"
;
deve exigir e validar que o
redirect_uris
corresponda ou contenha um subconjunto dos valores desoftware_redirect_uris
fornecidos no software_statement;deve exigir e validar que todos os mecanismos de autenticação de cliente cumpram os requisitos definidos nas RFC7591 e RFC7592, através da validação do
registration_access_token
e, como conexão segura, da cadeia de certificados confiáveis ICP-Brasil.deve validar se os escopos solicitados são adequados para as permissões regulatórias autorizadas da instituição e contidas no software_statement. A relação de permissões regulatórias e os escopos correspondentes está descrita nas seções a seguir.
deve, sempre que possível, validar os metadados declarados pelo cliente em relação aos metadados fornecidos no software_statement, adotando os valores presentes no SSA com precedência.
deve aceitar todos os nomes x.500 AttributeType definidas no Distinguished Name dos Perfis de Certificado x.509 definidos em Open Insurance Brasil x.509 Certificate Standards;
o valor do campo UID do certificado deve coincidir com o enviado no SSA, onde o campo UID deve conter o valor do campo software_id do SSA.
o valor do campo organizationIdentifier do certificado deve conter o prefixo correspondente ao Registration Reference OPIBR- seguido do valor do campo org_id do SSA.
deve, durante o processo de handshake TLS, usar a regra
distinguishedNameMatch
para comparar os valores DN conforme definido na RFC4517.deve garantir a integridade do estoque de consentimentos ativos, mesmo após eventuais mudanças sistêmicas, para que taís alterações sejam transparentes para as instituições receptora de dados.
deve realizar recertificação FAPI e DCR da OIDF após eventuais mudanças sistêmicas.
O valor do atributo
software_api_webhook_uris
contido como atributo no JWS em software_statement deverá ser comparado com o campowebhook_uris
. Caso os valores não sejam exatamente iguais, deve-se retornar o erro, com HTTP status code setado para 400, error preenchido como invalid_webhook_uris e error_description preenchido com “The content of the webhook_uris field differs from what was registered in the software_statement observed through the JWS field's software_api_webhook_uris”.Se o campo
webhook_uris
não for declarado no payload, a funcionalidade webhook deverá ser considerado como desativado para o client em questão.
Estas disposições aplicam-se igualmente ao processamento de pedidos RFC7591, RFC7592 e OpenID Registration
7.1.1 Aplicando Server Defaults
Quando as propriedades de uma solicitação DCR não estão incluídas e não são obrigatórias na especificação, o Authorization Server deve aplicar os padrões do cliente da seguinte maneira:
deve selecionar e aplicar o algoritmo de criptografia e a escolha da cifra a partir dos conjuntos mais recomendados de cifra da IANA que são suportados pelo Servidor de Autorização;
deve preencher defaults a partir de valores da afirmação de software_statement, sempre que possível;
deve conceder ao cliente permissão para o conjunto completo de escopos potenciais com base nas permissões regulatórias de softwares incluídas no software_statement.
7.2 Funções regulatórias para mapeamentos OpenID e OAuth 2.0
Para participar do ecossistema do Open Insurance, as instituições credenciadas devem se cadastrar no Diretório de Participantes de acordo com seus papéis regulatórios. Essas funções refletem a autorização do SUSEP para as instituições e, consequentemente, as APIs que podem utilizar.
A tabela a seguir descreve as funções regulatórias do Open Insurance e o mapeamento de escopos do OAuth 2.0 relacionado. Se os escopos forem omitidos durante o processo de DCR, o Servidor de Autorização deve conceder o conjunto completo de escopos potenciais com base nas funções regulatórias registradas para a seguradora, conforme descrito na seção Server Defaults.
Papel Regulador | Descrição | Escopos Permitidos (em construção) | Fase-alvo |
---|---|---|---|
DADOS | Instituição transmissora / receptora de dados | openid consents resources customers insurance-acceptance-and-branches-abroad insurance-auto insurance-financial-risk insurance-housing insurance-patrimonial insurance-rural insurance-responsibility insurance-transport | Fase 2 |
ICS | Iniciadora de Compartilhamento de Serviços | openid claim-notification endorsement quote-patrimonial-lead quote-patrimonial-home quote-patrimonial-condominium quote-patrimonial-business quote-patrimonial-diverse-risks | Fase 3 |
TCS | Transmissora de Compartilhamento de Serviços | openid | Fase 3 |
É necessário validar as roles ativas no software_statement da aplicação. Na validação dessa informação deve ser utilizado o campo software_statement_roles, e deve ser verificado se as roles listadas estão ativas.
8. Declaração de Software
Uma declaração de software (software_statement) é um JSON Web Token (JWT) que afirma valores de metadados sobre o software cliente como um todo. Na estrutura do Open Insurance Brasil, esse software_statement é assinado pelo Diretório de Participantes, e sua assinatura DEVE ser validada pelos Servidores de Autorizacao usando as chaves públicas disponíveis na seção a seguir.
8.1 Atributos da Declaração de Software (Claims)
O exemplo a seguir contém todos os atributos atualmente incluídos em um software_statement:
{
"software_mode": "Live",
"software_redirect_uris": [
"https://www.raidiam.com/insurance/cb"
],
"software_statement_roles": [
{
"role": "DADOS",
"authorisation_domain": "Open Insurance",
"status": "Active"
}
],
"software_client_name": "Raidiam Insurance",
"org_status": "Active",
"software_client_id": "Cki1EbvjwyhPB12NGLlz2",
"iss": "Open Insurance Brasil prod SSA issuer",
"software_tos_uri": "https://www.raidiam.com/insurance/tos.html",
"software_client_description": "Raidiam Insurance leverage cutting edge open insurance access to bring you real time up to date views of your insurances",
"software_jwks_uri": "https://keystore.directory.opinbrasil.com.br/b961c4eb-509d-4edf-afeb-35642b38185d/25556d5a-b9dd-4e27-aa1a-cce732fe74de/application.jwks",
"software_policy_uri": "https://www.raidiam.com/insurance/policy.html",
"software_id": "25556d5a-b9dd-4e27-aa1a-cce732fe74de",
"software_client_uri": "https://www.raidiam.com/insurance.html",
"software_jwks_inactive_uri": "https://keystore.directory.opinbrasil.com.br/b961c4eb-509d-4edf-afeb-35642b38185d/25556d5a-b9dd-4e27-aa1a-cce732fe74de/inactive/application.jwks",
"software_jwks_transport_inactive_uri": "https://keystore.directory.opinbrasil.com.br/b961c4eb-509d-4edf-afeb-35642b38185d/25556d5a-b9dd-4e27-aa1a-cce732fe74de/inactive/transport.jwks",
"software_jwks_transport_uri": "https://keystore.directory.opinbrasil.com.br/b961c4eb-509d-4edf-afeb-35642b38185d/25556d5a-b9dd-4e27-aa1a-cce732fe74de/transport.jwks",
"software_logo_uri": "https://www.raidiam.com/insurance/logo.png",
"org_id": "b961c4eb-509d-4edf-afeb-35642b38185d",
"org_number": "112233445566",
"software_environment": "production",
"software_version": "1.1",
"software_roles": [
"DADOS"
],
"org_name": "Open Insurance Brasil",
"iat": 1620060821,
"organisation_competent_authority_claims": [
{
"authorisation_domain": "Open Insurance",
"authorisations": [],
"registration_id": "13353236-OIB-DADOS",
"authority_id": "687a1c94-b360-4e04-9589-0fa5cb16451b",
"authority_name": "SUSEP",
"authorisation_role": "DADOS",
"authority_code": "SUSEP",
"status": "Active"
}
]
}
9. Processamento de solicitação de registro de cliente dinâmico
9.1 Enviar uma solicitação com uma declaração de software
Este exemplo inclui vários campos opcionais, alguns dos quais podem não ser aplicáveis a algumas implantações. Para um guia completo dos atributos e sua obrigatoriedade, consultar o Swagger DCR. A quebra de linha dentro dos valores são apenas para fins de exibição.
POST /reg HTTP/1.1
Host: auth.raidiam.com
Content-Type: application/json
{
"application_type": "web",
"grant_types": [
"client_credentials",
"authorization_code",
"refresh_token",
"implicit"
],
"id_token_signed_response_alg": "PS256",
"require_auth_time": false,
"response_types": [
"code id_token",
"id_token"
],
"software_statement": "eyJraWQiOiJzaWduZXIiLCJ0eXAiOiJKV1QiLCJhbGciOiJQUzI1NiJ9.eyJzb2Z0d2FyZV9qd2tzX2luYWN0aXZlX3VyaSI6Imh0dHBzOlwvXC9rZXlzdG9yZS5zYW5kYm94LmRpcmVjdG9yeS5vcGluYnJhc2lsLmNvbS5iclwvNGI3NWRiMmUtYTBjMC00MzU5LWEwNzctNjg0ZTg4ZmE2OTVjXC9jZDA4MDc5MS05ZjJiLTRiMGQtYjZhNC05NTNiZTUyYjU5NzFcL2luYWN0aXZlXC9hcHBsaWNhdGlvbi5qd2tzIiwic29mdHdhcmVfbW9kZSI6IkxpdmUiLCJzb2Z0d2FyZV9yZWRpcmVjdF91cmlzIjpbImh0dHBzOlwvXC93d3cubmFvdmFsaWRvLmNvbS5iciJdLCJzb2Z0d2FyZV9zdGF0ZW1lbnRfcm9sZXMiOltdLCJvcmdfandrc190cmFuc3BvcnRfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL3RyYW5zcG9ydC5qd2tzIiwic29mdHdhcmVfY2xpZW50X25hbWUiOiJUZXN0ZSBTYW5kYm94Iiwib3JnX3N0YXR1cyI6IkFjdGl2ZSIsImlzcyI6Ik9wZW4gSW5zdXJhbmNlIEJyYXNpbCBTYW5kYm94IFNTQSBpc3N1ZXIiLCJvcmdfandrc190cmFuc3BvcnRfaW5hY3RpdmVfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL2luYWN0aXZlXC90cmFuc3BvcnQuandrcyIsInNvZnR3YXJlX2p3a3NfdHJhbnNwb3J0X2luYWN0aXZlX3VyaSI6Imh0dHBzOlwvXC9rZXlzdG9yZS5zYW5kYm94LmRpcmVjdG9yeS5vcGluYnJhc2lsLmNvbS5iclwvNGI3NWRiMmUtYTBjMC00MzU5LWEwNzctNjg0ZTg4ZmE2OTVjXC9jZDA4MDc5MS05ZjJiLTRiMGQtYjZhNC05NTNiZTUyYjU5NzFcL2luYWN0aXZlXC90cmFuc3BvcnQuandrcyIsInNvZnR3YXJlX3BvbGljeV91cmkiOiJodHRwczpcL1wvd3d3Lm5hb3ZhbGlkby5jb20uYnIiLCJzb2Z0d2FyZV9pZCI6ImNkMDgwNzkxLTlmMmItNGIwZC1iNmE0LTk1M2JlNTJiNTk3MSIsInNvZnR3YXJlX3N0YXR1cyI6IkFjdGl2ZSIsInNvZnR3YXJlX2Vudmlyb25tZW50IjoiU2FuZGJveCIsInNvZnR3YXJlX3ZlcnNpb24iOiIxLjAwIiwib3JnX25hbWUiOiJPUEVOIElOU1VSQU5DRSBCUkFTSUwgLSBQRUVSUyIsImlhdCI6MTY1NzgyOTExNCwic29mdHdhcmVfc2VjdG9yX2lkZW50aWZpZXJfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL2NkMDgwNzkxLTlmMmItNGIwZC1iNmE0LTk1M2JlNTJiNTk3MVwvcmVkaXJlY3RfdXJpcy5qc29uIiwic29mdHdhcmVfY2xpZW50X2lkIjoiY2QwODA3OTEtOWYyYi00YjBkLWI2YTQtOTUzYmU1MmI1OTcxIiwib3JnX2p3a3NfaW5hY3RpdmVfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL2luYWN0aXZlXC9hcHBsaWNhdGlvbi5qd2tzIiwic29mdHdhcmVfandrc190cmFuc3BvcnRfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL2NkMDgwNzkxLTlmMmItNGIwZC1iNmE0LTk1M2JlNTJiNTk3MVwvdHJhbnNwb3J0Lmp3a3MiLCJzb2Z0d2FyZV9jbGllbnRfdXJpIjoiaHR0cHM6XC9cL3d3dy5uYW92YWxpZG8uY29tLmJyIiwic29mdHdhcmVfbG9nb191cmkiOiJodHRwczpcL1wvd3d3Lm5hb3ZhbGlkby5jb20uYnIiLCJvcmdfaWQiOiI0Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWMiLCJvcmdfandrc191cmkiOiJodHRwczpcL1wva2V5c3RvcmUuc2FuZGJveC5kaXJlY3Rvcnkub3BpbmJyYXNpbC5jb20uYnJcLzRiNzVkYjJlLWEwYzAtNDM1OS1hMDc3LTY4NGU4OGZhNjk1Y1wvYXBwbGljYXRpb24uandrcyIsIm9yZ19udW1iZXIiOiIxNDcyMzM3OTAwMDE3MiIsInNvZnR3YXJlX2p3a3NfdXJpIjoiaHR0cHM6XC9cL2tleXN0b3JlLnNhbmRib3guZGlyZWN0b3J5Lm9waW5icmFzaWwuY29tLmJyXC80Yjc1ZGIyZS1hMGMwLTQzNTktYTA3Ny02ODRlODhmYTY5NWNcL2NkMDgwNzkxLTlmMmItNGIwZC1iNmE0LTk1M2JlNTJiNTk3MVwvYXBwbGljYXRpb24uandrcyIsInNvZnR3YXJlX3JvbGVzIjpbXSwib3JnYW5pc2F0aW9uX2NvbXBldGVudF9hdXRob3JpdHlfY2xhaW1zIjpbXX0.bdWayyhABvNGnT7Vmsdd5ZTht1oYBm_hHRAAyRGD-lCmNi08HDFH-8RzjFsMJ5ZWzS99mwwVrCBph0YcbwfzWuSu9uFdd-bwvfhXFhkNDzQHuRMOF1QTHd0C8r3N-_CkBtYWyXXNFGiREyXjFn8Muvw3fGSr98sy01PDlNyZlxxpBTU9-nz2r-WxwwVyTJyVfz8wVXrrX3_H19Ty3vwiqAbf0tSPyfXFEe3XQE6XJ8W93Ec9M2CzB3PuaaNvgsa2f4T6tT3yHqUfnRQuqf1FCc3raxxn7tVAB-G1yJ9bz-ZaKdsjX2nWCGhJR41rIPlAGv85EsESAo_JSHpfZW0EbA",
"subject_type": "public",
"token_endpoint_auth_method": "private_key_jwt",
"request_object_signing_alg": "PS256",
"require_signed_request_object": true,
"require_pushed_authorization_requests": false,
"tls_client_certificate_bound_access_tokens": true,
"client_id": "aCnBHjZBvD6ku3KVBaslL",
"client_name": "Raidiam Insurance",
"client_uri": "https://www.raidiam.com/insurance.html",
"request_object_encryption_alg": "RSA-OAEP",
"request_object_encryption_enc": "A256GCM"
"jwks_uri": "https://keystore.directory.opinbrasil.com.br/b961c4eb-509d-4edf-afeb-35642b38185d/25556d5a-b9dd-4e27-aa1a-cce732fe74de/application.jwks",
"redirect_uris": [
"https://www.raidiam.com/insurance/cb"
]
}
9.2 Open Insurance Brasil SSA Key Store e detalhes do emissor
As links a seguir apontam para as chaves públicas do Diretório de Participantes, e devem ser usadas para verificar a validadade da assinatura dos software_statements apresentados durante o processo de registro de cliente.
Producão
https://keystore.directory.opinbrasil.com.br/openinsurance.jwks
Emissor do Open Insurance Open Insurance Brasil SSA de produção
Sandbox
https://keystore.sandbox.directory.opinbrasil.com.br/openinsurance.jwks
Emissor do Open Insurance Open Insurance Brasil SSA de sandbox
9.3 Sobre os mecanismos de autenticação e autorização dos serviços de DCR e DCM
Por serem serviços auxiliares ao fluxo principal do Open Insurance Brasil, os serviços de registro e manutenção dinâmica de clientes não utilizam os mesmos mecanismos de controle de acesso. Por exemplo: não é possível exigir um access_token OAuth 2.0 de uma aplicação cliente que ainda não está registrada na instituição transmissora. Para estender as RFC7591 e RFC7592, que recomendam mecanismos mínimos para autenticação dos seus serviços, as instituições que suportam os fluxos de registro e manutenção dinâmica de clientes devem implementar em seus Servidores de Autorização os controles a seguir:
9.3.1 Registro de cliente - POST /register
validar que o certificado apresentado pela aplicação cliente é subordinado às cadeias do ICP-Brasil definidas no Padrão de Certificados do Open Insurance Brasil;
assegurar que a assinatura do software_statement apresentado pela aplicação cliente durante o registro tenha sido feita pelo Diretório de Participantes através das chaves públicas descritas na seção anterior;
assegurar que o software_statement apresentado pela aplicação cliente durante o registro corresponda à mesma instituição do certificado de cliente apresentado, validando-o através dos atributos que trazem
organization_id
no certificado X.509.emitir, na resposta do registro, um
registration_access_token
para ser usado como token de autenticação nas operações de manutenção da aplicação cliente registrada, seguindo as especificações descritas na RFC7592.não devem ser permitidos múltiplos cadastros DCR para o mesmo Software Statement, de forma que em caso de tentativa de novo registro para um Software Statement já cadastrado, deve se utilizar o procedimento de Error Response definido no item 3.2.2 da RFC7591.
9.3.2 Manutenção de cliente - GET /register - PUT /register - DELETE /register
validar a presença e a correspondência do header Bearer
Authorization
contendo o valor do atributoregistration_access_token
retornado durante o registro do cliente correspondente.quando o método chamado for PUT /register, realizar as validações dos subitens 1, 2, 3 e 5 do item Registro de cliente - POST /register.
quando o método chamado for GET /register, realizar as validações dos subitens 1 e 5 do item Registro de cliente - POST /register.
quando o método chamado for DELETE /register, realizar a validação do subitem 1 do item Registro de cliente - POST /register.
9.4. Validação de certificados de assinatura
O diretório realiza a validação do certificado de assinatura através da função cert rescan, a cada hora.
As instituições devem assegurar que o processo de validação é realizado.
Cada instituição deve ter alternativa de contingência em caso de indisponibilidade do serviço de validação realizado pelo diretório.
Ao identificar que o certificado de assinatura não é válido pois, está com status revogado de acordo com o OCSP/CRL da CA emissora, ou está inativo no cadastro do diretório, o conjunto de chaves públicas é movido para o repositório de chaves inativas (Inactive Keystore).
É recomendado que o processo de validação inclua:
Validação da assinatura da mensagem do Transmissor de Dados, a ser feita pelo Receptor de Dados
Validar se a mensagem está assinada conforme o Message Signature Guidelines, incluindo se o iss é igual ao organisation_id do servidor que emitiu a mensagem.
Buscar a declaração iss do JWT e gerar URI do JWKS publicado no diretório, para consulta.
Certificar se o kid do cabeçalho JWT da mensagem está presente no diretório JWKS.
Validar se a chave privada para o kid correspondente é capaz de validar a assinatura da mensagem.
Validação da assinatura da mensagem do Receptor de Dados, a ser feita pelo Transmissor de Dados
Validar se a mensagem está assinada conforme o Message Signature Guidelines.
Obter o org_jwks_uri que foi apresentado no SSA pelo cliente no momento do DCR.
Certificar se o kid do cabeçalho JWT da mensagem está presente no diretório JWKS.
Validar se a chave privada para o kid correspondente é capaz de validar a assinatura da mensagem.