Artigo: 910440 - Última revisão: quinta-feira, 22 de Novembro de 2007 - Revisão: 1.4

Utilizar controlos de início de sessão para uma origem de dados existente, criando um fornecedor de membros personalizados no ASP.NET 2.0

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.
Coluna de voz de suporte do ASP.NET

Utilizar controlos de início de sessão para uma origem de dados existente, criando um fornecedor de membros personalizados no ASP.NET 2.0

para personalizar esta coluna às suas necessidades, pretendemos convidá-lo para submeter as suas ideias sobre tópicos que lhe interessam e problemas que pretende ver endereçados artigos de base de dados de conhecimento no futuro e colunas de voz de suporte. Pode submeter as ideias e comentários utilizando o formulário Ask For It (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) . Também há uma hiperligação para o formulário na parte inferior desta coluna.

Nesta página

Expandir tudo | Reduzir tudo

Introdução

"Hello" e bem-vindo novamente! O nome é Parag Agarwal e sou um engenheiro de suporte aqui na Microsoft. Este mês Microsoft vão discutir outra funcionalidade interessante no Microsoft ASP.NET 2.0, gerir fornecedores para controlos de início de sessão.

Descrição geral

Na coluna deste mês, irá explicar os seguintes tópicos:
  • Breve descrição geral dos controlos de início de sessão
  • Breve descrição geral do modelo de fornecedor no ASP.NET 2.0
  • Podem ser utilizadas instruções na criação de um fornecedor personalizado por controlos de início de sessão com uma origem de dados existente

Controlos de início de sessão

É um requisito muito comum para que a funcionalidade de início de sessão na quase todas as aplicações Web. Antes da disponibilização do ASP.NET 2.0, é utilizado para criar interfaces do utilizador (UI, User Interface) para autenticar o utilizador. Isto envolvidas escrever muitos códigos redundantes. Para evitar esta situação, o ASP.NET 2.0 fornece uma solução de início de sessão completo sob a forma de um conjunto de controlos de servidor para aplicações Web que requerem sem programação. Internamente, estes controlos são responsáveis por composição a IU adequada onde um utilizador pode introduzir as credenciais do respectivo e validam-los. Agora, não temos que estruturar a IU como programador da página e não necessitamos de tratar de autenticar o utilizador escrevendo o nosso próprio código. O modelo de fornecedor subjacente utilizado pelo controlo de início de sessão encarrega-se de que. Podemos ver como o controlo de início de sessão utiliza os fornecedores para autenticar o utilizador na secção seguinte. Pode encontrar mais informações sobre controlos de início de sessão e como é possível utilizá-las no seguinte Web site:
http://msdn2.microsoft.com/en-us/library/ms178329.aspx (http://msdn2.microsoft.com/en-us/library/ms178329.aspx)

Modelo de fornecedor

O modelo do fornecedor permite aos programadores criar software conectáveis. Basicamente destina-se a decouple uma abstracção de implementação para que ambas as partes podem variar de forma independente. Para tal, o ASP.NET fornece determinadas classes base abstractas com todas as propriedades necessárias para ser implementado pela classe deriving que fornece a implementação para os métodos e propriedades e métodos abstractos.

Para obter mais informações sobre classes abstractas base, visite o seguinte Web site:
http://msdn2.microsoft.com/en-us/library/k535acbf(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/k535acbf(vs.71).aspx)
Assim, para resumir, fornecedores são utilizados como intermediários pelos controlos para interagir com um arquivo de dados. Fornecem abstracção entre a aplicação e a origem de dados da mesma forma controladores fornecem abstracção de um dispositivo de hardware.

Dado que fala este artigo sobre fornecedores de associação, irá explicar o classes ASP.NET 2.0 fornece a funcionalidade de membros. A funcionalidade de associação do ASP.NET 2.0 define uma classe base abstracta denominada classe MembershipProvider . Além disso, MembershipProvider deriva da classe base diferente denominada a classe ProviderBase , que é uma classe comuns a todos os fornecedores. Por conseguinte, programadores podem criar as suas próprias classes de fornecedor por derivar da classe MembershipProvider .

Para obter mais informações sobre as classes MembershipProvider e ProviderBase , visite os seguintes Web sites:
http://msdn2.microsoft.com/en-us/library/system.web.security.membershipprovider.aspx (http://msdn2.microsoft.com/en-us/library/system.web.security.membershipprovider.aspx)

http://msdn2.microsoft.com/en-us/library/system.configuration.provider.providerbase.aspx (http://msdn2.microsoft.com/en-us/library/system.configuration.provider.providerbase.aspx)
Depois da Microsoft definiu o fornecedor de membros, tem de ser descrito num ficheiro de configuração, em Machine.config (para todas as aplicações da Web) ou em Web.config (para uma aplicação Web específica). O fornecedor apropriado é instanciado durante a execução das informações fornecidas no ficheiro de configuração pelo ASP.NET. No entanto, é possível alterar o fornecedor dinamicamente durante a execução bem.

Para mais informações sobre como especificar as definições de configuração para um fornecedor de membros, visite o seguinte Web site:
http://msdn2.microsoft.com/en-us/library/ms178329.aspx (http://msdn2.microsoft.com/en-us/library/ms178329.aspx)
Momento, o controlo de início de sessão é fornecido com dois fornecedores de associação incorporados que utilizam uma estrutura de dados/esquema de dados específicos: No entanto, se pretender trabalhar com uma estrutura de base de dados existente, facilmente pode código um fornecedor de membros personalizado para controlos de início de sessão para falar com a estrutura de base de dados antiga.

Criar um fornecedor de membros personalizado

Agora que a Microsoft tem informações suficientes sobre controlos de início de sessão e o modelo de fornecedor subjacente que utilizam, vamos criar um fornecedor de membros personalizado para controlos de início de sessão existentes para trabalhar com um arquivo de dados personalizados.

Nota O fornecedor personalizado será utilize uma base de SQL Server dados com chamado TestDB . TestDB terão uma tabela com os utilizadores com os campos ID de utilizador, NomeUtilizador e palavra-passe e outras informações, tais como o ID de correio electrónico e endereço.
  1. Inicie o Microsoft Visual Studio 2005.
  2. Criar um projecto da biblioteca de classe e atribua-lhe um nome, por exemplo, CustomMembershipProviderLib.
  3. Adicione um ficheiro de origem ao projecto, por exemplo, CustomMembershipProvider.cs.
  4. Inclua System.Web e System.Configuration na secção referências.
  5. Certifique-se que os espaços de nomes seguintes estão incluídos do CustomMembershipProvider.cs ficheiro
    using System;
    using System.Web;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web.Security;
    using System.Collections.Specialized;
    using System.Data.SqlClient;
  6. Herdar da classe CustomMembershipProvider com class. MembershipProvider
    class CustomMembershipProvider : 
    MembershipProvider
  7. À medida que já sabe, o MembershipProvider é uma classe abstracta, por isso, é necessário substituir todos os métodos abstractos na classe CustomMembershipProvider . Existe uma funcionalidade muito útil no Visual Studio 2005 que efectue este procedimento automaticamente. Assim que expandir qualquer classe abstracta, apenas clique com o botão direito do rato classe abstract e, em seguida, clique em Implementar classe abstract . Isto coloca automaticamente declarações para todos os métodos abstractos. Irá reparar que o corpo para cada método contém uma linha comuns de código.
    throw new Exception("The method or operation is not implemented.");
    Isto indica que as funcionalidades que são suportadas pelo fornecedor de personalizado.

    Nota Implementação para o método de inicialização é obrigatória.
  8. Em fornecedor personalizado, é irá concentrar-se em fornecer algumas funcionalidades como a que se segue:
    • Criar um novo utilizador utilizando o controlo CreateUserWizard
    • Validar as credenciais de utilizador utilizando o controlo de início de sessão
    A Microsoft irá implementar estas funcionalidades individualmente. Implemente em primeiro lugar, o método de inicialização . Este método é chamado pelo ASP.NET quando o fornecedor está carregado. Além disso, fornecedores são carregados quando a aplicação utiliza pela primeira vez, e são criados uma vez por domínio de aplicação.
    public override void Initialize(string name,NameValueCollection config)
    {
        // Verify that config isn't null
        if (config == null)
            throw new ArgumentNullException("config");
    
        // Assign the provider a default name if it doesn't have one
        if (String.IsNullOrEmpty(name))
            name = "AspNetCustomMembershipProvider";
    
        // Add a default "description" attribute to config if the
        // attribute doesn't exist or is empty
        if (string.IsNullOrEmpty(config["description"]))
        {
            config.Remove("description");
            config.Add("description", "Custom SQL Provider");
        }
    
        // Call the base class's Initialize method
        base.Initialize(name, config);
    }
  9. Em seguida, implemente o método ValidateUser . É o nome de entrada de utilizador e palavra-passe e verifica que a origem de dados de membros contém um nome de utilizador correspondente e a palavra-passe. Se o método devolve true, o controlo de início de sessão permite ao utilizador passar a verificação. Caso contrário, pede as credenciais novamente.
    public override bool ValidateUser(string username, string password)
    {
        SqlConnection cnn = null;
        SqlCommand cmd = null;
        bool userExists = true;
        try
        {
            cnn = new SqlConnection();
            cnn.ConnectionString = "connection string for the existing data source";
            cnn.Open();
            string selectQry = "Select query for username and password";
            cmd = new SqlCommand(selectQry, cnn);
            SqlDataReader rdr = cmd.ExecuteReader();
            if (!rdr.Read())
                userExists = false;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            cnn.Close();
        }
        return userExists;
    }
  10. Implemente um método mais chamado CreateUser que é chamado pelo controlo CreateUserWizard . Demora entrada, tais como nome de utilizador, palavra-passe, endereço de correio electrónico e outras informações e adiciona um novo utilizador da origem de dados de membros existente. Devolve o objecto MembershipUser , que representa um utilizador recém-criado. Também define MembershipCreateStatus , que indica se o utilizador foi criado com êxito. Se o utilizador não foi criado com êxito, é possível especificar o motivo.
    public override MembershipUser CreateUser(string username, string
              password, string email, string passwordQuestion, string
              passwordAnswer, bool isApproved, object providerUserKey,
              out MembershipCreateStatus status)
    {
        SqlConnection cnn = null;
        SqlCommand cmd = null;
        MembershipUser newUser = null;
        try
        {
            cnn = new SqlConnection();
            cnn.ConnectionString = "connection string for the existing data source";
            cnn.Open();
            string insertQry = "Prepare the Insert query...";
            cmd = new SqlCommand(insertQry, cnn);
            cmd.ExecuteNonQuery();
    
            // Right now I am giving default values for DateTime
            // in Membership constructor.
            newUser = new MembershipUser(
            "AspNetCustomMembershipProvider",
            username, null, String.Empty, String.Empty,
             String.Empty, true, false, DateTime.Now,
             DateTime.Now, DateTime.Now, DateTime.Now,
             DateTime.Now
            );
            status = MembershipCreateStatus.Success;
        }
        catch (Exception ex)
        {
            status = MembershipCreateStatus.ProviderError;
            newUser = null;
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            cnn.Close();
        }
        return newUser;
    }
  11. O resto do aspecto de métodos semelhantes aos fornecidas abaixo. Se pretender, pode implementar nenhum deles.
    // MembershipProvider Properties
    public override string ApplicationName
    {
        get { throw new NotSupportedException(); }
        set { throw new NotSupportedException(); }
    }
    
    public override bool EnablePasswordRetrieval
    {
        get { return false; }
    }
    
    public override bool EnablePasswordReset
    {
        get { return false; }
    }
    
    public override int MaxInvalidPasswordAttempts
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int MinRequiredNonAlphanumericCharacters
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int MinRequiredPasswordLength
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int PasswordAttemptWindow
    {
        get { throw new NotSupportedException(); }
    }
    
    public override MembershipPasswordFormat PasswordFormat
    {
        get { throw new NotSupportedException(); }
    }
    
    public override string PasswordStrengthRegularExpression
    {
        get { throw new NotSupportedException(); }
    }
    
    public override bool RequiresQuestionAndAnswer
    {
        get { return false; }
    }
    
    public override bool RequiresUniqueEmail
    {
        get { return false; }
    }
    
    public override MembershipUser GetUser(string username,
        bool userIsOnline)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection GetAllUsers(int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override int GetNumberOfUsersOnline()
    {
        throw new NotSupportedException();
    }
    
    public override bool ChangePassword(string username,
        string oldPassword, string newPassword)
    {
        throw new NotSupportedException();
    }
    
    public override bool
        ChangePasswordQuestionAndAnswer(string username,
        string password, string newPasswordQuestion,
        string newPasswordAnswer)
    {
        throw new NotSupportedException();
    }
    
    public override bool DeleteUser(string username,
        bool deleteAllRelatedData)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection
        FindUsersByEmail(string emailToMatch, int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection
        FindUsersByName(string usernameToMatch, int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override string GetPassword(string username, string answer)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUser GetUser(object providerUserKey,
        bool userIsOnline)
    {
        throw new NotSupportedException();
    }
    
    public override string GetUserNameByEmail(string email)
    {
        throw new NotSupportedException();
    }
    
    public override string ResetPassword(string username,
        string answer)
    {
        throw new NotSupportedException();
    }
    
    public override bool UnlockUser(string userName)
    {
        throw new NotSupportedException();
    }
    
    public override void UpdateUser(MembershipUser user)
    {
        throw new NotSupportedException();
    }
  12. Compile o projecto da biblioteca de classe. Irá gerar a DLL de saída.
  13. Abra um Web site existente ou crie um novo Web site.
  14. Adicione a referência DLL no Web site.
  15. Registe o fornecedor no ficheiro Web.config da seguinte forma.
    <membership defaultProvider="AspNetCustomMembershipProvider">
      <providers>
        <clear />
        <add  name="AspNetCustomMembershipProvider"	type="CustomMembershipProvider"/>
      </providers>
    </membership>
  16. Adicione uma página Web Forms denominada Login.aspx onde o controlo de início de sessão pode ser utilizado.
    <form id="Form1" runat="server">
      <div>
        <asp:Login ID="Login1" runat="server"></asp:Login>
      </div>
    </form>
  17. Adicione outra página de formulários da Web denominada CreateUser.aspx onde o controlo CreateUserWizard pode ser utilizado.
    <form id="Form1" runat="server">
      <div>
        <asp:CreateUserWizard ID="CreateUserWizard1" runat="server"></asp:CreateUserWizard>
      </div>
    </form>
  18. Execute ambas as páginas de formulários da Web e poderá ver o resultado.
Se não estiver a utilizar o Visual Studio, pode efectuar os seguintes passos:
  1. Abra qualquer editor de texto.
  2. Crie um ficheiro chamado CustomMembershipProvider.cs e siga as instruções fornecidas nos passos 5 a 17.
  3. Crie um directório na pasta wwwroot.
  4. Iniciar Microsoft Internet Information Services (IIS) Manager e marca o novo directório como directório raiz virtual. Certifique-se também de que está configurado para funcionar com o Microsoft .NET Framework 2.0 no caso de outra versão do .NET Framework é instalado no computador.
  5. Copie a páginas de formulários da Web e Web.config no directório.
  6. Crie uma pasta App_Code o novo directório.
  7. Copie o ficheiro CustomMembershipProvider.cs in a App_Code pasta.
  8. Execute a página de formulários da Web CreateUser.aspx do Gestor de IIS.

Conclusão

É tudo por agora em fornecedores de membro personalizada. Espero que esta coluna irá ajudar a compreender os princípios básicos de criação de fornecedores de membro personalizada e como fornecem abstracção ao utilizador final.

Obrigado pelo seu tempo. Esperamos que escrever mais informações sobre os fornecedores são fornecidos pelo ASP.NET 2.0 e como é possível expandir para personalizar o respectivo comportamento de acordo com a nossas necessidades.

Para obter mais informações sobre fornecedores, visite os seguintes Web sites:
Toolkit do fornecedor
http://msdn2.microsoft.com/en-us/asp.net/aa336558.aspx (http://msdn2.microsoft.com/en-us/asp.net/aa336558.aspx)

Fornecedor de modelo de estrutura padrão e especificação, parte 1
http://msdn2.microsoft.com/en-us/library/ms972319.aspx (http://msdn2.microsoft.com/en-us/library/ms972319.aspx)

Fornecedor de design padrão, parte 2
http://msdn2.microsoft.com/en-us/library/ms972370.aspx (http://msdn2.microsoft.com/en-us/library/ms972370.aspx)
Como sempre, vontade submeter ideias tópicos que pretende no futuro corrigida colunas ou na base de dados de conhecimento utilizando o formulário Ask For It (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) .

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 2.0
Palavras-chave: 
kbmt kbprogramming kbsecurity kbcode kbhowto KB910440 KbMtpt
Tradução automáticaTradução automática
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: 910440  (http://support.microsoft.com/kb/910440/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.