Core API
Introdução
Nesta seção faremos uso conceitos abordados na documentação de arquitetura do projeto Core API.
Gerando os valores da chave de aplicação
A chave de aplicação tem como objetivo identificar qual projeto mobile está consumindo a Core API.
Utilize o link abaixo para Gerar os valores criptografados em SHA512.
https://emn178.github.io/online-tools/sha512.html
Name: ApplicationName;
Name criptografado em SHA512: 3784fb638c2cd8d4f36214478e01987238138a64317396a008ba37187e699b1542829a56e61329cc55c60e527c635a18fd4ee77ba185a005c0199e3b511ef3ae
Secret sem criptografia(string aleatória + salt aleatório): ApplicationSecret237cd775-c1e0-4aa6-8604-a6dcb92b860f
Secret criptografado em SHA512: b86aa0f87f9184914ac7e93dda6dbe87ccf6b06a60669f67c7c6d6a9b594007bcb69bb0049bd9514fcc630cbceee1b18d82ae5c3a3f995fb6dec823c3c3bd817
Observação: os valores utilizados nos exemplos são ilustrativos e não servem para ser utilizados em um cenário real.
Os dados no banco de dados deverão ser preenchidos da seguinte forma:
ApplicationId: Identificador da entidade;
Name: Nome aleatório (pode escolher o nome da aplicação);
Key: Hash do nome da aplicação criptografado em SHA512;
Secret: Hash da (string aleatória + salt aleatório) criptografado em SHA512;
Salt: Salt aleatório;
CreationDate: Data atual;
UpdateDate: Data atual;
DeletionDate: Nulo;
CreationUserId: Identificador de um usuário válido;
UpdateUserId: Identificador de um usuário válido;
Status: 0;
Cadastrando Application
No banco de dados faça um insert na tabela Application passando os valores obtidos nos passos anteriores. Segue exemplo de insert.
INSERT INTO public."Application"(
"Name", "Key", "Secret", "Salt",
"CreationDate", "UpdateDate", "DeletionDate",
"CreationUserId", "UpdateUserId", "Status")
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
Cadastrando Company
No banco de dados faça um insert na tabela Company informando os dados respectivos a unidade de negócio criada e configurada pelo provedor dos serviços financeiros. Para o correto funcionamento da plataforma é necessário que o id da Company seja cadastrado tal qual foi fornecido pela BaaS API. Segue exemplo de insert.
INSERT INTO public."Company"(
"CompanyId", "Name", "CreationDate", "UpdateDate", "DeletionDate",
"CreationUserId", "UpdateUserId", "ApplicationId")
VALUES (?, ?, ?, ?, ?, ?, ?, ?);
Cadastrando CompanyAuthentication
No banco de dados faça um insert na tabela CompanyAuthentication informando os dados respectivos a comunicação com a BaaS API. É preciso criptografar o campo "Password" na mesma criptografia utilizada na chave da aplicação. Segue exemplo de insert.
INSERT INTO public."CompanyAuthentication"(
"CompanyId", "Url", "Salt",
"UserName", "Password", "CreationDate", "UpdateDate", "DeletionDate",
"CreationUserId", "UpdateUserId")
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
Configurando Core API
Após a publicação dos pacotes da API no servidor que hospedará a aplicação, podemos configurar o "appsettings" do projeto. Vale ressaltar que existem dois arquivos, “appsettings.Development.json” e “appsettings.json”. Ambos estão localizados na raíz do projeto da API. O primeiro arquivo é utilizado quando a API é executada localmente, já o segundo quando publicada. Veja o exemplo a seguir.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Settings": {
"ConnectionStrings": {
"core": "Server=your-postgres-server; Port=your-postgres-port; User Id=your-postgres-user; Password=your-postgres-password; Database=your-postgres-database;"
},
"ConnectionKey": {
"AuthorizationTokenExpirationTime": 30
},
"JwtSecret": "your-secret",
"JwtExpirationTime": 2,
"AuthorizationTokenValidateAttempts": 3,
"ApplicationTokenExpirationTime": 1,
"AesKey": "your-aes-key",
"AesIV": "your-aes-iv",
"LogPath": "your-log-directory-path",
"LoginAttempts": 3,
"UserDefault": 0,
"UrlAddressApi": "your-adress-api-url",
"GenerateTokenFile": false,
"TokenFilePath": "",
"ApplicationAesKey": "your-application-aes-key",
"ApplicationAesIV": "your-application-aes-iv"
}
}
Confira uma breve descrição das chaves contidas no arquivo de configuração.
Chave | Descriçãoo | Tipo |
---|---|---|
ConnectionStrings/core | String de conexão com o banco de dados | String |
AuthorizationTokenExpirationTime | Tempo de expiração dos tokens de autorização em segundos | Int |
AuthorizationTokenValidateAttempts | Quantidade de tentativas válidas de uso do token de autorização por usuário; | Int |
JwtSecret | Secret dos tokens de comunicação interna | String |
JwtExpirationTime | Tempo de expiração dos tokens de comunicação interna em minutos | Int |
AesKey | Chave de criptografia de variáveis de uso interno | String (16 caracteres) |
AesIV | Inicializador de criptografia de variáveis de uso interno | String (32 caracteres) |
ApplicationTokenExpirationTime | Tempo de expiração dos tokens de aplicação em segundos | Int |
ApplicationAesKey | Chave de criptografia dos tokens de aplicação | String (16 caracteres) |
ApplicationAesIV | Inicializador de criptografia dos tokens de aplicação | String (32 caracteres) |
LoginAttempts | Quantidade de tentativas válidas de login antes do bloqueio do usuário | Int |
UrlAddressApi | Rota para a API de consulta de endereços | String |
UserDefault | Id do usuário de sistema; Inteiro | Int |
LogPath | Path para o armazenamento dos logs de exceções que não puderam ser persistidas | String |
GenerateTokenFile | Booleano que indica o registro de tokens estaticos para testes automatizados | Bool |
TokenFilePath | Path dos tokens estaticos para testes automatizados | String |
Token de autorização: Token gerado para a autorização de operações;
Token de aplicação: Token para comunicação entre o Mobile e a Core API;
Token de comunicação interna: Token para autenticação de chamadas entre as aplicações internas;
Usuário de sistema: Usuário para uso de aplicações internas, deve ser criado manualmente;
Concedendo acessos manualmente
Para criar um profile para um usuário será necessário inserir na tabela UserAccountProfile o UserAccountId vinculado a um ProfileId como no exemplo:
Caso haja necessidade de criar um profile com permissões específicas, será necessário inserir na tabela ProfileActionFunction a associação das ActionFunctions com a Profile em questão.
Observação: Os acessos são criados automaticamente quando os usuários são criados através de hooks da BaaS API.
Updated over 1 year ago