문제

저는 현재 내가 작업중 인 새로운 프로젝트를위한 멤버십/프로필 체계를 설계하고 있으며 다른 사람들로부터 약간의 의견을 얻기를 바라고있었습니다.

이 프로젝트는 ASP.NET 웹 애플리케이션이며 짧은 기간으로 인해 가능한 모든 내장 .NET 프레임 워크 구성 요소를 사용하려고합니다. 이 사이트는 아마도 5000 명의 사용자를 즐겁게 할 것입니다. 각 사용자는 방문간에 사용자 정의 설정과 객체가 지속되는 프로필이 있습니다.

인증을 위해 기존 Active 디렉토리를 사용해야합니다. 새 필드를 보유하도록 광고 스키마를 확장 할 수 없으므로 다른 데이터 저장소에서 사용자 설정과 객체를 보유해야합니다. 나는 또한 아담이 가능한 해결책이 아닐 수도 있다고 들었습니다.

인증 체계에 Active Directory 멤버십 제공 업체와 SQL 프로파일 제공 업체를 사용자 프로필 데이터 저장소로 사용하기를 바랐습니다. 나는 사용자 정의 프로필 공급자를 구축하지 않기를 원하지만 필요한 경우 많은 문제가 발생하지 않습니다.

나는 이것이 가능한 해결책인지 궁금했고, 그렇다면 누구나이 접근법에 운이 좋았습니다.

모든 의견은 대단히 감사하겠습니다.

감사.

도움이 되었습니까?

해결책

우선 - 나는 이것을 직접 한 적이 없다.

Scott Mitchell at의 ASP.NET 2.0 멤버십, 역할 및 프로필 제공자 시스템의 전체 주제에 대한 훌륭한 시리즈 (14 !! 부품)가 있습니다. Rolla에서 4 명.

내 이해에 따르면 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>

나는 이것이 작동해야한다고 생각할 것이다 :-)

다른 팁

Marc의 대답대로 이것 외에도 :

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

추가해야 할 수도 있습니다

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

CORRESPONNDING CONNECTION String

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

.NET 4.0을 사용하는 경우 교체해야합니다.

Version=2.0.3600 

~와 함께

Version=4.0.0.0

그래서 마지막으로

<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>

그리고 기본값으로 설정되므로 다음과 같이 참조 할 수 있습니다.

MembershipProvider provider = Membership.Provider; 

정보에 감사드립니다. 많은 도움이되었습니다. 또한 기본 공급자를 설정하는 대신 MembershipProvider provider = Membership.Provider; 멤버십 태그로 설정할 수 있습니다.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

나는 또한 비주얼 스튜디오 프로젝트에 작은 방법과 다운로드를 작성하고 aspnetactivedivedirectorymembershipprovider를 사용하도록 구성된 소스를 작성했습니다.

ASP.NET 양식 기반 인증 - ASPNETACTIVEDIVERECTORYMETSHIPPROVIDER를 사용합니다

Visual Studio 2012를 사용하고 있으며 Sufgested를 시도했지만 오류가 표시됩니다.

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

따라서 MVC 4와 Entity Framework가있는 VS2012의 기본 로그인 양식을 몇 가지 변경해야한다는 것을 알게되었습니다.

"AccountController.cs"파일로

"Public ActionResult Login (loginModel Model, String ReturnUrl)"에서

변경

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

~을 위한

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

"public actionResult logoff ()"에서

변경

    WebSecurity.Logout();

~을 위한

    FormsAuthentication.SignOut();

다음을 추가하십시오. 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);
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top