샘플 멤버 자격 공급자 구현

Visual Studio 2010

업데이트: 2007년 11월

샘플 멤버 자격 공급자와 이 공급자에서 지원하는 데이터 소스 스키마를 설명합니다.

다음 항목에는 샘플 멤버 자격 공급자 구현을 위한 코드가 포함되어 있습니다. 샘플 공급자에서는 .NET Framework Data Provider for ODBC를 사용하여 ODBC 데이터 소스에 연결합니다. 이 샘플에서는 Access 데이터베이스를 데이터 소스로 사용합니다.

이 항목에서는 샘플 멤버 자격 공급자의 구현에 대해 자세히 설명하고 샘플을 빌드하는 방법과 샘플 공급자를 사용하도록 ASP.NET 응용 프로그램을 구성하는 방법을 설명합니다.

44w5aswa.alert_note(ko-kr,VS.100).gif참고:

각 데이터 소스에 서로 다른 SQL 구문이 포함되어 있으므로 일부 명령은 데이터 소스에 따라 작동하거나 작동하지 않습니다. 따라서 .NET Framework Data Provider for ODBC 또는 .NET Framework Data Provider for OLEDB를 사용하여 SybaseMembershipProvider 또는 OracleMembershipProvider 등의 데이터 소스에 액세스하는 경우에도 데이터 소스에 따라 멤버 자격 공급자를 만들어야 합니다.

Visual Basic과 C# 버전의 샘플 공급자가 포함되어 있습니다. 샘플 코드는 방법: 샘플 멤버 자격 공급자 구현에서 확인할 수 있습니다.

샘플 공급자가 사용하는 Access 테이블을 만들려면 새로운 또는 기존 Access 데이터베이스에서 다음 데이터 정의 쿼리를 실행합니다.

CREATE TABLE Users
(
  PKID Guid NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  Email Text (128) NOT NULL,
  Comment Text (255),
  Password Text (128) NOT NULL,
  PasswordQuestion Text (255),
  PasswordAnswer Text (255),
  IsApproved YesNo, 
  LastActivityDate DateTime,
  LastLoginDate DateTime,
  LastPasswordChangedDate DateTime,
  CreationDate DateTime, 
  IsOnLine YesNo,
  IsLockedOut YesNo,
  LastLockedOutDate DateTime,
  FailedPasswordAttemptCount Integer,
  FailedPasswordAttemptWindowStart DateTime,
  FailedPasswordAnswerAttemptCount Integer,
  FailedPasswordAnswerAttemptWindowStart DateTime
)

샘플 공급자는 데이터 소스 작업 시 예외가 발생하면 ASP.NET 응용 프로그램에 예외를 반환하는 대신 응용 프로그램 이벤트 로그에 예외의 세부 정보를 기록합니다. 이 작업은 보안상 데이터 소스에 대한 전용 정보가 ASP.NET 응용 프로그램에 노출되지 않도록 하기 위해 수행됩니다.

샘플 공급자에서는 "OdbcMembershipProvider"의 이벤트 Source를 지정합니다. ASP.NET 응용 프로그램에서 응용 프로그램 이벤트 로그에 올바르게 기록하도록 하려면 먼저 다음 레지스트리 키를 만들어야 합니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcMembershipProvider

샘플 공급자가 이벤트 로그에 예외를 기록하지 않도록 하려면 Web.config 파일에서 writeExceptionsToEventLog 특성을 false로 설정합니다.

샘플 공급자를 사용하려면 응용 프로그램의 App_Code 디렉터리에 소스 코드를 배치하면 됩니다. 응용 프로그램의 App_Code 디렉터리에 소스 코드가 이미 있으면 디렉터리의 기존 코드와 동일한 언어로 작성된 샘플 공급자 버전을 추가해야 합니다. 이 공급자는 해당 응용 프로그램이 필요할 때 ASP.NET에서 컴파일됩니다.

또한 샘플 공급자를 라이브러리로 컴파일한 다음 웹 응용 프로그램의 Bin 디렉터리에 배치하거나, 강력한 이름으로 지정한 다음 GAC에 배치할 수도 있습니다. 다음 명령에서는 명령줄 컴파일러를 사용하여 샘플 공급자를 컴파일하는 방법을 보여 줍니다.

csc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.cs /r:System.Web.dll /r:System.Configuration.dll

다음 예제에서는 샘플 공급자를 사용하도록 구성된 ASP.NET 응용 프로그램의 Web.config 파일을 보여 줍니다. 구성 파일에서는 CreateUser.aspx와 RetrievePassword.aspx라는 두 개의 파일이 있다고 가정합니다. 이 두 파일은 로그인한 사용자를 포함하여 모든 사용자가 액세스할 수 있습니다.

이 예제에서는 "MembershipUsers"라는 ODBC DSN을 사용하여 Access 데이터베이스에 대한 연결 정보를 가져옵니다. 이 샘플 공급자를 사용하려면 "MembershipUsers"라는 System DSN을 만들거나 데이터베이스에 올바른 ODBC 연결 문자열을 제공해야 합니다.

<configuration>

  <location path="CreateUser.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="RetrievePassword.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=MembershipUsers;" />
  </connectionStrings>

  <system.web>

    <authentication mode="Forms" >
      <forms loginUrl="login.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
      validation="SHA1" />

    <membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="15">

      <providers>

        <add 
          name="OdbcProvider" 
          type="Samples.AspNet.Membership.OdbcMembershipProvider" 
          connectionStringName="OdbcServices"
          enablePasswordRetrieval="true"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true" 
          writeExceptionsToEventLog="true" />

      </providers>
    </membership>

  </system.web>
</configuration>
표시: