Este artigo demonstra como implementar baseada em formulários
autenticação por meio de um banco de dados para armazenar os usuários.
Requisitos
A lista a seguir descreve o hardware recomendado, software,
infra-estrutura de rede e service packs que você precisa:
Microsoft Visual Studio .NET
Serviços de Informações da Internet da Microsoft (IIS) versão 5.0
ou posterior
Microsoft SQL Server
Criar um aplicativo ASP.NET usando C# .NET
Abra o Visual Studio .NET.
Criar um novo aplicativo Web do ASP.NET e especifique o nome
e a localização.
Configurar as configurações de segurança no arquivo Web. config
Esta seção demonstra como adicionar e modificar o <authentication></authentication> e <authorization></authorization> seções de configuração para configurar o aplicativo ASP.NET para
Use a autenticação baseada em formulários.
No Solution Explorer, abra o arquivo Web. config.
Altere o modo de autenticação para Forms.
Insira a marca de <Forms>e preencher o apropriado
atributos. (Para obter mais informações sobre esses atributos, consulte o MSDN
documentação ou a documentação QuickStart listada a
</Forms>REFERÊNCIAS seção). Cópia do
código a seguir e, em seguida, clique Colar como HTML sobre oEditar menu para colar o código do <authentication></authentication> seção do arquivo:
Criar uma tabela de banco de dados de exemplo para armazenar detalhes do usuário
Esta seção demonstra como criar um banco de dados de exemplo para
armazene o nome de usuário, senha e função para os usuários. Você precisa de coluna função
Se você quiser armazenar funções de usuário no banco de dados e implementar baseada em função
segurança.
Sobre o Iniciar menu, clique emExecutare, em seguida, digite bloco de notas Para abrir
Bloco de notas.
Destaque o seguinte código de script SQL, com o botão direito do
código e em seguida, clique Copiar. No bloco de notas, clique emColar sobre o Editar menu para colar o seguinte
código:
if exists (select * from sysobjects where id =
object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Users]
GO
CREATE TABLE [dbo].[Users] (
[uname] [varchar] (15) NOT NULL ,
[Pwd] [varchar] (25) NOT NULL ,
[userRole] [varchar] (25) NOT NULL ,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] WITH NOCHECK ADD
CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
(
[uname]
) ON [PRIMARY]
GO
INSERT INTO Users values('user1','user1','Manager')
INSERT INTO Users values('user2','user2','Admin')
INSERT INTO Users values('user3','user3','User')
GO
Salve o arquivo como Users.
No computador do Microsoft SQL Server, abra Users em
Analisador de consultas. Na lista de bancos de dados, clique em Pubs, e
Execute o script. Isso cria uma tabela de usuários de exemplo e preenche a tabela no
o banco de dados Pubs para ser usado com este aplicativo de exemplo.
Criar uma página aspx
Adicionar um novo formulário da Web ao projeto chamado.
Aspx.
Abra a página logon. aspx no editor e alterne para HTML
modo de exibição.
Copie o código a seguir e use o Colar como
HTML a opção sobre a Editar menu para inserir o código
entre o<form>marcas: </form>
Este formulário da Web é usado para apresentar um formulário de logon aos usuários para que eles possam
Forneça seu nome de usuário e senha para fazer logon para o aplicativo.
Alterne para modo Design e salve a página.
Codifique o manipulador de eventos, de modo que ele valide as credenciais do usuário
Esta seção apresenta o código que é colocado no code-behind
página (Logon.aspx.cs).
Clique duas vezes em Logon Para abrir o
Arquivo logon.aspx.cs.
Importe os namespaces necessários no arquivo code-behind:
using System.Data.SqlClient;
using System.Web.Security;
Crie uma função ValidateUser para validar as credenciais do usuário através das
banco de dados. (Certifique-se de que você altere a seqüência de conexão para apontar para o
banco de dados).
private bool ValidateUser( string userName, string passWord )
{
SqlConnection conn;
SqlCommand cmd;
string lookupPassword = null;
// Check for invalid userName.
// userName must not be null and must be between 1 and 15 characters.
if ( ( null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
return false;
}
// Check for invalid passWord.
// passWord must not be null and must be between 1 and 25 characters.
if ( ( null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
return false;
}
try
{
// Consult with your SQL Server administrator for an appropriate connection
// string to use to connect to your local SQL Server.
conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
conn.Open();
// Create SqlCommand to select pwd field from users table given supplied userName.
cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
cmd.Parameters["@userName"].Value = userName;
// Execute command and fetch pwd field into lookupPassword string.
lookupPassword = (string) cmd.ExecuteScalar();
// Cleanup command and connection objects.
cmd.Dispose();
conn.Dispose();
}
catch ( Exception ex )
{
// Add error handling here for debugging.
// This error message should not be sent back to the caller.
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
}
// If no password found, return false.
if ( null == lookupPassword )
{
// You could write failed login attempts here to event log for additional security.
return false;
}
// Compare lookupPassword and input passWord, using a case-sensitive comparison.
return ( 0 == string.Compare( lookupPassword, passWord, false ) );
}
Você pode usar um dos dois métodos para gerar os formulários
cookie de autenticação e redirecionar o usuário para uma página apropriada no evento cmdLogin_ServerClick . Código de exemplo é fornecido para os dois cenários. Use um dos
-los de acordo com sua necessidade.
Chame o método RedirectFromLoginPage para gerar automaticamente o cookie de autenticação de formulários
e redirecionar o usuário para uma página apropriada no evento cmdLogin_ServerClick :
Gerar o tíquete de autenticação, criptografá-lo, criar
um cookie, adicione-o à resposta e redirecione o usuário. Isso lhe oferece mais
controlar como criar o cookie. Você também pode incluir dados personalizados ao longo
com o FormsAuthenticationTicket neste caso.
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("logon.aspx", true);
}
Certifique-se de que o código a seguir é adicionado ao método InitializeComponent no código que gera o Designer de formulário da Web:
this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
Criar uma página default. aspx
Esta seção cria uma página de teste para que os usuários são redirecionados
Após a autenticação. Se os usuários navegam até essa página sem primeiro fazer logon
para o aplicativo, eles são redirecionados para a página de logon.
Renomear a página WebForm1 existente como default. aspx, e
abri-lo no editor.
Alterne para modo de exibição HTML e copie o seguinte código entre
o<form>marcas: </form>
Este botão é usado para fazer logoff a autenticação de formulários
sessão.
Alterne para modo Design e salve a página.
Importe os namespaces necessários no arquivo code-behind:
using System.Web.Security;
Clique duas vezes em SignOut para abrir o code-behind de página (Default.aspx.cs) e copiar o
código a seguir no manipulador de eventos cmdSignOut_ServerClick :
Certifique-se de que o código a seguir é adicionado ao método InitializeComponent no código que gera o Designer de formulário da Web:
this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
Salve e compile o projeto. Agora você pode usar o
aplicativo.
Notas adicionais
Talvez você queira armazenar senhas com segurança em um banco de dados. Você
pode usar a função de utilitário de classe FormsAuthentication chamada HashPasswordForStoringInConfigFile para criptografar as senhas antes de armazená-los no banco de dados ou
arquivo de configuração.
Você pode querer armazenar as informações de conexão SQL no
arquivo de configuração (Web. config), de modo que você pode modificá-lo facilmente se
necessário.
Você pode considerar a inclusão de código para impedir que hackers que tentam
Use combinações diferentes de senhas de logon. Por exemplo, você pode
inclua lógica que aceite apenas duas ou três tentativas de logon. Se o usuário não pode
Faça logon em um determinado número de tentativas, você talvez queira definir um sinalizador
banco de dados para não permitir que o usuário fazer logon até que reative sua
conta visitando uma página diferente ou ligando para sua linha de suporte. Em
adição, você deve adicionar erro apropriado tratamento onde quer que
necessário.
Como o usuário é identificado com base na autenticação
cookie, você talvez queira usar Secure Sockets Layer (SSL) nesse aplicativo tão
que ninguém possa enganar o cookie de autenticação e quaisquer outros valiosos
informações que estão sendo transmitidas.
A autenticação baseada em formulários requer que seu cliente aceite
ou habilite cookies em seu navegador.
O parâmetro de tempo limite do <authentication></authentication> seção de configuração controla o intervalo no qual o
cookie de autenticação é regenerado. Você pode escolher um valor que fornece
melhor desempenho e segurança.
Determinados proxies e caches intermediários na Internet pode
armazenar em cache respostas do servidor da Web que contêm cabeçalhos Set-Cookie, que são, em seguida
retornado para um usuário diferente. Porque a autenticação baseada em formulários usa um cookie
para autenticar usuários, isso pode causar aos usuários acidentalmente (ou intencionalmente)
representar outro usuário, recebendo um cookie de um proxy intermediários ou
cache não foi destinado originalmente para eles.
Para obter mais informações sobre como implementar simples
autenticação baseada em formulários que usa o <credentials></credentials> seção para armazenar usuários e senhas, consulte os seguintes itens
Exemplo GotDotNet ASP.NET QuickStart:
Para obter mais informações sobre como implementar baseada em formulários
autenticação que usa um arquivo XML para armazenar usuários e senhas, consulte o
tópico a seguir no.NET Framework Software Development Kit (SDK)
documentação:
Para obter mais informações sobre a segurança de aplicativo da Web ASP.NET,
Consulte o seguinte Microsoft.NET Framework guia do desenvolvedor
documentação:
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 301240
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.