Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Configurar as definições de segurança no ficheiro Web.config
Esta secção demonstra como adicionar e modificar o <authentication> e <authorization> secções de configuração para configurar a aplicação do ASP.NET para utilizar a autenticação baseada em formulários.
No Solution Explorer, abra o ficheiro Web.config.
Altere o modo de autenticação para formulários .
Inserir tag <forms> e preencha os atributos apropriados. (Para obter mais informações sobre estes atributos, consulte a MSDN documentação ou a documentação de iniciação rápida ao que está listada nosecção "REFERENCES".) Copie o código seguinte e clique em Colar como HTML no menu Editar para colar o código de <authentication> secção do ficheiro:
Criar uma tabela de base de dados de exemplo para detalhes de utilizadores de arquivo
Esta secção demonstra como criar uma base de dados exemplo para armazenar o nome de utilizador, a palavra-passe e a função para os utilizadores. A coluna de função é necessário se pretender armazenar funções de utilizador na base de dados e implementar segurança baseada em funções.
No menu Iniciar , clique em Executar e, em seguida, escreva o bloco de notas para abrir o bloco de notas.
Realce o seguinte código de script SQL, clique com o botão direito do rato no código e, em seguida, clique em Copiar . No bloco de notas, clique em Colar no menu Editar 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
Guarde o ficheiro como Users.sql.
No computador com o Microsoft SQL Server, abra Users.sql no analisador de consultas. Na lista de bases de dados, clique em pubs e execute o script. Isto cria uma tabela de utilizadores de exemplo e preenche a tabela de base de dados Pubs a ser utilizado com esta aplicação de exemplo.
o formulário da Web é utilizado para apresentar um formulário de início de sessão aos utilizadores para que estes podem fornecer respectivo nome de utilizador e palavra-passe para iniciar sessão a aplicação.
Mudar para a vista de estrutura e guarde a página.
O processador de eventos de código para que este valida as credenciais do utilizador
Esta secção apresenta o código que é colocado na página de código (Logon.aspx.cs).
Faça duplo clique em início de sessão para abrir o ficheiro Logon.aspx.cs.
Importar espaços de nomes necessários no código - atrás de ficheiro:
using System.Data.SqlClient;
using System.Web.Security;
Crie uma função ValidateUser para validar as credenciais do utilizador ao procurar na base de dados. (Certifique-se de que altere a cadeia de ligação para apontar para a base 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 ) );
}
Pode utilizar um dos dois métodos para gerar o cookie de autenticação de formulários e redireccionar o utilizador para uma página adequada no evento cmdLogin_ServerClick . Código de exemplo é fornecido para ambos os cenários. Utilize um acordo com que o requisito.
Chamar o método RedirectFromLoginPage para gerar o cookie de autenticação de formulários e redireccionar o utilizador para uma página adequada no evento cmdLogin_ServerClick automaticamente:
Gerar a permissão de autenticação, encriptação, criar um cookie, adicioná-lo a resposta e redireccionar o utilizador. Isto dá-lhe mais controlo na forma como cria o cookie. Pode também incluir dados personalizados juntamente com 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 é adicionado o seguinte código para o método InitializeComponent o código que gera o criador de formulários Web:
this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
Esta secção cria uma página de teste para o qual os utilizadores são redireccionados depois de se autenticar. Se os utilizadores navegam para esta página sem iniciar primeiro sessão na aplicação, são redireccionados para a página de início de sessão.
Mudar o nome existente WebForm1.aspx página como default.aspx e abra-o no editor.
Mude para a vista de HTML e, copie o seguinte código entre os códigos <form>:
Poderá pretender armazenar palavras-passe segura numa base de dados. Pode utilizar a função de utilitário de classe FormsAuthentication denominada HashPasswordForStoringInConfigFile para encriptar as palavras-passe antes de armazenar no ficheiro de base de dados ou a configuração.
Convém armazená-as informações de ligação SQL no ficheiro de configuração (Web.config) para que pode modificar facilmente se necessário.
Talvez seja melhor adicionar código para impedir que hackers que tentem utilizar diferentes combinações de palavras-passe do início de sessão. Por exemplo, pode incluir lógica que aceita apenas duas ou três tentativas de início de sessão. Se o utilizador não é possível iniciar sessão num determinado número de tentativas, poderá definir um sinalizador na base de dados para não permitir que esse utilizador iniciar sessão até que o utilizador reactiva a respectiva conta visitar uma página diferente ou chamar a linha de suporte. Além disso, deve adicionar processamento de erros apropriada sempre que necessário.
Uma vez que o utilizador é identificado baseia o cookie de autenticação, poderá utilizar (Secure Sockets Layer) esta aplicação para que ninguém pode iludir o cookie de autenticação e quaisquer outras informações importantes que está a ser transmitidas.
Autenticação baseada em formulários requer que o cliente aceitar ou activar os cookies no browser.
O parâmetro de tempo de espera do <authentication> secção de configuração controla o intervalo no qual o cookie de autenticação é regenerado. Pode escolher um valor que fornece o melhor desempenho e segurança.
Determinados proxies intermédias e caches na Internet podem colocar em cache respostas do servidor Web que contêm cabeçalhos de conjunto cookies, em seguida, são devolvidos a um utilizador diferente. Uma vez que a autenticação baseada em formulários utiliza um cookie para autenticar utilizadores, isto pode causar os utilizadores acidentalmente (ou intencionalmente) representar outro utilizador recebendo um cookie de um proxy intermédio ou cache que não foi originalmente concebido para os mesmos.
Para mais informações sobre como implementar a autenticação baseada em formulários simples que utiliza o <credentials> secção para armazenar os utilizadores e palavras-passe, consulte o exemplo de iniciação rápida de ASP.NET GotDotNet ao seguinte:
Para mais informações sobre como implementar a autenticação baseada em formulários que utiliza um ficheiro XML para armazenar os utilizadores e palavras-passe, consulte o tópico seguinte no .NET Framework Software Development Kit (SDK) 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
(http://support.microsoft.com/kb/301240/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
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.