microsoft students to business - filipomor.comfilipomor.com/pucrs/[pucrs]_s2b_webforms_fase3.pdf ·...

64
Microsoft Students to Business Desenvolvimento de Software – 3ª Fase

Upload: others

Post on 24-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

MicrosoftStudents to Business

Desenvolvimento de Software – 3ª Fase

Page 2: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Desenvolvendo para internet

parte V

Page 3: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Acesso a Dados

NET oferece alternativas de acesso aos dados de um banco de dados relacional:

Biblioteca de classes ADO.NET

Uma API de acesso e manipulação de “baixo nível”

TableAdapters e DataSet Tipado

Camada de acesso a dados fornecida por geradores de código do Visual Studio baseado no ADO.NET

Entity Framework

Framework para mapeamento objeto/relacional

LINQ

Linguagem embutida de acesso e manipulação de alto nível

Page 4: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Acesso a Dados

Page 5: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Arquitetura em camadas

Page 6: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

OO x Relacional

Questões do modelo Relacional

Trabalha-se no modelo dos dados

Forte acoplamento com os elementos do modelo ER: tabelas, chaves (primária e estrangeira)

Objetos apenas para “uso em memória”

Como tratar a questão das chaves primárias?

Como tratar a questão das chaves estrangeiras?

Page 7: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

OO x Relacional

Exemplo: modelo relacional

Editora

PK codigo

nome

Livro

PK codigo

titulo

ano

FK1 codEditora

Autor

PK codigo

primeiroNome

ultimoNome

LivroAutor

PK,FK1 codLivro

PK,FK2 codAutor

Page 8: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

OO x Relacional

Questões do modelo OO

Trabalha-se em um modelo que agrega dados e operações

Como representar as associações entre objetos?

Como mapear hierarquias de herança?

Qual o ciclo de vida de um objeto persistente?

Page 9: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Exemplo: diagrama de classes

codigo

nome

Editora

codigo

titulo

ano

Livro

codigo

primeiroNome

ultimoNome

Autor

0..*1..1 0..*0..*

Page 10: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Exemplo: diagrama de classes

Editora

PK codigo

nome

Livro

PK codigo

titulo

ano

FK1 codEditora

Autor

PK codigo

primeiroNome

ultimoNome

LivroAutor

PK,FK1 codLivro

PK,FK2 codAutor

codigo

nome

Editora

codigo

titulo

ano

Livro

codigo

primeiroNome

ultimoNome

Autor

0..*1..1 0..*0..*

Page 11: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

OO x Relacional

Editora

PK codigo

nome

Livro

PK codigo

titulo

ano

FK1 codEditora

Autor

PK codigo

primeiroNome

ultimoNome

LivroAutor

PK,FK1 codLivro

PK,FK2 codAutor

codigo

nome

Editora

codigo

titulo

ano

Livro

codigo

primeiroNome

ultimoNome

Autor

0..*1..1 0..*0..*

Page 12: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Mapeamento Objeto-Relacional

Mapeamento Objeto Relacional (O/RM)

Técnica que mapeia os conceitos de Objetos para Relacional e vice-versa

Vantagens:

Produtividade

Trabalha-se sempre no mesmo paradigma (OO)

Manutenção

Baixo acoplamento com o modelo de dados

Desempenho???

Porque não fazer tudo

em assembler?

Page 13: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Mapeamento Objeto-Relacional

Idéia geral:

Classes

Objetos

EstadoComportamento

Tabelas e RelacionamentosRegistros

ColunasDML e SQL

Page 14: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Entity Framework

Entity Framework é um O/RM que separa o modelo conceitual do físico

Permite a programação OO, incluindo herança e “consulta sobre objetos”

Permite a mudança do modelo físico sem alteração da lógica de negócio

Modelo de memória simples, baseado em Concorrência Otimista com armazenamento em memória

(isto é, sem conexão aberta)

Aderente ao System.Transaction

Feito para suportar múltiplos bancos de dados relacionais

Mapeia Tabelas, Views e Stored Procedures

Page 15: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Entity Framework - Componentes

Entity Data Model (EDM)

Descreve o modelo conceitual (Objetos!)

Entity Data Provider

Um provedor para o EDM

Entity SQL

Uma versão estendida do SQL para o EDM

Object Services

Adiciona rastreamento de mudanças, identidade de objetos, attach / detach

LINQ to Entities

Uma implementação do LINQ sobre o EDM

Page 16: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Entity Framework - Arquitetura

Entity Client – EDM, Entity SQL

Entity

Framework

Runtime

Data Providers (ADO.NET patterns)

SQL

Server

Relational

DBMS

Web Service

Modeling

Mappin

g

Bro

wsi

ng

Bin

din

g

Programming Layers

Code G

en Reporting

Sync

Analysis

Search

Entity Services

Mapping

Query and

Update

Pipelines

Transactions

Metadata

Services

Linq to EntitiesEntity SQL

Applications

SqlClie

ntOtherClien

t

Non-

relational

Page 17: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Entity Framework - Abordagens

NewDatabase

ExistingDatabase

Centrada no Projeto Centrada no código

Database FirstReverse engineer model in EF Designer

Classes auto-generated from model

Model FirstCreate model in EF Designer

Generate BD from model

Classes auto-generated from model

Code FirstDefine classes and mapping in code

EF Power Tools provide reverse engineer

Code FirstDefine classes and mapping in code

Database created from code

Migrations apply model changes to database

Fonte: https://msdn.microsoft.com/en-us/data/jj590134

Page 18: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Entity Data Model

Conceptual

Mapping

Storage

Entity Data Model

EDM é um conjunto de modelos (especificado em arquivo XML .edmx)

que define o mapeamento objeto-relacional

Três modelos:

Conceitual (CSDL - Conceptual Schema Definition Language)

Mapeamento (MSL - Mapping Specification Language)

Armazenamento (SSDL - Storage Schema Definition Language)

Page 19: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Conceptual

Mapping

Storage

Entity Data Model

Entidade (entity):

Representa um objeto do domínio da aplicação

Possui um nome único

Possui uma chave de entidade

Possui dados na forma de propriedades

Possui propriedades de navegação (associação entre entidades)

Possui chaves estrangeiras (associação entre entidades)

Conjunto de entidades (entity set):

Representa um contêiner lógico para entidades de um mesmo tipo

(inclui tipos derivados)

Page 20: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Exemplo: CourseManager - Tabelas

Page 21: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Exemplo: CourseManager - Entidades

Page 22: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Propriedade (property):

Define a estrutura e características dos dados de uma entidade

Pode conter dados primitivos ou estuturados (definidos em tipos complexos)

Possui facetas (facets) que definem restrições e comportamentos adicionais (valor padrão, se aceita null,

tamanho máximo, etc)

Propriedade de navegação (navigation property):

Propriedade que permite a navegação entre entidades associadas

Pode ser apenas unidirecional

Page 23: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Propriedade (property):

Define a estrutura e características dos dados de uma entidade

Pode conter dados primitivos ou estuturados (definidos em tipos complexos)

Possui facetas (facets) que definem restrições e comportamentos adicionais (valor padrão, se aceita null,

tamanho máximo, etc)

Propriedade de navegação (navigation property):

Propriedade que permite a navegação entre entidades associadas

Pode ser apenas unidirecional

Page 24: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Chave de entidade (entity key):

Propriedade(s) utilizada para identificar uma entidade única

É de um tipo primitivo, não anulável e imutável

Chave estrangeira (foreing key):

Propriedade que implementa um relacionamento entre entidades

Page 25: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

EDM – Conceitos Principais

Associação (association):

Representa o relacionamento binário entre entidades (inclusive autorelacionamento)

Cada associação possui duas terminações, anotadas com multiplicidades

Um : 1, Zero ou um : 0..1, Muitos : *

Uma associação pode possui restrições de integridade referenciais

Entidades associadas são acessadas via propriedades de navegação ou chaves estrangeiras

Conjunto de associações (association set):

Representa um contêiner lógico para associações de um mesmo tipo

Page 26: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

LINQ to Entities

Consultas - busca

var companyNameQuery =

from cust in nw.Customers

where cust.City == "London"

select cust.CompanyName;

foreach(var customer in companyNameQuery) {…}

Page 27: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Consultas

Quando um consulta é executada, algumas expressões são avaliadas no servidor e outras no cliente

Nem todos operadores padrão do LINQ são suportados pelo LINQ to Entities!

Veja http://msdn.microsoft.com/en-us/library/bb738550.aspx

Page 28: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Consultas

Propriedades de navegação em relacionamentos 1-1, 1-N ou N-N

Necessário carregar dados relacionados:

Propriedade LazyLoadingEnabled

Indica se objetos relacionados serão carregados automaticamente via propriedade de navegação

Dispara uma nova consulta para cada navegação

Método Load

Carregamento explícito quando necessário

Dispara uma nova consulta para cada load

Método Include

Carregamento imediato

Dispara uma consulta única

Consulta gerada é mais complexa

Page 29: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Consultas

A consulta abaixo não irá funcionar:

var contato = (from contact in awe.Contact

where contact.LastName == "Zhou"

select contact).First();

foreach (var pedido in contato.SalesOrderHeader)

{

Console.WriteLine(pedido.SalesOrderID);

}

Coleção está vazia!

Page 30: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Consultas

Include

Recebe como parâmetro um query path que especifica as entidades relacionadas que devem ser

carregadas com os dados

Uma única requisição é realizada ao BD

var customer = (from contact in awe.Contact

.Include("SalesOrderHeader.SalesOrderDetail")

where contact.LastName == "Zhou"

select contact).First();

Page 31: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Consultas

Load

Permite carregar explicitamente as entidades relacionadas

Várias requisições são realizadas ao BD

Se chamado dentro de um laço foreach, o EDM deve estar configurado com

MultipleActiveResultSets=True na string de conexão

Contact customer = (from contact in awe.Contact

where contact.LastName == "Zhou"

select contact).First();

if (!customer.SalesOrderHeader.IsLoaded) {

customer.SalesOrderHeader.Load();

}

Page 32: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Inserção

Criar um novo objeto

Construtor ou método estático CreateXXX()

Adicionar novos objetos sobre o modelo via métodos Add(), AddObject(), AddToXXX()

Executar método SaveChanges()

Customer cust = new Customer();

cust.CompanyName = "SomeCompany";

cust.City = "London";

cust.CustomerID = "98128";

cust.PostalCode = "55555";

cust.Phone = "555-555-5555";

contexto.AddToCustomers(cust);

contexto.SaveChanges();

Page 33: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Inserção

Criar um novo objeto

Construtor ou método estático CreateXXX()

Adicionar novos objetos sobre o modelo via métodos Add(), AddObject(), AddToXXX()

Executar método SaveChanges()

Customer cust = Customer.CreateCustomer("SomeCompany",

"London","98128","55555","555-555-5555");

contexto.AddToCustomers(cust);

contexto.SaveChanges();

Page 34: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Inserção

Para inserir em um relacionamento:

1-N ou N-N utilizar Add() na coleção referenciada EntityCollection

1-1 utilizar propriedade Value na entidade referenciada EntityReference

SalesOrderDetail sod = SalesOrderDetail.CreateSalesOrderDetail(…);

order.SalesOrderDetail.Add(sod);

contexto.SaveChanges();

Page 35: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Alteração

Obter um objeto do modelo

Garantir que o objeto esteja sob controle do contexto

Alterar o objeto

Estado do objeto muda de Unchanged para Modified

Executar método SaveChanges()

var cust =

(from c in contexto.Customers

where c.CustomerID == "ALFKI"

select c).First();

cust.ContactName = "New Contact";

contexto.SaveChanges();

Page 36: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Remoção

Obter um objeto do modelo

Executar método DeleteObject()

Marca objeto para remoção

Executar método SaveChanges()

Relacionamentos também são removidos

var deleteIndivCust =

from cust in contexto.Customers

where cust.CustomerID == "98128"

select cust;

if (deleteIndivCust.Count() > 0){

contexto.Customers.Remove (deleteIndivCust.First());

contexto.SaveChanges();

}

Page 37: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Remoção

Cuidado!

Regras de remoção em cascata de entidade relacionadas devem ser especificadas tanto no modelo

conceitual quanto na base de dados

Entity Framework somente remove entidades relacionadas se elas estiverem em memória e sob gerência

do contexto

Page 38: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Laboratório 19

Page 39: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Uso do Entity Framework em uma abordagem Code First (código primeiro)

Definir classes de “Modelo”, incluir propriedades para chaves e navegação

Conexão ao banco de dados

Uso de um contexto EF

Uso de uma classe de inicialização

Definição de consultas utilizando LINQ to Entities

Abordagem Code First

Page 40: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Conexão ao banco de dados

Lab - Code first

<add name="ContatosDB"connectionString="Data

Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Contatos.mdf;Integrated Security=True"

providerName="System.Data.SqlClient" />

Page 41: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Uso de um contexto EF

Lab - Code first

public class ContatosDB : DbContext{

public DbSet<Contato> Contatos { get; set; }}

EF Context

(Repository pattern)

Tabela do BD

(operações de CRUD)

Page 42: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

classe de inicialização

Lab - Code first

public class ContatosInicializer : DropCreateDatabaseIfModelChanges<ContatosDB>{

protected override void Seed(ContatosDB context){

base.Seed(context);var contatos = new List<Contato> {

new Contato { Nome="Huginho", Telefone="12345678", HorarioComercial=true },

new Contato { ... };contatos.ForEach(c => context.Contatos.Add(c));context.SaveChanges();

}}

// Global.asax Application_Start()

Database.SetInitializer<ContatosDB>(new ContatosInicializer());

Page 43: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Laboratório 20

Page 44: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Ferramenta LINQPad

http://linqpad.net/

LINQ

http://msdn.microsoft.com/en-us/library/bb397926.aspx

PLINQ

http://msdn.microsoft.com/en-us/library/dd460688.aspx

ADO.NET Entity Framework

http://msdn.microsoft.com/en-us/library/bb399572.aspx

Aonde Ir?

Page 45: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

MSDN

http://msdn.microsoft.com

Data Developer Center

http://msdn.microsoft.com/data

Aonde Ir?

Page 46: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Segurança

Page 47: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação e Autorização

Autenticação refere-se ao processo de obtenção da credencial do usuário e verificação de sua validade

Autorização refere-se ao processo de liberação de acesso a determinados recursos protegidos

Page 48: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Segurança

Arquitetura

Os clientes se comunicam com o ASP.NET através do IIS

Internet Information Services

O ASP.NET fornece recursos de segurança implementados

pelo .NET Framework

Page 49: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Segurança no IIS

Autenticação no IIS é uma camada prévia à autenticação no ASP.NET!

Mecanismos de autenticação do IIS:

Anonymous

Solicitações são automaticamente autenticadas

Basic

Credenciais são transmitidas de forma textual simples pela rede

Digest

Credenciais são transformadas via hash para serem transmitidas

Integrated Windows

Credenciais são transformadas de modo semelhante ao login do Windows em um Active Directory

Page 50: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Segurança no IIS

Page 51: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Segurança no ASP.NET

Segurança no ASP.NET

Recursos para trabalhar com Autenticação e Autorização

Controles específicos

API ASP.NET Identity

Page 52: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação no ASP.NET

Ao criar um novo projeto no Visual Studio deve ser selecionado o mecanismo de autenticação que será

configurado

Page 53: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação no ASP.NET

Opções de configuração do projeto:

No Authentication: usuários anônimos

Individual User Accounts: ASP.NET Identity (http://www.asp.net/identity)

Organizational Accounts: Windows Identity Foundation para usuários com contas no Azure Active

Directory ou Windows Server Active Directory

Windows Authentication: modulo Windows Authentication do IIS

Page 54: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação no ASP.NET

Page 55: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação no ASP.NET

É um subsistema que implementa diferentes mecanismos de autenticação

Características:

Oferece gerência de usuários, perfis (“profiles”) e grupos (“roles”)

Extensível

Suporte a Microsoft Account, Google, Facebook, Twitter, etc

Suporte a programação assíncrona

Baseado no OWIN - Open Web Interface for .NET (http://owin.org/)

Diferentes modelos de armazenamento de dados

Projeto padrão utiliza o SQL LocalDB com Entity Framework Code First

Distribuição de atualizações via NuGet

Page 56: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autenticação no ASP.NET

Versões:

1.0 – VS 2013 RTM

2.0 – VS 2013 Update 2

2.1 – VS 2013 Update 3

Page 57: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

ASP.NET Identity

Estrutura do Template de Projeto padrão no Visual Studio:

Configuração:

Arquivo Startup.cs: ponto de partida para a configuração do ASP.NET Identity

Arquivo App_Start/Startup.Auth.cs: classe parcial (arquivo Startup.cs) com método de configuração do

ASP.NET Identity

Arquivo App_Start/IdentityConfig.cs: classes para configuração das opções dos elementos de

autenticação

Page 58: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

ASP.NET Identity

Estrutura do Template de Projeto padrão no Visual Studio:

Dados:

Arquivo Models/IdentityModels.cs:

Classe ApplicationUser define as informações disponíveis sobre o usuário; representa propriedades que

serão armazenadas no banco de dados do ASP.NET Identity

Classe ApplicationDbContext representa o a base de dados do Entity Framework

Classe IdentityHelper possui métodos de utilidade geral

Page 59: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

ASP.NET Identity

Objetos básicos:

Page 60: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

ASP.NET Identity

Objetos básicos:

Page 61: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autorização

Configuração via arquivo Web.config

Marcação <authorization> dentro de <system.web>

com base na identificação de usuário

<allow users="..."> para permitir acesso

<deny users="..."> para negar acesso

com base nos grupos de usuários

<allow roles="..."> para permitir acesso

<deny roles="..."> para negar acesso

Opções

Nome do usuário/roles no domínio

“*” para todos os usuários

“?” para usuários anônimos

Page 62: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Autorização

Exemplo:

<authorization>

<allow users="CI"/>

<deny users="?"/>

</authorization>

Page 63: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Componentes de Autenticação

Exemplo:

Controle Descrição

CreateUserWizard Coletar dados do usuário e criar uma nova conta

Login Controle composto para página de login

LoginStatus Fornece link de loginf ou logout em função do status do usuário

LoginView Permite filtragem de conteúdo em função do status do usuário (se

autenticado ou anônimo)

PasswordRecovery Controle composto para página de recuperação de senhas perdidas

ChangePassword Controle composto para página de alteração de senha

Page 64: Microsoft Students to Business - filipomor.comfilipomor.com/PUCRS/[PUCRS]_S2B_WebForms_Fase3.pdf · Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida

Laboratório 21