サンプル メンバシップ プロバイダの実装

更新 : 2007 年 11 月

サンプル メンバシップ プロバイダおよびサポートされるデータ ソース スキーマについて説明します。

次の各トピックには、サンプル メンバシップ プロバイダを実装するためのコードが含まれています。サンプル プロバイダでは .NET Framework ODBC 用データ プロバイダを使用して ODBC データ ソースに接続します。このサンプルでは、データ ソースとして Access データベースを使用します。

このトピックでは、サンプル メンバシップ プロバイダの実装の詳細と、サンプル プロバイダを使用するために、サンプルを作成して ASP.NET アプリケーションを構成する方法を説明します。

44w5aswa.alert_note(ja-jp,VS.90).gifメモ :

データ ソースはさまざまな SQL 構文を含むため、コマンドによっては特定のデータ ソースだけを使用し、別のデータ ソースを使用しないものもあります。したがって、.NET Framework ODBC 用データ プロバイダ、または .NET Framework OLEDB 用データ プロバイダを使用してデータ ソースにアクセスしている場合でも、データ ソースに固有のメンバシップ (たとえば、SybaseMembershipProvider、OracleMembershipProvider など) を作成する必要があります。

2 つのバージョンのサンプル プロバイダが付属します。1 つは Visual Basic 用で、もう 1 つは 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 によってコンパイルされます。

また、サンプル プロバイダをライブラリとしてコンパイルして、これを Web アプリケーションの Bin ディレクトリに配置することも、厳密な名前を付けて GAC に配置することもできます。コマンド ライン コンパイラを使用してサンプル プロバイダをコンパイルするコマンドを次に示します。

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

ASP.NET アプリケーションでのサンプル プロバイダの使用

ASP.NET アプリケーションでサンプル プロバイダを使用するように設定した Web.config ファイルの例を次に示します。構成ファイルは、2 つのファイル CreateUser.aspx および RetrievePassword.aspx が存在することを想定しています。この 2 つのファイルは、ログインしているユーザーとは関係なく、すべてのユーザーにアクセスできます。

この例では、"MembershipUsers" という名前の ODBC DSN を使用して Access データベースの接続情報を取得します。サンプル プロバイダを使用するには、"MembershipUsers" というシステム 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>

参照

概念

メンバシップ プロバイダの実装

その他の技術情報

メンバシップを使用したユーザーの管理