Programação Web 2024/25 - Aulas Teóricas - PDF

Summary

Este documento fornece um resumo das aulas teóricas sobre programação web, cobrindo tópicos como conceitos de programação em C#, criação de websites com .NET Core 8, e fundamentos de segurança.

Full Transcript

Resumo Detalhado das Aulas Teóricas de "Programação Web" para o Ano Letivo de 2024/25 Visão Geral do Programa As aulas teóricas de "Programação Web" no ano letivo de 2024/25 abrangem uma vasta gama de tópicos relacionados ao desenvolvimento web utilizando C# e tecnologias.NET. O programa está dividi...

Resumo Detalhado das Aulas Teóricas de "Programação Web" para o Ano Letivo de 2024/25 Visão Geral do Programa As aulas teóricas de "Programação Web" no ano letivo de 2024/25 abrangem uma vasta gama de tópicos relacionados ao desenvolvimento web utilizando C# e tecnologias.NET. O programa está dividido em várias áreas principais: 1. Conceitos de Programação em C# 12 Conceitos Básicos Conceitos Avançados 2. Construção de Websites em.NET Core 8 Introdução ao.NET Core 8 Estrutura de uma Aplicação.NET Core 8 Blazor e Modelos de Hospedagem Blazor no.NET Core 8 –.NET Core 8 Blazor Server –.NET Core 8 Blazor WebAssembly –.NET Core 8 Blazor Hybrid.NET 8 MAUI.NET 8 Razor Class Library.NET 8 Fluent UI Arquiteturas para Desenvolvimento Web API, Minimal API e Microservices Docker no.NET Core 8 SignalR Azure Service Bus Cloud Azure 3. Manipulação de Dados em.NET Core 8.NET Core 8 Entity Framework Migrations Utilização de LINQ 4. Segurança em.NET Core 8 Segurança em Websites Validação de Utilizadores.NET Core 8 Identity Framework Conceitos Principais em C# 12 História e Desenvolvimento: – Desenvolvida pela Microsoft, baseada em C (uma mistura de C++ e Java). – Orientada a objetos e a principal linguagem para o framework.NET. 1 – Criada por Anders Hejlsberg, introduzida com C# 1.0 e VS2002, atualmente na versão C# 12.0 com VS2022 (ASP.NET Core 8). Características: – Alto nível de abstração. – Versátil e poderosa, utilizada para aplicações desktop, web, móveis e na nuvem. – Tipagem forte, orientada a componentes e excelente interoperabili- dade. – Suporta programação assíncrona com async e await. – Rico suporte de bibliotecas do.NET Framework e.NET Core. Porquê Usar C#?: – Versátil e poderosa. – Programação orientada a objetos. – Ecossistema e bibliotecas ricos. – Desenvolvimento multiplataforma com.NET Core. – Comunidade forte e suporte. – Recursos de linguagem moderna. – Integração com produtos Microsoft. – Alto desempenho. – Recursos de segurança. – Oportunidades de carreira. – Desenvolvimento de jogos com Unity. – Escalabilidade e manutenção. Futuro do C#: – Evolução e inovação contínuas. – Capacidades multiplataforma melhoradas. – Foco na cloud e desenvolvimento web. – Integração com IA e aprendizagem automática. – IoT e Edge Computing. – Desenvolvimento de jogos e XR. – Melhorias de desempenho. – Ferramentas melhoradas para desenvolvedores. – Comunidade e ecossistema fortes. – Oportunidades educativas e de carreira. Conceitos Básicos em C# Assembly: – Uma biblioteca de código compilado utilizada por aplicações.NET para implementação, versionamento e segurança. – Tipos: Private Assembly (utilizado por uma única aplicação) e Shared Assembly (utilizado por múltiplas aplicações). 2 – Strong Naming: Fornece uma identidade exclusiva a um assembly. – Global Assembly Cache (GAC): Um cache de código acessível por toda a máquina para assemblies partilhados. Common Type System (CTS): – Define como os tipos são declarados, utilizados e geridos no Common Language Runtime (CLR). – Garante a interoperabilidade entre objetos escritos em diferentes linguagens.NET. Common Language Infrastructure (CLI): – Uma especificação aberta que descreve código executável e um ambi- ente de tempo de execução. – Permite que múltiplas linguagens de alto nível sejam utilizadas em diferentes plataformas. Common Language Runtime (CLR): – O motor de execução para aplicações.NET. – Fornece serviços como gestão de memória, gestão de threads, trata- mento de exceções, recolha de lixo e segurança. Garbage Collector (GC): – Funcionalidade de gestão automática de memória do CLR. – GC.Collect(): Força o garbage collector a executar. Base Class Library (BCL): – Um conjunto básico de classes, interfaces e tipos de valor incluídos no.NET Framework. Framework Class Library (FCL): – Uma coleção abrangente de classes, interfaces e tipos de valor reuti- lizáveis. Microsoft Intermediate Language (MSIL) / Common Intermedi- ate Language (CIL): – Conjunto de instruções independente da CPU convertido em código nativo. Portable Executable (PE): – Formato de ficheiro para executáveis, código de objeto e DLLs no Windows. Just-In-Time (JIT) Compilation: – Converte o código MSIL/CIL em código de máquina nativo antes da execução. 3 Características Gerais do C# Extensão de ficheiro:.cs Sensível a maiúsculas e minúsculas. As declarações devem terminar com ponto e vírgula (;). Blocos de código são delimitados por chaves ({}). Comentários: De uma linha (//...) e de múltiplas linhas (). Tipos de Dados em C# Tipos por Valor: – int: Número inteiro de 32 bits com sinal. – bool: Valor booleano (verdadeiro ou falso). – float: Número de ponto flutuante de precisão simples. – double: Número de ponto flutuante de precisão dupla. – char: Caractere Unicode único. Tipos por Referência: – string: Sequência de caracteres. – object: Tipo base do qual todos os outros tipos derivam. Operadores em C# Operadores Aritméticos: – +: Adição. – -: Subtração. – *: Multiplicação. – /: Divisão. – %: Módulo (resto da divisão inteira). Este resumo cobre os conceitos essenciais e tópicos das aulas teóricas de "Pro- gramação Web" no ano letivo de 2024/25, fornecendo uma visão abrangente do C# e das tecnologias.NET. 4 Claro! Aqui está um resumo detalhado dos tópicos abordados no documento PDF sobre conceitos avançados de programação em C#: Top Level Statements em C# Introdução: A partir da versão 9 do C#, foram introduzidas as "Top Level Statements", que permitem escrever código de forma mais simples e concisa, sem a necessidade de um esqueleto de código (scaffolding) como em Java, C++ e versões anteriores do C#. Exemplo Tradicional: Em versões anteriores, era necessário criar uma classe Program com um método Main para executar o código. using System; namespace TesteConsoleCore { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } Exemplo com Top Level Statements: Com as novas instruções, o código pode ser simplificado para: using System; Console.WriteLine("Hello World!"); Ou ainda mais simples: System.Console.WriteLine("Hello World!"); Compatibilidade: As Top Level Statements são compatíveis com o.NET Core 3.1 e superiores. Em versões anteriores, o código não compilará. Strings em C# Definição: Uma string é uma coleção sequencial de caracteres usada para representar texto. No.NET, o texto é representado como uma sequência de unidades de código UTF-16. Interpolação de Strings: Introduzida no C# 6.0, permite a inserção de valores de variáveis diretamente dentro de strings. Para usarmos a interpolação de strings, é necessário preceder a string do caractere $ – Antes: 1 – var aluno = new Aluno(); var mensagem = string.Format("{0} é o curso do aluno {1}", aluno.Curso, aluno.Nome); – Depois: – var aluno = new Aluno(); var mensagem = $"{aluno.Curso} é o curso do aluno {aluno.Nome}"; Caractere de Escape @: Permite a construção de strings sem a necessi- dade de sequências de escape. – Antes: – string myFileName = "C:\\myfolder\\myfile.txt"; – Depois: – string myFileName = @"C:\myfolder\myfile.txt"; Conversão de Strings: – Para Arrays de Bytes: Utiliza-se o método GetBytes da classe Unicode ou UTF8 do namespace System.Text.Encoding. – string mensagem = "Programação Web com C# e ASP.Net Core"; byte[] conteúdo = System.Text.Encoding.Unicode.GetBytes(mensagem); – Para Strings: Utiliza-se o método GetString. – string strfinal = Encoding.Unicode.GetString(strconvertida, 0, strconvertida.Length); Partição de Strings: Utiliza-se o método Split da classe String para di- vidir uma string em um array de strings com base em delimitadores.Exemplo de separação entre cada UC é feita apenas por vírgulas string unidadesCurriculares = "Programação Web, Ética e Deontologia, Projeto ou Estágio, Introdução às Bases de Dados"; string[] lista = unidadesCurriculares.Split(", "); Verificação de Strings Nulas ou Vazias: Utiliza-se o método IsNullOrEmpty da classe String. string nome = string.Empty; if (string.IsNullOrEmpty(nome)) { Console.WriteLine("variável nome está vazia ou contém null"); } Formatação de Strings: Além da interpolação, pode-se usar o método Format da classe String e o método ToString da classe base Object. 2 – Data e Hora(Caso esteja a usar o C# 10 ou superior basta colocar só o seguinte:): – DateTime agora = DateTime.Now; Console.WriteLine($"Hoje é dia {agora:d} e são {agora:t}"); – Valores Monetários: – decimal gasolina = 1.634m; string precoGasolina = String.Format("{0:C}", gasolina); Console.WriteLine(precoGasolina); – Baseado numa “máscara”: – string mascara = "0000-000"; int codigopostal = 3030190; Console.WriteLine("O Código Postal da Morada do ISEC é: " + codigopostal.ToString(mascara) Validações em C# Expressões Regulares: Utilizadas para validar dados com base em padrões pré-definidos. A classe Regex do namespace System.Text.RegularExpressions é usada para operações com expressões regulares. – Exemplo de Validação de Código Postal: – string formato = @"ˆ\d{4}\-\d{3}$"; string strCodigoPostal = string.Empty; Regex regex = new Regex(formato); while (true) { Console.Write("Código Postal: "); strCodigoPostal = Console.ReadLine().Trim(); if (strCodigoPostal.ToUpper() == "FIM") break; string resultado = regex.IsMatch(strCodigoPostal) ? "válido" : "inválido"; Console.WriteLine($"{strCodigoPostal} é um formato de Código Postal {resultado}"); } Validação do NIF: Combina expressões regulares com algoritmos de verificação de dígitos. – Algoritmo de Validação do NIF (Versão 2019): – public static bool Nif(string nifNumber) { int tamanhoNumero = 9; // Tamanho do número NIF string filteredNumber = Regex.Match(nifNumber, @"\d+").Value; // extrair número if (filteredNumber.Length != tamanhoNumero || int.Parse(filteredNumber.ToString( == 0) return false; // Verificar tamanho e zero no início int calculoCheckSum = 0; 3 for (int i = 0; i < tamanhoNumero - 1; i++) { calculoCheckSum += (int.Parse(filteredNumber[i].ToString())) * (tamanhoNumero - i); } int digitoVerificacao = 11 - (calculoCheckSum % 11); if (digitoVerificacao > 9) digitoVerificacao = 0; return digitoVerificacao == int.Parse(filteredNumber[tamanhoNumero - 1].ToString()); } Operadores em C# Operador Condicional Nulo ?: Permite verificar se uma variável é nula e atribuir um valor default. Console.WriteLine($"{aluno?.Nome}\n{aluno?.Curso} -{aluno?.Idade}\n{aluno?.Endereco?.Ru - {aluno?.Endereco?.CodigoPostal} - {aluno?.Endereco?.Pais}\nMail: {aluno?.Mail}"); Operador de Coalescência Nula ??: Retorna o operando esquerdo se não for nulo; caso contrário, retorna o operando direito. Permite-nos verificar se há um valor nulo numa variável, campo ou propriedade e caso exista atribuir um valor default. string nome = aluno?.Nome ?? "O nome do aluno não foi indicado!"; Operador Null Forgiving !: Utilizado para suprimir avisos de nulidade. string Nome = null; // é emitido um warning -> cor verde string Nome! = null; // NÃO é emitido nenhum warning Operador Ternário ?: Utilizado para operações condicionais.retorna um de dois valores dependendo do valor de uma expressão booleana, cuja sintaxe é: condição ? primeira_expressão : segunda_expressão; string classificação = (idade >= 18) ? “Adulto” : “Menor”; Operador is e is not: Utilizados para verificar o tipo de um objeto.: if (valor is not null) { //Código a executar } (!(valor is not string)) { //Código a executar } 4 Sobrecarga de Operadores em C# Introdução: A sobrecarga de operadores permite definir o comportamento de operadores para tipos de dados definidos pelo usuário. Isso pode tornar o código mais legível e intuitivo, permitindo que objetos sejam manipulados de maneira semelhante a tipos primitivos. Operadores Sobrecarregáveis: Em C#, os seguintes operadores podem ser sobrecarregados: – Operadores unários: +, -, !, ~, ++, --, true, false – Operadores binários: +, -, *, /, %, &, |, ˆ, – Operadores de comparação: ==, !=, , = Exemplo de Sobrecarga de Operadores: – Sobrecarga do Operador +: – public class Ponto { public int X { get; set; } public int Y { get; set; } public Ponto(int x, int y) { X = x; Y = y; } // Sobrecarga do operador + public static Ponto operator +(Ponto p1, Ponto p2) { return new Ponto(p1.X + p2.X, p1.Y + p2.Y); } } class Program { static void Main(string[] args) { Ponto p1 = new Ponto(3, 4); Ponto p2 = new Ponto(1, 2); Ponto p3 = p1 + p2; // Usando o operador sobrecarregado Console.WriteLine($"Ponto resultante: ({p3.X}, {p3.Y})"); } } Sobrecarga do Operador == e !=: public class Pessoa { public string Nome { get; set; } 5 public int Idade { get; set; } public Pessoa(string nome, int idade) { Nome = nome; Idade = idade; } // Sobrecarga do operador == public static bool operator ==(Pessoa p1, Pessoa p2) { if (ReferenceEquals(p1, p2)) return true; if ((object)p1 == null || (object)p2 == null) return false; return p1.Nome == p2.Nome && p1.Idade == p2.Idade; } // Sobrecarga do operador != public static bool operator !=(Pessoa p1, Pessoa p2) { return !(p1 == p2); } // Sobrescrita do método Equals public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) return false; Pessoa p = (Pessoa)obj; return (Nome == p.Nome) && (Idade == p.Idade); } // Sobrescrita do método GetHashCode public override int GetHashCode() { return Nome.GetHashCode() ˆ Idade.GetHashCode(); } } class Program { static void Main(string[] args) { Pessoa p1 = new Pessoa("João", 30); Pessoa p2 = new Pessoa("João", 30); 6 Console.WriteLine(p1 == p2); // True } } Atalhos e Comentários Especiais Comentários Especiais: O Visual Studio reconhece comentários especiais como TODO, HACK, etc., que são usados para marcar trechos de código que precisam de atenção. // TODO: Acabar a implementação da Class Aluno Lista de Tarefas: A opção "Task List" no Visual Studio permite navegar rapidamente para os comentários especiais. 7 Code Snippets para o C# no Visual Studio Definição: Code Snippets são trechos de código pré-definidos que facilitam a inserção de código no Visual Studio. Características: – Similar ao IntelliSense. – Podem ser inseridos via atalhos de teclado (Ctrl + K, X), menu (Edit > IntelliSense > Insert Snippet) ou digitando o atalho e pressionando Tab. Atalhos de Code Snippets para o C# no Visual Studio Atalhos: – do: Cria um ciclo do-while. – else: Cria um bloco else. – for: Cria um ciclo for. – foreach: Cria um ciclo foreach. – forr: Cria um ciclo for que decrementa a variável. – if: Cria um bloco if. – switch: Cria um bloco switch. – while: Cria um ciclo while. Estrutura Switch no C# Histórico: – Até a versão 6 do C#, a estrutura switch tinha limitações. – A partir da versão 7, o switch passou a suportar pattern matching, tornando o código mais conciso e legível. Exemplos: – Exemplo 1: Identificação de caracteres alfabéticos, numéricos e símbolos. – switch (c) { case char l when (c >= 'a' && c ='A' && c = '0' && c = '!' && c = 12 && i curso switch { Curso.Informatica => "Programação de Aplicações Web!", Curso.Civil => "Obras de Stª Engrácia!", Curso.Mecanica => "Carros? Isso é o quê?", Curso.Electrotecnia => "Não lhes peçam para arranjar um televisor!", _ => throw new ArgumentException(message: "Opção de Curso desconhecida!", paramName: nameof(curso)) }; static void Main(string[] args) { Console.WriteLine(Seleccionar(Curso.Informatica)); Console.WriteLine(Seleccionar(Curso.Civil)); Console.WriteLine(Seleccionar(Curso.Mecanica)); Console.WriteLine(Seleccionar(Curso.Electrotecnia)); } } } Instruções Switch usando Expressões Switch Diferenças: – Instruções switch não são o mesmo que expressões switch. – Expressões switch permitem uma maior comparação e utilizam o operador Lambda. 2 Tipos e Membros no C# Sintaxe Simplificada em Tipos Anuláveis(É recomendável usar a forma curta ): – Forma formal: Nullable variável = null; – Forma curta: T? variável = null; Coleções em C# Tipos de Coleções: – Non-generic collections: Trabalham com System.Object e são fracamente tipados (ex.: ArrayList, Hashtable). – Generic collections: Mais seguras, requerem especificação do tipo (ex.: List, Dictionary). Namespaces: – System.Collections, System.Collections.Specialized, System.Collections.ObjectModel, System.Collections.Concurrent (non-generic). – System.Collections.Generic (generic). Inicialização de Coleções: – Inicialização com valores específicos. – var temp = new List(); temp.Add("Blabla"); temp.Add("Blibli"); var stringList = temp; – Inicialização para tipos que permitem vários parâmetros no método. – var temp = new Dictionary(); temp.Add(1, "One"); temp.Add(2, "Two"); var numberDictionarynumberDictionary = temp; – Exemplos de inicialização de List, Dictionary e outras coleções. Collection Initializers: – Para que uma classe suporte a inicialização do estilo de uma coleção, deve implementar a interface IEnumerable e ter um método Add. – var col = new MinhaColecao { "Programacao", { "PW", 5 }, "Web" 3 }; foreach (var mCol in col) Console.WriteLine("{0}", mCol); – PropList é uma propriedade do tipo collection – class MinhaClass { public IList PropList { get; set; } } MinhaClass col = new MinhaClass { PropList = new List { "PW", "C#" } }; foreach (var mCol in col.PropList) Console.WriteLine("{0}", mCol); – Exemplos de uso de collection initializers com classes personalizadas. 4 Delegates em C# - Introdução Definição: Delegates são tipos que permitem fazer referência a métodos, sendo usados para eventos e callbacks. Uso: Permitem passar métodos como argumentos a outros métodos. Características: São tipos de referência que podem encapsular métodos com ou sem nome, proporcionando flexibilidade e extensibilidade. Delegates em C# Declaração: Semelhante à assinatura de um método, com a keyword delegate. Exemplo: public delegate void exemplo(int valor); Derivação: Todos os delegates derivam da classe System.Delegate. Uso de Delegates Atribuição: O método atribuído a um delegate deve ter o mesmo tipo de retorno e parâmetros. Passos: Declarar, instanciar e invocar. public static void NomeMetodo(string msg) { Console.WriteLine(msg); } public delegate void Declarar(string msg); // Declarar Declarar xpto=NomeMetodo; // Instanciar xpto("mensagem"); // Invocar Delegates e Ponteiros de Função Semelhança: Delegates em C# são semelhantes a ponteiros de função em C e C++, mas são ponteiros seguros. Encapsulamento: Permitem encapsular a referência a um método dentro de um objeto de delegação. Métodos Anônimos Conceito: Permitem escrever métodos inline no código sem declarar um método formal com nome. Exemplo Simples de Delegates Métodos: ConverteMaiusculas e ConverteMinusculas. static public string ConverteMaiusculas(string txt) { return "Maiuscula = “ + txt.ToUpper(); } 1 static public string ConverteMinusculas(string txt) { return "Minuscula = " + txt.ToLower(); } Uso: Declaração do delegate MetodoDel, atribuição dos métodos e invo- cação. Delegates Genéricos Tipos: Func, Action, Predicate. Func: Tem zero ou mais parâmetros de entrada e um parâmetro de saída.O último parâmetro é considerado o parâmetro de saída Func soma = Soma; Action: Não devolve resultado, semelhante a métodos void. Action imp = ImprimeConsola; Predicate: Representa um método que verifica critérios e retorna um booleano. Predicate estaMai = EstaMaiuscula; Delegates Encadeados Multicast Delegates: Permitem guardar a referência para mais de um método. Operador +=: Usado para adicionar referências. Execução: Os métodos são executados pela ordem que foram adicionados. Expressões Lambda Operador Lambda (=>): Separa variáveis de entrada do corpo da expressão. Características: Semelhantes a métodos anônimos, mas mais flexíveis e concisos. Exemplos: Com argumentos, sem argumentos, com vários argumentos. Com argumentos x =>... Sem argumentos () =>... Com vários argumentos (x,y) =>... Uso de Expressões Lambda Passar como Parâmetro: Exemplos com FindAll em listas. Exemplos Simples: CalculaDobro, Soma, Conversão para maiúsculas. 2 Func vs Action vs Predicate com Lambda Func: Retorna um valor. Action: Não retorna valor. Predicate: Retorna um booleano. Extension Methods Definição: Permitem adicionar métodos a uma classe existente sem alterar seu código fonte. Uso: Útil quando não é possível alterar o código fonte de um tipo. Exemplo: Adicionar um método AddPW à classe String. Tipo Nullable Definição: Tipos que podem ser null, mesmo sendo tipos de valor. Exemplo: int? variavelInt = null; Exemplos Práticos Delegates: Exemplos de uso com métodos anônimos e expressões lambda. Extension Methods: Exemplos de adição de métodos a tipos existentes. Tipo Nullable: Exemplos de uso de tipos que podem ser null. 3 Introdução ao.NET Core 8 Aplicações Web Conteúdo Estático: Não pode ser atualizado ou alterado sem modificar o código-fonte. Conteúdo Dinâmico: Pode ser alterado ou atualizado sem modificar o código-fonte. Existem duas perspectivas de dinamismo: alteração de características dos elementos HTML e alteração do conteúdo das páginas. Arquitetura Clássica Típica Cliente: User Desktop PC com navegadores como Firefox, Chrome, Edge. Servidor: Ambiente dinâmico com páginas estáticas e dinâmicas, conec- tado a um banco de dados via DB Connector. Servidores Web: Microsoft IIS, Apache HTTPD, Tomcat. Banco de Dados: IJDBC, CDBC, SDD, Server, Oracle, MySQL, Pen- toseSQL. ASP.NET Core 8 Framework: Desenvolvimento de aplicações web baseadas na cloud usando MVC, Razor Pages e Blazor. Linguagens: C#, F#, VB.NET (parcialmente), com preferência por C#. Versões: Sucessor da tecnologia ASP e ASP.NET MVC. Modelos de Desenvolvimento: Web Pages, MVC (Model-View- Controller). Blazor Histórico: Criado em 2017 por Steve Sanderson, adicionado ao repositório ASP.NET GitHub. Variantes: Blazor Server, Blazor WebAssembly, Blazor MAUI. Funcionalidades: Permite usar C# e.NET para escrever o front-end, executar código C# no navegador, desenvolver aplicações nativas para diferentes plataformas. ASP.NET Web API Framework: Desenvolvimento de serviços HTTP e API REST. REST: Transferência de Estado Representacional, princípios para criar interfaces bem definidas. Novidades no C# 12 e.NET Core 8 Construtores Primários: Simplificam a declaração de construtores de classes. Expressões de Coleção: Alternativa para inicializar coleções. 1 Parâmetros Lambda Padrão: Permitem adicionar valor padrão para parâmetros em expressões lambda. Alias de Tipo: Simplificam declarações de tipos de coleção. Atributo Experimental: Marcador para recursos experimentais ou arriscados. Inline Arrays: Melhoram o desempenho em cenários específicos. 2.3.1.NET Core 8 Blazor Server Funcionamento: Lógica no Servidor: A lógica da aplicação é executada no servidor. SignalR: Utiliza uma conexão SignalR para fornecer atualizações da interface do utilizador em tempo real. Processo de Acesso: Quando o utilizador acessa a aplicação, recebe a UI inicial enquanto a lógica do back-end permanece no servidor. Benefícios: Carregamento Rápido: Apenas uma pequena quantidade de dados é necessária, resultando em tempos de carregamento rápidos. Segurança: A lógica da aplicação não é exposta ao cliente. Acesso a Recursos: Acesso total às APIs.NET e recursos do lado do servidor, como bancos de dados e sistema de ficheiros. Desvantagens: Latência de Rede: Pode ocorrer se o servidor estiver lento. Escalabilidade: Problemas com aplicações de alto tráfego devido à necessidade de lidar com múltiplas conexões SignalR. Dependência do Servidor: A aplicação não funciona se não estiver conectada ao servidor. 2.3.2.NET Core 8 Blazor WebAssembly Funcionamento: Execução no Navegador: Executado inteiramente no navegador usando WebAssembly (Wasm). Compilação Ahead of Time (AOT): Permite compilar o código.NET diretamente para WebAssembly. Processo de Acesso: O servidor envia ficheiros estáticos, incluindo o run- time do WebAssembly e os assemblies.NET. O runtime do WebAssembly no navegador carrega e executa os assemblies.NET. Benefícios: Suporte Offline: Após o carregamento inicial, a aplicação pode funcionar offline. Reutilização de Código: Aproveita o ecossistema.NET, permitindo a reutilização de código. Compatibilidade: Funciona em qualquer navegador que suporte We- bAssembly sem necessidade de plugins. 2 Desvantagens: Tempo de Download Inicial: Grande, pois todos os assemblies e o runtime do.NET precisam ser descarregados para o navegador. Acesso Limitado a APIs: Restrito às APIs disponíveis no WebAssembly e no navegador. 2.3.3.NET Core 8 Blazor Hybrid Funcionamento: Abordagem Híbrida: Combina os benefícios do Blazor Server e Blazor WebAssembly. Processo de Acesso: A página inicial pré-renderizada é servida pelo servidor enquanto o runtime do Blazor WebAssembly é descarregado em segundo plano. A renderização WebAssembly inicializa e assume o controle da renderização, fazendo a transição da aplicação para execução no lado do cliente. Benefícios: Carregamento Inicial Rápido: A página inicial é pré-renderizada pelo servidor. SEO: A pré-renderização no servidor garante que os motores de pesquisa podem indexar o conteúdo da aplicação. Redução de Interação com o Servidor: Após a inicialização do We- bAssembly, a aplicação pode executar interações no navegador, reduzindo a necessidade de comunicação com o servidor. Desvantagens: Complexidade: Aumenta a complexidade de gerir tanto o lado do servidor quanto o lado do cliente. Tamanho de Download: Grande, pois o runtime do.NET e os assemblies são descarregados para o navegador. Segurança: Necessidade de garantir a segurança tanto para aplicações do lado do cliente quanto do lado do servidor. Escolha do Modelo de Alojamento A escolha entre Blazor Server, Blazor WebAssembly e Blazor Hybrid depende de vários fatores, incluindo requisitos da aplicação, necessidades do utilizador final e capacidades de desenvolvimento. 1. Blazor Server: Melhor para: Aplicações com lógica pesada no lado do servidor. Cenários: SEO e tempo de carregamento inicial são críticos, conec- tividade de rede consistente (como aplicações empresariais internas). 2. Blazor WebAssembly: Melhor para: Aplicações orientadas para o cliente. 3 Cenários: Foco na experiência do utilizador e capacidade de resposta, aplicações que requerem conectividade offline. 3. Blazor Hybrid: Melhor para: Aplicações que exigem equilíbrio entre desempenho, escalabilidade e experiência do utilizador. Cenários: SEO e tempo de carregamento inicial são críticos, necessi- dade de capacidade de resposta e suporte offline..NET MAUI.NET MAUI é uma estrutura de UI multiplataforma para construir aplicações nativas para iOS, Android, Windows, macOS, Tizen e watchOS utilizando uma única base de código. É uma evolução do Xamarin.Forms, que foi descontinuado. Vantagens: Suporte a Mais Plataformas: Inclui suporte para macOS, Tizen e watchOS. Arquitetura Flexível: Permite a criação de controles e layouts personal- izados com mais facilidade. Melhorias de Desempenho: Utiliza o.NET a partir da versão 6, com melhorias no tempo de execução e no garbage collector. Ferramentas: Novo Sistema de Projetos: Simplifica o processo de criação e gestão de projetos. Editor Visual: Para criar layouts de UI. Razor Class Library As Razor Class Libraries são um recurso que permite encapsular componentes Razor, Razor Pages, Views e Controllers em uma biblioteca, contribuindo para um maior reaproveitamento de código em projetos web baseados no ASP.NET Core. Uso Conjunto: Com Blazor Web e Blazor MAUI, permite construir aplicações híbridas que rodam em browsers ou dispositivos nativos. Desenvolvimento Híbrido com Blazor Web, Blazor MAUI e Blazor RCL Benefícios: Base de Código Única: Reduz tempo e esforço de desenvolvimento. Controles Nativos: Acesso a recursos nativos para aparência de aplicação nativa. 4 Personalização Específica: Adaptação da UI/UX para diferentes dis- positivos e plataformas. UI Adaptável: Suporte a design adaptável baseado em tamanho de tela, orientação e diretrizes específicas da plataforma. 5 2.6. Arquiteturas para Desenvolvimento Web 1. Three N-Tier Architecture A arquitetura em camadas no.NET é uti- lizada para dividir aplicações complexas em partes mais pequenas e gerenciáveis. Cada camada foca em um aspecto específico: Presentation Layer: Responsável por apresentar informações ao usuário e processar inputs. Inclui componentes como interfaces de usuário, páginas web e terminais API. Business Logic Layer: Contém as principais funcionalidades e regras da aplicação, implementando processos de negócio, fluxos de trabalho, validações e cálculos. Data Access Layer: Trata das interações com o armazenamento de dados, como bancos de dados ou serviços externos, incluindo componentes para consultar, inserir, atualizar e eliminar dados. 2. Clean Architecture A Arquitetura Limpa é um padrão de design que prioriza a separação de interesses, facilitando a manutenção, teste e evolução de uma aplicação. Seu objetivo é criar uma estrutura que facilite a gestão e manutenção à medida que a aplicação cresce, permitindo a adição de novas funcionalidades sem afetar o resto da aplicação. 2.7. Micro-Frontends e Micro Serviços Os Micro-Frontends surgiram como uma solução para dividir o front-end de uma aplicação web em partes mais pequenas e gerenciáveis, similar aos microservices no back-end. Eles permitem que cada parte da interface do usuário seja desenvolvida e mantida separadamente, facilitando lançamentos mais rápidos, melhor escalabilidade e desempenho. Micro Frontend vs. Microservices: Microservices lidam com funcional- idades de backend, enquanto Micro Frontends gerem a UI e a interação do usuário. Objetivos Comuns: Acoplamento fraco, autonomia, escalabilidade. Quando Utilizar: Adequado para aplicações grandes e complexas, várias equipes, implementações independentes, diferentes pilhas de tecnologia, escalabilidade, modernização de legados e melhorias de desempenho. 4. Requisitos Principais para a Arquitetura Micro Frontend 1. Desenvolvimento Desacoplado: Cada micro frontend pode ser desen- volvido, implementado e mantido de forma independente. 2. Controle de Versão e Gestão de Dependências: Cada módulo é versionado e mantido de forma independente, garantindo estabilidade, consistência e flexibilidade. 5. Porque Utilizar Micro-Frontends? 1 Escalabilidade: Diferentes equipes podem trabalhar em partes da apli- cação simultaneamente. Capacidade de Manutenção: Bases de código menores são mais fáceis de gerir e atualizar. Agnóstico em Tecnologia: Equipas podem escolher a pilha tecnológica mais adequada. Independência de Implementação: Cada micro frontend pode ser implementado de forma independente. 6. Conceitos Básicos e Arquitetura Modularidade e Composição: Cada módulo encapsula sua funcionali- dade e pode ser implantado de forma independente. Padrões e Técnicas: Composição do lado do servidor, composição do lado do cliente, Edge-Side Includes (ESI). 7. Desafios e Considerações Desempenho: Composição de vários fragmentos pode introduzir latência. Comunicação: Garantir uma comunicação eficaz entre fragmentos. Consistência: Manter uma aparência consistente em todos os fragmentos. Gestão de Versões: Diferentes fragmentos podem ter dependências de versões diferentes. 2.8. API 1. O que é uma Web API? Uma Web API é uma interface que permite a comunicação entre diferentes aplicações de software através da Internet. Facilita a criação de aplicações web e móveis, permitindo a ligação a serviços, recuperação de dados e execução de ações. 2. Tipos de APIs 1. REST: Utiliza métodos HTTP padrão, arquitetura sem estado, recursos identificados por URLs (1. GET: Permite obter um recurso específico (por id) ou uma coleção de recursos. 2.º POST: Cria um novo recurso. 3.º PUT: Atualiza um recurso específico (por id). 4.º DELETE: Remove um recurso específico por id.). 2. SOAP: Protocolo para troca de informação estruturada, depende de XML, suporta operações complexas. 3. GraphQL: Permite aos clientes solicitar exatamente os dados necessários, suporta consultas flexíveis. 4. gRPC: Utiliza HTTP/2 para transporte, suporte streaming bidirecional, elevado desempenho. 2 3. Princípios Básicos de Design de API 1. Consistência: A API deve ser consistente na estrutura, convenções de nomenclatura e tratamento de erros. 2. Statelessness: A API deve ser concebida para não ter estado, simplifi- cando o design do servidor e melhorando a escalabilidade. 3. Design Orientado a Recursos: Tudo na API deve ser considerado como um recurso, com endpoints representando recursos e utilizando métodos HTTP para ações. 4. Utilizar Métodos HTTP Padrão: GET para recuperação, POST para criação, PUT para atualização, DELETE para eliminação. 5. Versionamento: Incluir controle de versão para lidar com atualizações sem perturbar clientes existentes. 6. Autenticação e Autorização: Proteger a API usando métodos como OAuth, JWT, API Keys. 3 Minimal API O que é uma Minimal API? Definição: Minimal APIs são uma abordagem simplificada para criar APIs no ASP.NET Core, focando em eficiência e velocidade. Características: – Não requer scaffolding tradicional. – Permite definir rotas e ações de forma sucinta. – Exemplo prático: – var aplicacao = WebApplication.Create(args); app.MapGet("/", () => "Olá mundo!"); app.Run(); – Simplicidade na definição de rotas complexas: – var construtor = WebApplication.CreateBuilder(args); var app = construtor.Build(); app.MapGet("/alunos/{alunoId}/cursos/{cursoId}", (int alunoId, int cursoId) => $"O ID do aluno é {alunoId} e o ID do curso é {cursoId}"); app.Run(); Mapeamento de Rotas nas Minimal API: MapGet: Mapeia uma rota para um pedido GET. MapPost: Mapeia uma rota para um pedido POST. MapPut: Mapeia uma rota para um pedido PUT. MapPatch: Mapeia uma rota para um pedido PATCH. MapDelete: Mapeia uma rota para um pedido DELETE. MapMethods: Mapeia uma rota para outros métodos HTTP, como CONNECT ou HEAD. Mapeamento de Parâmetros: [FromServices]: Define o parâmetro a partir dos serviços de dependência. [FromRoute]: Define o parâmetro a partir de um segmento de rota. [FromQuery]: Define o parâmetro a partir de um parâmetro da string de consulta. [FromBody]: Define o parâmetro a partir do corpo do pedido HTTP. Injeção de Dependência O que é Injeção de Dependência? Definição: Técnica que dissocia a implementação de um objeto das suas dependências, fornecendo-as externamente. Benefícios: – Facilita a alteração ou troca de dependências sem modificar o código do objeto. – Simplifica o teste de objetos de forma independente. 1 Inversion of Control (IoC) Container: Definição: Estrutura que gerencia a criação e o ciclo de vida dos objetos na aplicação. Configuração: Pode ser configurada no ficheiro Program.cs. Exemplo de Registro de Serviço: builder.Services.AddScoped(); Injeção de Construtor: Definição: Técnica em que as dependências são fornecidas a uma classe através do seu construtor. Benefícios: – Facilita a visualização das dependências de uma classe. – Permite que o contêiner IoC crie e injete as dependências necessárias automaticamente. Exemplo public class UserController : ControllerBase { private readonly IUserService _userService; public UserController(IUserService userService) { _userService = userService; } } Neste exemplo, a classe UserController depende da interface IUserService. A dependência é injetada através do construtor, e o contêiner IoC cria e injeta automaticamente a dependência necessária. Service Lifetime: Singleton: – Cria uma única instância do serviço partilhada por toda a aplicação. – Exemplo: – builder.Services.AddSingleton(); Scoped: – Cria uma instância do serviço por pedido do cliente. – Exemplo: – builder.Services.AddDbContext(opt => opt.UseSqlServer(builder.Configur Transient: – Cria uma nova instância do serviço sempre que solicitado. – Exemplo: 2 – builder.Services.AddTransient(); Como Decidir o Service Lifetime: AddSingleton: Para serviços que não mudam e podem ser reutilizados. AddScoped: Para serviços que mantêm estado durante um pedido HTTP. AddTransient: Para serviços que executam operações leves e sem estado. Benefícios da Injeção de Dependência Manutenção Melhorada: Código mais modular e fácil de compreender. Testabilidade Melhorada: Facilita a simulação de dependências durante os testes. Escalabilidade: Facilita a extensão e integração de novas funcionalidades. Qualidade do Código: Menos bugs e processos de depuração mais fáceis. 3 Resumo Detalhado dos Tópicos do Documento 2.11. SignalR Definição: SignalR é uma biblioteca integrada no framework ASP.NET Core que permite o desenvolvimento de funcionalidades em tempo real. Funcionalidades: – Comunicação em tempo real: Comunicação bidirecional entre servidor e cliente. – Religação automática: volta a ligar-se automaticamente em caso de interrupção. – Múltiplas opções de transporte: escolhe o melhor método de trans- porte (WebSockets, eventos enviados pelo servidor, pesquisa longa). Aplicações: – Chat em tempo real. – Cotações da bolsa. – Jogos em tempo real. – Implementação do Blazor WASM. Benefícios: – Melhora a interatividade e a capacidade de resposta das aplicações web. – Simplifica a comunicação em tempo real. 2.12. Regras de Negócio Definição: Regras de negócio são condições e lógicas que definem ou restringem o processamento de dados dentro de um sistema. Exemplos: – Pedido de empréstimo: Aprovação baseada na Taxa de Esforço do cliente. – Descontos no comércio eletrônico: Aplicação de descontos baseada no valor da compra e no tipo de cliente. Implementação: – Utilização de Design Patterns para facilitar a implementação. – Evita código espaguete e lógica dispersa. 2.14. Pontos Chave da Programação Web com CF 12 e.NET Core 8 1. Diferença entre IEnumerable e ICollection: IEnumerable: Permite iteração, mas não modificação. ICollection: Permite iteração e modificação. 2. Injeção de Dependência no.NET Core: Padrão de design para implementar acoplamento fraco. 1 No. NET Core, o DI está integrado e ajuda a gerir eficientemente as dependências entre classes no Registo de serviços e injeção de con- strutores. 3. Diferença entre os parâmetros ref e out: ref: Parâmetro deve ser inicializado antes de ser passado. out: Parâmetro não necessita de ser inicializado, mas o método deve atribuir um valor. 4. Async e Await: Melhoram o desempenho das aplicações permitindo operações assín- cronas.A utilização das palavras-chave async e await permitem esse tipo de programação 5. Tratamento de Exceções: O tratamento adequado das excepções é crucial para a construção de aplicações robustas Tratamento local e global de exceções. 6. appsettings.json: Armazena valores de configuração como Connections Strings. Acessível usando IConfiguration. 7. Task versus Thread: Thread: Instrução de baixo nível para execução paralela. Task: Abstração de nível superior para operações assíncronas. 8. Middleware no ASP.NET Core: Componentes que processam pedidos e respostas HTTP. 9. Diferença entre Tipos de Valor e Tipos de Referência: Tipos de Valor: Armazenam dados diretamente na pilha. Tipos de Referência: Armazenam referências para dados no heap. 10. Diferença entre classe abstrata e interface: Classe abstrata: Pode conter métodos abstratos e concretos. Interface: Só pode definir assinaturas de métodos. 11. Genéricos em.NET: Permitem criar estruturas ou métodos de dados com segurança de tipo. 12. Métodos de extensão em.NET: Adicionam funcionalidades a tipos existentes sem os modificar. 13. Pacotes NuGet: 2 Gestor de pacotes do.NET para bibliotecas e ferramentas. 14..NET Garbage Collector: Gere a memória automaticamente, libertando memória para objetos não utilizados. 2.15. Novidades Previstas para o C# 13 e.NET 9 1. New Lock Object: Introduz o tipo System.Threading.Lock para exclusão mútua. Código mais limpo e seguro. Melhor desempenho. Novo mecanismo de bloqueio. Limitações assíncronas. 2. Task.WhenEach: Processa tarefas assim que estiverem concluídas. Alternativa mais eficiente ao Task.WaitAny(). 3. params Collections: Parâmetros params podem ser de qualquer tipo com suporte para expressões de coleção. Código mais limpo e melhor desempenho (Chamadas como. ToAr- ray(),. ToList() já adicionam sobrecarga extra de recursos e agora suportam também a passagem de Span e IEnumerable). 4. Propriedades Semiautomáticas: Quando se declara uma propriedade implementada automaticamente em C# public int Number { get; conjunto; } o compilador gera um campo de suporte (por exemplo, _number) e métodos getter/setter internos void set_Number(int number) e int get_Number(). Introduz a palavra-chave field para acessar campos de suporte direta- mente. Código standard reduzido: Elimina a necessidade de definir manual- mente campos de apoio privados. Legibilidade melhorada. Não há necessidade de gerir nomes de campos de suporte personalizados, tornando o uso da palavra-chave field um padrão que melhora a clareza do código. Property-Scoped Field: Este encapsulamento melhoradra a segurança e aborda uma fonte comum de erros. Potential Breaking Change: Se a classe já tiver uma propriedade chamada field do mesmo tipo, esta terá precedência sobre a palavra-chave new field, levando potencialmente a um comportamento inesperado. 3 5. Cache Híbrida: Nova API HybridCache para resolver problemas como o stampede problem. Flexibilidade para armazenar dados em memória ou cache distribuída. Proteção contra o stampede problem. 4 Claro! Aqui está um resumo detalhado dos tópicos abordados no documento "TeoricasPWeb_202425_Cap3_FINAL.pdf": Capítulo 3: Manipulação de Dados em.Net Core 8 3.1. Entity Framework Core 8 Entity Framework (EF): Definição: O Entity Framework (EF) é um ORM (Object-Relational Map- per) que permite aos programadores.NET trabalhar com dados relacionais utilizando objetos específicos do domínio. Objetivo: Abstrair os vínculos com uma base de dados relacional, elim- inando a necessidade de escrever a maior parte do código de acesso a dados. Vantagens da Utilização da Entity Framework: Produtividade: Aumenta a produtividade ao reduzir tarefas redundantes de persistência de dados. Suporte a Diversas Plataformas: Funciona em Windows, Linux e macOS. Suporte a Fontes de Dados: Trabalha com bases de dados relacionais (SQL Server, SQLite, PostgreSQL) e não relacionais. Operações CRUD: Facilita operações de criação, leitura, atualização e eliminação (CRUD). Testes Unitários: Facilita a realização de testes unitários mantendo tabelas em memória. Componentes do Entity Framework: Aplicação: Interface ORM. Entity Framework: Modelo de dados de entidade (EDM) que descreve o mapeamento objeto-relacional. ADO.NET Provider: Realiza consultas e atualizações no armazena- mento de dados. Abordagens de Desenvolvimento: 1. Code First: Cria o modelo e a base de dados a partir de classes. Permite trabalhar de forma orientada a objetos. Etapas: Instalação da Entity Framework, definição do modelo de domínio, criação do contexto, registro do DbContext como serviço, especificação da connection string. 2. Database First: Cria um modelo de entidades a partir de uma base de dados existente. Reduz a quantidade de código necessário. 3. Model First: 1 Cria classes do modelo e suas relações usando um designer ORM, gerando a base de dados física a partir do modelo. Pouco suportada atualmente. Resumo das Abordagens: 1. Code First: Parte das classes do domínio e a EF gera a base de dados. 2. Database First: Parte da base de dados para obter as classes de domínio. Etapas para Utilização da Entity Framework em Code First: 1. Instalação da Entity Framework. 2. Definição do modelo de domínio. 3. Criação do contexto (classe que herda de DbContext). 4. Registro do DbContext no método Services de Programas. 5. Especificação da connection string no arquivo appsettings.json. Exemplo de Definição do Contexto da Base de Dados: using AutoWEB.Models; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace AutoWEB.Data { public class ApplicationDbContext : IdentityDbContext { public DbSet Cursos { get; set; } public DbSet Categorias { get; set; } public DbSet Agendamentos { get; set; } public DbSet TipoDeAula { get; set; } public ApplicationDbContext(DbContextOptions options) : base(options) { } } } Especificação da Connection String: "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=FrutariaWeb;Trusted_Connection } Entity Framework - Database First: Utilizada quando já se dispõe de uma base de dados. O EF cria as classes de dados C# a partir da inspeção da base de dados existente. 2 Comando para gerar as classes: Scaffold-DbContext "MyConnectionStringHere". 3.2. Migrations EF Core Migrations: Conjunto de comandos para criar ou atualizar o esquema da base de dados com base no modelo EF Core. Comandos principais: – add-migration : Cria uma nova migração. – remove-migration: Remove a última migração. – update-database: Atualiza o esquema da base de dados. – script-migration: Gera um script SQL usando todas as migrações. Passos Principais das Migrações: 1. Adicionar as alterações: PM> Add-Migration. 2. Atualizar a base de dados: PM> Update-Database. Mapeamento entre Tipos C# e Tipos SQL: Exemplos: int (C#) -> int (SQL), string (C#) -> nvarchar(Max) (SQL). Data Annotations: Fornecem uma forma de personalizar os modelos EF Core diretamente nas classes de entidades. Exemplos de anotações: [Key], [NotMapped], [Index]. 3.3. LINQ Language Integrated Query (LINQ): Permite a escrita de consultas diretamente na linguagem C# para manipu- lar e consultar dados de diferentes fontes. Vantagens: – Sintaxe unificada para diferentes fontes de dados. – Legibilidade e manutenção facilitadas. – Fortemente tipadoo que significa que obtém verificação em tempo de compilação e suporte para o IntelliSense. – Abordagem declarativa permite descrever o que se pretende fazer com os dados,. Conceitos Básicos de LINQ: 1. Fonte de dados: Coleção ou sequência de dados a ser consultada. 2. Consulta: Operações definidas para obter os dados necessários. 3. Execução: Extração dos dados da fonte com base nas condições da consulta. Sintaxe LINQ: Query Syntax: Semelhante ao SQL. Method Syntax: Mais compacto e utilizado no encadeamento de métodos. Principais Operadores do LINQ: 3 Where: Filtra elementos. Select: Projeta elementos. OrderBy/OrderByDescending: Classifica elementos. GroupBy: Agrupa elementos. Join: Une duas sequências. Aggregate: Executa uma operação em cada elemento e devolve um único resultado. Trabalhar com Diferentes Fontes de Dados: LINQ to Objects: Consulta coleções. LINQ to SQL: Consulta bases de dados relacionais. LINQ to XML: Consulta documentos XML. LINQ to Entities: Consulta modelos do Entity Framework. Deferred Execution vs. Immediate Execution: Deferred Execution: As consultas LINQ não são executadas quando são definidas, mas quando são iteradas (por exemplo, utilizando um ciclo foreach). Exemplo: var query = from num in numbers where num > 5 select num; // A Query não é executada aqui foreach (var num in query) { Console.WriteLine(num); // A Query só é executada aqui } Immediate Execution: Ocorre quando são chamados métodos como ToList(), ToArray(), First() ou Count(), o que obriga à execução imediata da consulta. Exemplo: var execucaoImediata = numbers.Where(num => num > 5).ToList(); // Executada imediatamente 4 Resumo Detalhado do Documento "TeoricasPWeb_202425_Cap4_FINAL.pdf" Capítulo 4: Segurança no.NET Core 8 A.1. Segurança em Aplicações Web Conceitos Gerais Autenticação: Processo de verificação da identidade de um utilizador ou computador. Involve credenciais como passwords, tokens externos, smart cards, etc. Autorização: Processo de determinar as permissões de acesso de um utilizador a recursos específicos em um computador ou rede. Evolução: Identidade em ASP.NET 2005: ASP.NET Membership - Armazenamento e gestão de dados de identidade no SQL Server. 2011: Simple Membership - Sistema de Membership para o modelo ASP.NET Web Pages, não compatível com OWIN. 2012: Universal Providers Membership - Permitiu armazenamento de dados adicionais, suporte a fornecedores externos e uso do Membership com Entity Framework. Após 2013: ASP.NET Identity - Atualmente, ASP.NET Core Identity Framework. ASP.NET Core Identity: Características Suporte a autenticação e autorização para aplicações ASP.NET Core, MVC, Web API, Web Forms, SignalR, Web Pages, e componentes.Net Core 8. Permite manipulação de utilizadores, perfis, login/logout, criação de perfis, claims, etc. Suporta armazenamento de contas de utilizador em bases de dados locais ou externas. Facilita escrita de testes unitários e login externo via OAuth (Facebook, Google, Microsoft, Twitter). Suporta middleware OWIN e pode executar em servidores não-IIS. Disponível via NuGet. ASP.NET Core Identity: Arquitetura Domínio: IdentityUser, Role. API/Serviço: UserManager, RoleManager, SignInManager. Persistência: UserStore, RoleStore. Arquitetura: Aplicação ASP.NET Core -> Managers(UserManager, Role- Manager) -> Stores(UserStore, RoleStore) -> Data Access Layer -> Data Source(SQL Server, MySql, Windows Azure Table Storage). ASP.NET Core Identity: Modelo de Dados Dados de identidade (utilizadores, passwords, perfis) armazenados em bases de dados relacionais via Entity Framework. 1 Modelo de dados inclui tabelas como AspNetUsers, AspNetRoles, AspNe- tUserClaims, AspNetUserLogins, AspNetUserRoles. Estender IdentityUser - ApplicationUser Exemplo de extensão de IdentityUser para incluir campos adicionais como PrimeiroNome, ÚltimoNome, DataNascimento, NIF, Fotografia, Agenda- mentos. ASP.NET Core Identity: Autorização [Authorize]: Filtro(Será chamado pelaFramework antes e depois da acção ser exectuada) que verifica se o utilizador está autorizado a aceder a um recurso. Se não estiver logado, redireciona para a página de login. Aplicação no Controlador: Exemplos de uso do atributo [Authorize] em controladores para restringir acesso a determinadas roles (Admin, Gestor) exemplo:[Authorize(Roles=“Admin, Gestor”]. [AllowAnonymous]: Permite acesso anónimo a determinadas ações ou controladores. Restringir Ações a Utilizadores: Exemplo de uso de [Autho- rize(Users="joao")] para restringir acesso a um utilizador específico. Perfis e Roles Iniciais Exemplo de criação de roles iniciais (Admin, Formador, Cliente) e um utilizador default com a role Admin. 4.3. Tipos de Autenticação e Autorização Tipos de Autenticação Autenticação Básica: Simples, mas não muito seguro, utiliza nome de utilizador e palavra-passe, codificados em Base64 no cabeçalho HTTP. Autenticação Baseada em Tokens: JWT (JSON Web Tokens)[Muito utilizado para autenticação sem estado. Um token é emitido para um utilizador após o login bem-sucedido] e OAuth[Um sistema mais complexo que fornece acesso delegado utilizando tokens de acesso]. Autenticação Baseada em Cookies:Método tradicional utilizado em aplicações web onde armazena dados de autenticação em cookies.Podem ser vulneráveis a ataques CSRF se não forem implementados corretamente. Autenticação de Chave API: Simples de implementar, mas não alta- mente seguro.Utiliza uma chave API no cabeçalho do pedido ou como parâmetro de consulta. Autenticação Personalizada: Esquemas adaptados a requisitos específi- cos. 4.4. Utilização de Json Web Token (JWT) Autenticação de API Web.NET com JWT Processo de Autenticação: 2 a. Login de Utilizador e Geração de Tokens: Envio de credenciais, validação, e geração de JWT. b. Estrutura JWT: – Cabeçalho: Tipo de token e algoritmo de assinatura. – Payload: Claims sobre o utilizador (sub, exp, iat, roles). – Assinatura: Encriptação do cabeçalho e payload com uma chave secreta para produzir a assinatura. c. Transmissão do Token: Envio do JWT para o cliente. d. Armazenamento pelo Cliente do Token: Armazenamento em local storage, session storage, memória ou HTTP cookies.A forma recomendada de armazenar JWT é com HTTP cookies. e. Solicitações Subsequentes por Parte da API: Inclusão do JWT no cabeçalho Authorization dos pedidos subsequentes. f. Validação de Tokens do Lado do Servidor: Extração, análise, verificação de assinatura,recuperar a chave publica, validação das claims do JWT e autorização do utilizador. g. Conceder Acesso ou Negar: Processamento do pedido se o token for válido e o utilizador estiver autorizado.Se o token for inválido ou o utilizador não estiver autorizado, a API devolve uma resposta de erro adequada (e.g., 401 Unauthorized or 403 Forbidden). 3

Use Quizgecko on...
Browser
Browser