Início Profile Projeto
Avatar de

Fabio Ingenito

CSharp_UsuarioAPI

  • ASP.NET C# EntityFramework Identity

.NET 7 e Identity: Implementando Controle de Usuário

🪧 Vitrine.Dev
Nome CSharp_UsuarioAPI
🏷️ Tecnologias ASP.NET C# EntityFramework Identity

Detalhes do projeto

Fiz algumas alterações em cima do curso original da Alura:

Curso de .NET 6 e Identity: implementando controle de usuário

https://cursos.alura.com.br/course/dot-net-6-identity-controle-usuario

  • Atualizei o framework para versão 7 e todos os drives.
  • Coloquei alguns comentários do curso.
  • Alterei algum código para novas versões como, por exemplo, o namespace como ponto-e-vírgula no final

1 * PARA FAZER FUNCIONAR

É preciso configurar o Banco de Dados (Usuário e Senha) dentro do projeto com a SUA "Connection String" (string de conexão) do seu Banco de Dados. As "ConnectionsStrings" estão no arquivo "appsettings.json":

O curso usa somente o MySQL, mas tenho certeza que é possível configurar para outros BD.

O proprio programa se encaregará de criar a base de dados e a tabela usando Entity Framework.

Guardei um arquivo "UsuariosAPI.sql" na pasta "SQL" para o MySQL.

No "Gerenciador de Soluções" clique com o botão direito do mouse em cima do nome do projeto: "UsuariosAPI", na lista aparecerá a opção: "Gerenciar Segredos do Usuário". O arquivo "secrets.json" será criado.

Na pasta "JSON" tem o arquivo "secrets.json", mas ele NÃO fica nesta pasta, este arquivo fica em: C:\Users\SEU_USUARIO\AppData\Roaming\Microsoft\UserSecrets\CHAVE_UUID\secrets.json


2 * Emuladores

Eu testei três softwares para emular, a saber:

  • SoupUI;
  • Postman;
  • Swagger;

Mas se você conhecer algum outro programa legal, tenho certeza que vai funcionar. Abaixo descrevo cada um.


3 * SoupUI (https://www.soapui.org/)

Salvei as configurações do SoapUI na PASTA "SoapUI", basta carregar. Este foi o primeiro programa que usei quando estudei sobre SOAP. Se NÃO engano ele NÃO tinha REST e foi incorporado depois.


4 * Postman (https://www.postman.com/postman/)

Na MINHA opinião o programa mais fácil de trabalhar, mas tem menos recursos que o SoapUI. Não achei um lugar para salvar as configurações.

  • Crie o POST e o GET usando os caminhos:

http://localhost:5119/ https://localhost:7267/

  • Exemplo de JSON do "Body" para cadastro:
  • Use método "GET" e dentro do Body escolha a opção "raw" e o tipo do arquivo "JSON"

https://localhost:7267/usuario/cadastro { "UserName": "paulo", "DataNascimento": "2018-01-01", "Password": "Senha123@", "RePassword": "Senha123@" }

  • Exemplo de JSON para login:
  • Use método "POST" e dentro do Body escolha a opção "raw" e o tipo do arquivo "JSON"

http://localhost:5119/usuario/login { "Username": "david", "Password": "Senha123@" }

  • Depois do Login de autorização vem a autenticação. Copie a chave de autenticação JWT (JSON Web Tokens) e coloque em:
  • AUTHORIZATION - TYPE: Beared Token
  • O JSON do "Body" é o mesmo do cadastro:
  • Use método "GET" e dentro do Body escolha a opção "raw" e o tipo do arquivo "JSON"

https://localhost:7267/Acesso { "UserName": "paulo", "DataNascimento": "2018-01-01", "Password": "Senha123@", "RePassword": "Senha123@" }

  • Se você quiser ver o conteúdo da chave JWT, use o link: https://jwt.io/

5 * Swagger (https://editor.swagger.io/)

Se você criar um projeto MÍNIMO ele NÃO traz o pacote Swagger. De outras formas, o pacote Swagger já vem junto como auxiliar.

Caso você NÃO queira trabalhar com o Swagger, recomendo dentro da pasta "Properties" no arquivo "launchSettings.json", colocar como "FALSE" (menos a linha "launchUrl") ou comentar (menos os cabeçalhos) as seguintes linhas:

"profiles": { ... "dotnetRunMessages": false, "launchBrowser": false, "launchUrl": "swagger", ... } }, "IIS Express": { "launchBrowser": false, "launchUrl": "swagger", }


6 * MAPPER

Ajuda a mappear os objetos. Veja mais em:

AutoMapper - A convention-based object-object mapper. Um mapeador objeto-objeto baseado em convenção.

https://docs.automapper.org/en/stable/


O AspNet Identity é um framework para o gerenciamento de identidades de usuários e tarefas como por exemplo, verificar:

  • Senhas;
  • Nomes de usuários;
  • Data de Nascimento;

Gerencia contas de usuários construindo uma autenticação.

O Identity é um framework ASP.NET para o gerenciamento de identidades. Ele NÃO é um framework de segurança!

DETALHE, o "secrets":

  • NÃO embaralha os caracteres do código para evitar engenharia reversa.
  • NÃO Criptografa senhas da aplicação.
  • SOMENTE Armazenar informações confidenciais durante o desenvolvimento de um projeto.

Os usuários serão guardados no Identity.

.Core -> Pacotes completos. .EntityFramework -> Framework com Interface.

POWERSHELL: ..\UsuariosAPI\UsuariosAPI dotnet user-secrets init

Incializou e colocou comandos dentro do: UsuariosAPI: "UserSecretsId" dotnet user-secrets set "SymmetricSecurityKey" "this is my custom Secret key for authentication"

E colocou na pasta: C:\Users\SEU_USUARIO\AppData\Roaming\Microsoft\UserSecrets

Para guardar o caminho da conexão ao banco de dados: dotnet user-secrets set "ConnectionStrings:UsuarioConnection" "server=localhost;port=3306;database=usuariodb;user=root;password=teste" Por meio deste comando, criaremos um secret com determinada chave e valor informados: Padrão: dotnet user-secrets set O nome do arquivo é: "secrets.json"


LINKS:


Armazenamento seguro de segredos do aplicativo em desenvolvimento no ASP.NET Core Safe storage of app secrets in development in ASP.NET Core Article - 04/10/2023

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-7.0&tabs=windows https://learn.microsoft.com/pt-br/aspnet/core/security/app-secrets?view=aspnetcore-7.0&tabs=windows


Os JSON Web Tokens são um método RFC 7519 padrão do setor aberto para representar declarações com segurança entre duas partes. JWT. IO permite decodificar, verificar e gerar JWT.

https://jwt.io/