Pergunta

Atualmente, estou projetando um esquema Membership / perfil para um novo projeto que eu estou trabalhando e eu estava esperando para obter alguma entrada de outros.

O projeto é uma aplicação web ASP.NET e devido ao curto espaço de tempo, eu estou tentando usar toda e qualquer construído em componentes do .NET Framework que posso. O site provavelmente vai entreter

eu sou obrigado a usar um Active Directory existentes para autenticação. Desde o esquema AD não pode ser estendida para segurar novos campos, eu sou obrigado a configurações e objetos de usuário de espera em um armazenamento de dados diferente. Também já foi dito ADAM provavelmente não é uma solução possível.

Eu estava esperando para usar o provedor Membership Directory ativo para o meu esquema de autenticação e o provedor de perfil SQL como armazenamento de dados de perfil de usuário. Eu preferiria não para construir um provedor de perfil personalizado, mas eu não vejo isso posando muito de um problema se for necessário.

Eu estava me perguntando se isso é mesmo uma solução possível, e se assim for, alguém já teve alguma sorte com esta abordagem.

Qualquer comentário seria muito apreciado.

Graças.

Foi útil?

Solução

Primeiro -. Eu nunca fiz isso

Há realmente um excelente série (14 !! partes) sobre todo o tema do ASP.NET associação 2.0, funções e sistemas de provedor de perfil por Scott Mitchell em 4 Guys from Rolla .

De acordo com o meu entendimento, você deve ser capaz de configurar este comportamento que você está procurando usando basicamente essas duas seções em seu web.config:

  <!-- configure Active Directory membership provider -->
  <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
    <providers>
      <add name="AspNetActiveDirectoryMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=2.0.3600, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </membership>

  <!-- configure SQL-based profile provider -->      
  <profile defaultProvider="SqlProvider">
    <providers>
      <add name="SqlProvider"
        type="System.Web.Profile.SqlProfileProvider"
        connectionStringName="SqlProfileProviderConnection"
        applicationName="YourApplication" />
    </providers>

    <!-- specify any additional properties to store in the profile -->   
    <properties>
      <add name="ZipCode" />
      <add name="CityAndState" />
    </properties>
  </profile>

Eu acho que isso deve funcionar: -)

Outras dicas

Além disso, como respondeu por Marc:

<add name="AspNetActiveDirectoryMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=2.0.3600, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />

Você também pode precisar adicionar

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

com corresponnding seqüência de conexão

<connectionStrings>
    <add name="ADService" connectionString="LDAP://ServerIP" />
</connectionStrings>

Se você estiver usando .net 4.0, então você terá de substituir

Version=2.0.3600 

com

Version=4.0.0.0

Então, finalmente,

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <add name="AspNetActiveDirectoryMembershipProvider"
             connectionStringName="ADService"
             type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=4.0.0.0, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a"
             attributeMapUsername="sAMAccountName"/>
      </providers>
    </membership>

e uma vez que é definido como padrão, ele pode ser referenciado como:

MembershipProvider provider = Membership.Provider; 

Obrigado pela informação, a sua ajudou muito. Também em vez de definir o provedor padrão com MembershipProvider provider = Membership.Provider; você pode configurá-lo com na tag de associação.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

I "ve também escrito um pequeno como e um download para um Projeto Visual Studio e Fonte configurado para usar AspNetActiveDirectoryMembershipProvider.

ASP.NET autenticação baseada em formulários - usando AspNetActiveDirectoryMembershipProvider

Estou usando o Visual Studio 2012 e tentou fazer como sugerido, mas um erro é mostrado:

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

Então eu descobri que algumas mudanças devem ser feitas para o formulário de login padrão no VS2012 com MVC 4 e estrutura de entidade da seguinte forma:

em arquivo "AccountController.cs"

no "ActionResult Acesso público (modelo LoginModel, corda returnUrl)"

Alterar o

    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))

para

    if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))

no "ActionResult LogOff pública ()"

Alterar o

    WebSecurity.Logout();

para

    FormsAuthentication.SignOut();

e adicione o seguinte: FormsAuthentication.SetAuthCookie (model.UserName, false);

    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
        {

            FormsAuthentication.SetAuthCookie(model.UserName, false);               

            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top