Desenvolvimento
ASP.net
Paulo Proença
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto
.Net Apprentice
z Conjunto de três sessões cobrindo as
áreas básicas do desenvolvimento na plataforma .Net (focando na internet)
z Desenvolvimento web com ASP.net
z Desenvolvimento de componentes e acesso
a dados com ADO.NET
z XML e desenvolvimento de Web Services em
Laboratório .NET
z Comunidade z Participar, promover z Eventos z Participar ou organizar z Convites z “Projectos” de investigaçãoDesenvolvimento
ASP.net
Paulo Proença
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto
Agenda
z Framework .net
Common Language Runtime
Assembly Garbage Collection z Conceitos de C# Características da Linguagem Operadores e estruturas z ASP .net Paradigma ASP.net Visual Studio .NET
Framework .net
Framework .net
z Conjunto de tecnologias para o
desenvolvimento e utilização de componentes para a criação de:
z Web Forms z Web Services
z Aplicações Windows
z Suporta todos as fases da produção de
Software
z Desenvolvimento z Debugging
Common Language Runtime - CLR
z Ambiente que permite a execução em
tempo real de aplicações.
z Fornece um conjunto de serviços, ao
nível das fases de desenvolvimento, de distribuição e de execução, que
CLR - Serviços
z Fase de Desenvolvimento
z Diversas linguagens de programação z Aumento de produtividade
z Fase de Instalação
z Processo de instalação resume-se a uma cópia de ficheiros (XCOPY)
z A gestão de versões de componentes é feita no processo de compilação
z Fase de Execução
CLR - Arquitectura
Class Loader MSIL to Native Compilers (JIT) Code Manager Garbage Collector (GC) Security Engine Debug EngineType Checker Exception Manager Thread Support COM Marshaler Base Class Library (.NET Framework) Support
Converte código MSIL para código nativo optimizado
Controla a execução do código Gestão de memória
Procedimentos de segurança baseados na identificação do utilizador e na localização do código
Permite fazer debug da aplicação Impede conversões inadequadas e gere o
acesso às variáveis
Tratamento de erros Fornece classes e interfaces para
utilização de threads
Sequencia a distribuição dos componentes
CLR - Características
z Sistema Comum de Tipos
z Conversão directa dos tipos de informação da
Linguagem de programação para os da Framework
z Compilador Just-in-time (JIT)
z O JIT converte o código intermédio (MSIL) em código nativo optimizado
z Gestão de memória – Garbage Collection
z Evita problemas de “falta de memória disponível”
z Tratamento de Excepções
Compilação e Execução
Class Loader Class Loader Class Loader JIT Compiler with optional verification JIT Compiler JIT Compiler with optional with optional verification verification Execution Execution EXE/DLL (MSIL and metadata) EXE/DLL (MSIL and metadata) Class Libraries (MSIL and metadata) Class Libraries (MSIL and metadata) Trusted, pre-JITed code only Call to an uncompiled method Managed Native Code Compiler Compiler Source Code Source CodeAssembly
z Contêm código e metadata para o CLR
z Constitui-se como unidade básica de
distribuição
DEMO 01: ildasm.exe
z Desenvolver uma pequena aplicação em VB .NET e em C#
z Utilizar a aplicação ildasm para verificar o código MSIL gerado
Algoritmo “Garbage Collection”
z Espera que todas as threads terminem
z Verifica quais os objectos que estão
referenciados. A memória ocupada pelos objectos não referenciados é libertada.
z Desloca os objectos válidos para a
“compact heap”
Conceitos de C#
Introdução ao C#
z Linguagem baseada no C/C++
z com inspiração no Java
z preserva investimentos e conhecimentos
adquiridos
z permite um código mais “limpo”
z possui construções sintácticas especiais
para retirar partido da framework
Tipos de dados
z object z string
z sbyte, short, int, long z byte, ushort, uint, ulong z char
z float, double, decimal z bool
z Estes tipos são alias para os tipos definidos na
framework
Classes e namespaces
z Organização do código dentro de
classes
z Classes organizadas dentro de
namespaces
namespace Demo {
public class MyClass { ...
Métodos
z Sintaxe semelhante ao C/C++
z Podem ser públicos ou privados
z Suporta overloading
public class MyHelloWorld { ...
public void SayHello() { ... }
private void SetTitle(String Title) { ... }
Passagem de parâmetros
z Por valor
z Por referência
z out – parâmetro de saída
z ref – parâmetro de entrada e saída
public void func1(int x) { ... }
public void func2(out int x) { ... }
Herança
z Apenas existe herança simples
public class MyClassBase { ...
public void Func() { ... } }
public class MyClassDeriv : MyClassBase { ...
Propriedades
z Sintaxe alternativa para acesso a
membros de dados da classe mas com as vantagens dos métodos
public class Button : Control {
private string m_caption; public string Caption {
get { return m_caption; }
set { m_caption = value; Repaint(); } }
Operadores
z Atribuição = z Relacionais < <= > >= == != z Lógicos && || ! z Aritméticos + - * / % += -= *= /= ++--Constantes
z Pré-definidas
null
true false
z De utilizador
Criação de objectos
// definição da classe
public class MyClass { ... }
// definição da variável
MyClass obj;
// criação do objecto
Construtores
z Seguem as regras do C/C++
z Mesmo nome da classe
z Sem tipo de retorno
z Podem ter ou não argumentos
public class MyClass { ...
public MyClass() { ... }
public MyClass(String Title) { ... } }
Ciclos
// repetição n vezes
for (int x = 0; i < vec.Length; i++) Console.WriteLine(vec[i]);
// repetição condicional
int i = 0;
while (i < vec.Length) {
Console.WriteLine(vec[i]); i++;
}
// enumeração (colecções)
foreach (String x in vec) Console.WriteLine(x);
Estruturas Condicionais
// teste de decisão if (i < vec.Length) Console.WriteLine(vec[i]); else Console.WriteLine(“Erro!!!”); // teste múltiplo switch (x) { case 1: ...; break;case 2: ...; goto case 3;
case 3: ...; break;
ASP.net
O que é o ASP.net?
z Sucessor da tecnologia Active Server
Pages
z Independente da linguagem utilizada
z Independente do browser cliente
z Informação inserida no cliente é
directamente processada no servidor (conceito de Web Form)
z Criação de aplicações Web distribuídas
Aplicação ASP.net
XML Data Database Internet Internet Page1. aspx Page2. aspx Web Services WebServices ComponentsComponents
Web Forms Code-behind pages global. asax Web. config machine. config
ASP.NET Web Server
Output
Cache
Visual Studio .NET
z Um só IDE (Integrated Development
Environment) para múltiplas linguagens e múltiplos tipos de projectos
z Múltiplas linguagens num só projecto
z Múltiplos projectos numa só solução
z Integra browser
z Permite efectuar debbug
Templates de Projectos
z A lista dos templates de projectos baseia-se
no perfil do utilizador e na escolha do tipo de projecto
IDE VS.net
Toolbox Solution Explorer Editor/Browser Properties Server Explorer Object BrowserProcesso de Desenvolvimento
Fase de análise e especificação Fase de análise e especificação Compilar Compilar Fase de testes Fase de testes Produzir a interface e escrever código Produzir a interface e escrever código Criar um projecto Criar um projectoFicheiros da aplicação Web
z Solution files (.sln, .suo)
z Project files (.vbproj, .csproj) z Web application files
z Web forms (.aspx) z User Controls (.ascx) z Web services (.asmx)
z Classes, code-behind pages (.cs, .vb) z Global application classes (.asax)
z Web.config file
Estrutura de Ficheiros da
Aplicação Web
wwwroot wwwroot Inetpub Inetpub ProjectA ProjectA My Documents My Documents Development Files Development Files WebForm1.aspx WebForm1.aspx.cs (Code-behind page) Visual Studio Projects Visual Studio Projects Solution Solution Solution.sln ProjectA.csprojDEMO 02: Visual Studio .NET
z Apresentação do IDE VS.NET
O que são Web Forms?
z Ficheiros com extensão aspx
z Constituídos essencialmente por:
z Atributo Page (directiva @Page)
z Atributo Body z Atributo Form <%@ Page language="c#“ Codebehind="WebForm1.aspx.cs” Inherits=“nomeAplicacao.WebForm1”%> <%@ Page language="c#“ Codebehind="WebForm1.aspx.cs” Inherits=“nomeAplicacao.WebForm1”%> <body MS_POSITIONING="GridLayout"> <body MS_POSITIONING="GridLayout">
Web Forms –
Modelo de Objectos
z As Web Forms possuem um modelo de
objectos interno constituído por:
z Objecto Server
Representa o Servidor Web
z Objecto Page
Representa a página Web
z Objecto Request
Representa o pedido efectuado pelo browser cliente
z Objecto Response
Represente a resposta a enviar ao cliente pelo servidor
Web Forms –
Atributo FORM
z Dentro do atributo FORM colocam-se
controlos denominados “Server Controls”
z Web Server Controls
Intrinsic controls (asp:TextBox)
Validation controls (asp:RequiredFieldValidator)
Rich controls (asp:Calendar)
List-bound controls (asp:DataGrid )
Internet Explorer Web Controls
(http://www.asp.net/IEWebControls/Download.aspx)
Server Controls
z Runat=“server”
z São executados no Servidor Web
z Armazenam informação de estado (viewstate)
z Têm funcionalidades intrínsecas
z Modelo de programação comum
z Todos têm os atributos Id e Text
z Geram código HTML específico para o browser
cliente
<asp:Button id=“Button1” runat=“server” Text=“Submit”/>
<asp:Button id=“Button1” runat=“server” Text=“Submit”/>
HTML server controls
z Baseados nos elementos HTML
z Runat=“server”
z Existem no namespace
System.Web.UI.HtmlControls
<input type="text" id="txtName"
runat="server" />
<input type="text" id="txtName"
Web server controls
z Existem no namespace System.Web.UI.WebControls Sintaxe ASP.net HTML gerado <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox> <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox><input name="TextBox1" type="text" value="Text_to_Display"
<input name="TextBox1" type="text" value="Text_to_Display"
Escolher o Controlo Adequado
Necessitar de funcionalidades especificas tais como um
“calendar” O controlo irá interagir com scripts
no cliente e no servidor
Pretender desenvolver páginas que serão visualizadas por diversos tipos de browsers Pretender fornecer rapidamente
funcionalidades ASP.NET a páginas HTML já existentes
Preferir trabalhar com um modelo de programação orientado a
objectos Preferir trabalhar com a estrutura
de objectos HTML
Optar
Optar porpor
Web Server Controls
Web Server Controls se:se: Optar
Optar porpor
HTML Server Controls
HTML Server Controls se:se:
A largura de banda disponível não A largura de banda for limitada
DEMO 03: Server Controls
z Criar um Web Form
Como programar em ASP .NET
z Três métodos de implementar código:
z Colocar o código no mesmo ficheiro que contem os
Server Controls misturado com as definições dos
mesmos (mixed)
z Colocar o código no mesmo ficheiro que contem os
Server Controls, mas numa zona separada das definições dos controlos (inline code)
z Colocar o código num ficheiro separado (code-behind pages)
z Por defeito o VS .NET utiliza ficheiros separados de código (code-behind)
Programação Inline
z Definição dos controlos e código no mesmo
ficheiro
z Secções separadas para o código e para o
HTML
<HTML>
<asp:Button id="btn" runat="server"/> </HTML>
<SCRIPT Language="c#" runat="server">
private void btn_Click(object sender, System.EventArgs e) {
. . . }
<HTML>
<asp:Button id="btn" runat="server"/> </HTML>
<SCRIPT Language="c#" runat="server">
private void btn_Click(object sender, System.EventArgs e) {
. . . }
Programação Code-Behind
z Código e HTML em ficheiros separados
z Programadores e Web Designers podem trabalhar de forma independente
Form1.aspx
Form1.aspx Form1.aspxForm1.aspx Form1.aspx.csForm1.aspx.cs
<tags>
<tags>
c
c
ó
ó
digo
digo
c
c
ó
ó
digo
digo
Ficheiros separados Um só ficheiro
Como funcionam as página
com Code-Behind?
z Ficheiros separados para interface e para
o código
z A ligação dos ficheiros é feita pela directiva
@ Page no processo de pré-compilação
(JIT-compile) Page1.aspx <% @ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src = "Page1.aspx.cs" %> Page1.aspx.cs
public class WebForm1 {
private void cmd1_Click() {
O que são Event Procedures?
z Acções em resposta à interacção do
Scripts no cliente
z Só utilizados com controlos HTML
z Interpretado pelo browser e executado no
cliente
z Não acede a recursos do servidor z <SCRIPT language="language">
Internet .HTM
Scripts no servidor
z Utilizado em qualquer tipo de Server Control z Compilado e executado no servidor
z Tem acesso aos recursos do servidor
z <SCRIPT language=“cs“ runat="server">
Internet .ASPX
Tratamento de eventos no
Cliente e no Servidor
DEMO 04: Eventos
z Criar procedimentos que permitam responder a eventos capturados pelos controlos da web form
Como se processa o
Tratamento do evento
Postback -
uso de Page.IsPostBack
z O evento Page_Load ocorre em cada
pedido á página.
z A propriedade IsPostBack do objecto
Page permite verificar se se trata do
primeiro pedido ou não.
private void Page_Load(object sender, System.EventArgs e) {
if (!Page.IsPostBack) {
// executes only on initial page load
private void Page_Load(object sender, System.EventArgs e) {
if (!Page.IsPostBack) {
Viewstate
z Permite armazenar informação na Web Form num par Chave/Valor. Esta informação é passada entre pedidos num campo escondido do formulário.
z Mecanismo activo por defeito. Pode, no entanto, ser ajustado ao nível da Web Form e do controlo.
<%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> <%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server">
<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />
<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />
Viewstate
z Para armazenar informação no viewstate
z Para recuperar informação do viewstate
string Texto; Texto=(string)ViewState[“Chave”]; string Texto; Texto=(string)ViewState[“Chave”]; ViewState[“Chave”]=Valor; ViewState[“Chave”]=Valor;
DEMO 05: Page_Load
z Definir procedimento Page_load
O que é validação da informação
inserida pelo utilizador?
z Verifica se o valor inserido num controlo
está minimamente coerente com a informação pretendida
z Bloqueia o processamento da página até
Validação no Cliente e no
Servidor
z ASP.NET cria processos
de validação no cliente e no servidor z Validação no Cliente z Dependente do browser z Resposta imediata z Reduz número de pedidos ao servidor z Validação no servidor z Repete todas as validações efectuadas no cliente
z Permite utilizar recursos
Valid? Valid? User Enters Data No No Yes Yes Error Message Client Server
Controlos de Validação
O ASP.NET fornece controlos de validação para:
z Comparar valores
z Comparar com uma fórmula pré-definida
z Verificar se um valor pertence a um
intervalo
z Confrontar com expressões regulares
z Exigir preenchimento de informação
z Sumariar as validações inseridas numa
Controlos de Validação
Como utilizar?
1. Colocar o controlo na web form
2. Seleccionar o controlo que se pretende validar
3. Configurar as propriedades de validação
<asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> <asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control">
<asp:TextBox id="txtName" runat="server" />
<asp:TextBox id="txtName" runat="server" />
1 1 1 2 2 2 3 3 3
Controlos de validação
Posicionamento
z Definir as mensagens de erro
z Escolher modo de exibição
z Static
Controlos de validação
Combinação
z Pode haver vários controlos de validação
afectos a um mesmo objecto
z Somente o RequiredFieldValidator verifica se
Controlos de Validação
z RequiredFieldValidator zInitialValue z CompareValidator zValueToCompare or ControlToCompare zType zOperator z RangeValidator zMinimumValue zMaximumValue zTypeControlos de Validação
z RegularExpressionValidator
zPermite confrontar valores com expressões
regulares
zO VS .NET já inclui algumas expressões
regulares (p.e: emails)
<asp:RegularExpressionValidator … ControlToValidate=“Email"… ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >*</asp:RegularExpressionValidator > <asp:RegularExpressionValidator … ControlToValidate=“Email"… ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >*</asp:RegularExpressionValidator >
Controlos de Validação
z CustomValidator
z Permite validar no cliente, no servidor, ou em ambos
zClientValidationFunction zOnServerValidate <asp:RequiredFieldValidator id="txtNameValidator" runat="server" ControlToValidate="txtOddNum" ClientValidationFunction="ClientValidateName" OnServerValidate="ServerValidateName"
ErrorMessage="You must enter an odd number" display="dynamic" Text="*"> <asp:RequiredFieldValidator id="txtNameValidator" runat="server" ControlToValidate="txtOddNum" ClientValidationFunction="ClientValidateName" OnServerValidate="ServerValidateName"
ErrorMessage="You must enter an odd number" display="dynamic" Text="*">
Controlos de Validação
z ValidationSummary
z Apresenta as mensagens de erro de todos
os controlos de validação da página
<asp:ValidationSummary id="valSummary"
runat="server"
HeaderText="These errors were found:"
ShowSummary="True" <asp:ValidationSummary
id="valSummary" runat="server"
HeaderText="These errors were found:"
ShowSummary="True" DisplayMode="List"/>
Propriedade Page.IsValid
Verifica o estado de todos os controlos de validação inseridos na página
private void cmdSubmit_Click(object s, System.EventArgs e)
{ if (Page.IsValid)
{ Message.Text = "Page is Valid!";
// Perform database updates or other logic // here
}
private void cmdSubmit_Click(object s, System.EventArgs e)
{ if (Page.IsValid)
{ Message.Text = "Page is Valid!";
// Perform database updates or other logic
// here
DEMO 06: Validações
z Usar controlos de validação
O que é um User Control?
z Um User Control é um Web Server
Control definido pelo programador
z Tem extensão .ascx
z Simplifica a reutilização de componentes
de interface dentro de uma aplicação web
z Não contem as etiquetas <HTML>,
<BODY> e <FORM>
z Contem o código para tratar os seus
próprios eventos
<%@ Control Language=“c#" %> <%@ Control Language=“c#" %>
Porquê utilizar User Controls?
zReutilização de componentes de
interface e de código
Page2.asp x Control1.ascx Page1.aspx Page3.aspx Aplicação A Aplicação BCriação de um User Control
z Dois métodos:
z Utilizando o Visual Studio .NET
z Converter uma página ASP.NET para user control
z A interacção é feita alterando as propriedades
public int pNum { get { return Convert.ToInt32(txtNum.Text); } set { txtNum.Text = Convert.ToString(value); } }
public int pNum { get { return Convert.ToInt32(txtNum.Text); } set { txtNum.Text = Convert.ToString(value); } }
DEMO 07: User Control
z Criação de User Controls z Utilização de User Controls
Gestão do estado
First Name
Last Name
Please enter your logon information: John Submit Submit Chen Web Server Web Server Login.aspx Login.aspx Web Server Web Server
Hello John Chen
Greetings.aspx Please enter your
logon information: John Submit Submit Chen Hello Greetings.aspx First Name Last Name
Tipos de Gestão de Estado
Query strings
z Informação inserida no final da
Base de Dados
z Poderá ser utilizada uma BD para
Propriedade ViewState
z Permite guardar valores entre
pedidos á página
Objecto Session
z Só o utilizador da sessão terá
acesso á informação
Cookies
z Ficheiro de texto com informação
do estado
Objecto Application
z Informação fica disponível para
todos os utilizadores da aplicação
No
No ClienteCliente No
Gestão de Estado no Servidor
z O objecto Application permite armazenar
informação de toda a aplicação web
z O uso de Session está condicionado á
sessão do browser cliente
z A sessão ASP.NET é identificada pela
propriedade SessionID do objecto session
Servidor Web
Servidor Web
Cliente
Cliente
Gestão de Estado no Cliente
z Utilização de cookies (persistentes / temporárias)
z Menos fiável que a gestão no servidor
z O utilizador pode apagar as cookies
z Limite ao tamanho da informação
z Restrições no cliente ao tamanho de ficheiros
Servidor
Servidor
Cliente
Global.asax
z Só um ficheiro Global.asax por aplicação
Web
z Colocado na raiz da directoria virtual
z Utilizado para tratar os eventos dos
Global.asax
z Eventos tratados
zApplication_Start
Executado imediatamente antes da aplicação ser criada. zSession_Start
Executado imediatamente antes da sessão ser criada zApplication_BeginRequest
Executado por cada pedido ao servidor zApplication_EndRequest
Executado no final de cada pedido ao servidor zApplication_AuthenticateRequest
Executado antes da autenticação de um utilizador zApplication_Error
Executado por cada erro não previsto na aplicação zSession_End
Executado imediatamente antes do final da instância da sessão zApplication_End
Variáveis de Sessão e de
Aplicação
z Inicializadas no Global.asax
z Operações de manuseamento normais
protected void Application_Start(Object sender,EventArgs e) {
Application["NumberofVisitors"] = 0; }
protected void Application_Start(Object sender,EventArgs e) { Application["NumberofVisitors"] = 0; } Session["BackColor"] = "blue"; Application.Lock(); Application["NumberOfVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock(); strBgColor = (string)Session["BackColor"]; Session["BackColor"] = "blue"; Application.Lock(); Application["NumberOfVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock(); strBgColor = (string)Session["BackColor"];
Persistência das variáveis de
Sessão e de Aplicação
z O objecto Sessão persiste em memória
um tempo definido após o último acesso
z Por defeito 20 min
z Esse tempo pode ser alterado no Web.config
z As variáveis de Aplicação persistem até
à ocorrência do evento Application_End
<configuration> <system.web> <sessionState timeout="10" /> </system.web> </configuration> <configuration> <system.web> <sessionState timeout="10" /> </system.web> </configuration>
Cookies
z Criação da cookie
HttpCookie objCookie = new HttpCookie("myCookie"); DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1);
Response.Cookies.Add(objCookie);
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1);
Cookies
z Obter informação da cookie
HttpCookie objCookie = Request.Cookies[“myCookie”];
lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]); lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]); HttpCookie objCookie = Request.Cookies[“myCookie”];
lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]); lblTime.BackColor = System.Drawing.Color.FromName
Cookieless Sessions
z No Web.config
z Cada sessão é caracterizada por um
identificador de sessão que transita entre o cliente e o servidor incluído no URL
z Impossibilita a utilização de URLs absolutas
z Maioria dos browsers limita o tamanho da URL a
<sessionState cookieless="true" />
<sessionState cookieless="true" />
http://server/(h44a1e55c0breu552yrecobl)/page.aspx
DEMO 08: Gestão de estado
z Global.asax
z Variáveis de Sessão e de Aplicação z Utilização de Cookies
Métodos de Autenticação do
ASP.NET
z Windows
z Assenta no SO e no IIS
z Utilizador faz um pedido seguro que é transferido ao IIS z Após as credencias serem verificadas, o pedido é
satisfeito
z Forms
z É feito um acesso não autenticado a um Form HTML
onde serão fornecidas as credenciais
z Após verificação é atribuída uma cookie de autenticação
z Microsoft Passport
Comparação entre os Métodos
de Autenticação
Uma só assinatura para diversos sites web
Não necessita de armazenar
Adequado à maioria das aplicações web
Suporta todos os tipos de clientes
Utiliza infra-estrutura Windows
Controla acesso a informação sensível Vantagens Vantagens Baseia-se em cookies Serviço pago Microsoft Passport Baseia-se em cookies Forms
Não se adequa à maioria das aplicações web
Windows
Desvantagens
Desvantagens
M
Como activar a autenticação
baseada no Windows
z Configurar IIS para utilizar pelo menos um
dos seguintes mecanismos de autenticação
zBasic zDigest
zIntegrated Windows security
z Alterar no Web.config 1 1 1 2 2 2 <system.web> <authentication mode="Windows" /> <system.web> <authentication mode="Windows" /> </system.web>
z No acesso à Web Form, o IIS pede ao cliente que se
Como activar a autenticação
baseada no Windows
z Configurar Authorization no Web.config
<location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> <location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> 4 4 4 3 3 3
Autenticação
baseada em Forms
Client requests page
ASP.NET Forms Authentication Not Authenticated Authenticated Logon Page (Users enter their credentials) Authenticated Authorized Not Authenticated Access Denied
8
8
8
8
IIS Username Password Someone *********** Submit Submit 1 1 1 222 3 3 3 4 4 4 6 6 6Como activar a autenticação
baseada em Forms
z Configurar o IIS para usar Anonymous
authentication z Alterar no Web.config z Configurar authorization z Construir um Form de autenticação 1 1 1 2 2 2 3 3 3 4 4 4 <authentication mode="Forms" > <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication> <authentication mode="Forms" > <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication>
z Referencia System.Web.Security
z Esta página verifica as credenciais do
utilizador
z Obter as credenciais a partir de uma cookie
z User.Identity.Name devolve o nome guardado por
FormsAuthentication.RedirectFromLoginPage
Criação da
Página de Autenticação
private void cmdLogin_Click(object sender, EventArgs e) {
if (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); }
private void cmdLogin_Click(object sender, EventArgs e) {
if (login(txtEmail.Text, txtPassword.Text))
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); }
Autenticação com
Microsoft Password
Servidor Servidor Cliente Cliente Passport.com Passport.com O cliente faz um pedido ao servidor1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
O site redirecciona o cliente para Passport.com O cliente é redireccionado e autentica-se em
Passport.com
Passport devolve um cookie com um ticket de autenticação
6
6 6
O cliente acede de novo ao servidor mas agora com o ticket de autenticação
Mais Informação...
z MSDN Library
z http://msdn.microsoft.com/library
z .net framework center
z http://msdn.microsoft.com/netframework/
z C#
z http://msdn.microsoft.com/vcsharp/
z ASP.net
z http://www.asp.net
Tutoriais
z http://www.gotdotnet.com/
z http://www.w3schools.com/aspnet/
z http://www.asp-php.net/tutorial/asp.net/
Desenvolvimento
ASP.net
Paulo Proença
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto