Credentials
Segredos versionados: senhas de usuário, credenciais técnicas de IF e senhas de usuários bancários.
Credentials é domínio próprio porque três consumidores guardam segredo do mesmo jeito: o login do usuário
(user_credentials), a credencial técnica de uma conta na instituição financeira (financial_institution_credentials) e
o usuário bancário (user_banks). Uma credencial tem versões; trocar a senha cria uma versão nova, e no máximo
uma fica ativa.
Tabelas (2)
| Tabela | Para quê |
|---|---|
credentials | A credencial em si: método (method), identificador externo e ciclo de vida (expiração, último uso, revogação). |
credential_versions | Cada versão do segredo: hash ou texto cifrado, quem criou e por quê, e o estado da versão. |
Referência
credentials
A credencial em si: método (method), identificador externo e ciclo de vida (expiração, último uso, revogação).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
uid | text | não | |
method | text | não | |
external_id | text | sim | |
attributes | jsonb | não | padrão '{}'::jsonb |
expires_at | timestamptz | sim | |
last_used_at | timestamptz | sim | |
revoked_at | timestamptz | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
- nenhuma
Referenciada por: credential_versions, financial_institution_credentials, user_banks, user_credentials.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | credentials_pkey | PRIMARY KEY (id) |
| UNIQUE | credentials_uid_unique | UNIQUE (uid) |
Fora do banco
methodnão tem CHECK; os métodos aceitos são definidos na aplicação.
credential_versions
Cada versão do segredo: hash ou texto cifrado, quem criou e por quê, e o estado da versão.
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
credential_id | bigint | não | |
version | integer | não | |
identifier | text | sim | |
identifier_type | text | sim | |
secret_hash | text | sim | |
secret_ciphertext | bytea | sim | |
encryption_key_id | text | sim | |
status | text | não | padrão 'pending' |
expires_at | timestamptz | sim | |
created_by_user_id | bigint | sim | |
created_by_service | text | sim | |
change_reason | text | não | |
created_at | timestamptz | não | padrão clock_timestamp() |
activated_at | timestamptz | sim | |
retired_at | timestamptz | sim |
Chaves estrangeiras
created_by_user_id→users.idcredential_id→credentials.id
Referenciada por: bank_credential_deliveries.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| CHECK | credential_versions_positive_version_check | CHECK ((version > 0)) |
| PK | credential_versions_pkey | PRIMARY KEY (id) |
| UNIQUE | credential_versions_credential_version_key | UNIQUE (credential_id, version) |
| UNIQUE | credential_versions_id_credential_key | UNIQUE (id, credential_id) |
| UNIQUE parcial | credential_versions_one_active_key | (credential_id) WHERE (status = 'active') |
Fora do banco
statusnão tem CHECK de valores; só a unicidade da versãoactiveé garantida.- Exatamente um autor (
created_by_user_idoucreated_by_service) não é garantido por CHECK.