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.

ChaveDescriçãooTipo
ConnectionStrings/coreString de conexão com o banco de dadosString
AuthorizationTokenExpirationTimeTempo de expiração dos tokens de autorização em segundosInt
AuthorizationTokenValidateAttemptsQuantidade de tentativas válidas de uso do token de autorização por usuário;Int
JwtSecretSecret dos tokens de comunicação internaString
JwtExpirationTimeTempo de expiração dos tokens de comunicação interna em minutosInt
AesKeyChave de criptografia de variáveis de uso internoString (16 caracteres)
AesIVInicializador de criptografia de variáveis de uso internoString (32 caracteres)
ApplicationTokenExpirationTimeTempo de expiração dos tokens de aplicação em segundosInt
ApplicationAesKeyChave de criptografia dos tokens de aplicaçãoString (16 caracteres)
ApplicationAesIVInicializador de criptografia dos tokens de aplicaçãoString (32 caracteres)
LoginAttemptsQuantidade de tentativas válidas de login antes do bloqueio do usuárioInt
UrlAddressApiRota para a API de consulta de endereçosString
UserDefaultId do usuário de sistema; InteiroInt
LogPathPath para o armazenamento dos logs de exceções que não puderam ser persistidasString
GenerateTokenFileBooleano que indica o registro de tokens estaticos para testes automatizadosBool
TokenFilePathPath dos tokens estaticos para testes automatizadosString
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.