1

mvc 4 アプリケーションに単純な AD 認証を実装したいと考えています。web.config ファイルで変更した内容は次のとおりです。

<connectionStrings>
    <add name="ADConnectionString" connectionString="LDAP://test.com:636/DC=test,DC=com"/>
</connectionStrings>
...
<membership defaultProvider="ADMembershipProvider">
      <providers>
        <clear/>
        <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"/>
      </providers>

AD 認証を使用しているサービス クラスのメソッドを次に示します。

public bool Authentificate(string userName, string password)
{
     var membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");

     string defaultProvider = membershipSection.DefaultProvider;

     MembershipProvider provider = Membership.Providers[defaultProvider];

     return provider != null && provider.ValidateUser(userName, password);
}

しかし、アプリケーションをデバッグすると、「defaultProvider」が「ActiveDirectoryMembershipProvider」ではなく「AspNetSqlMembershipProvider」であり、認証が失敗して次のメッセージが表示されることがわかります。

SQL Server データベースに接続できません。System.Web.Management.SqlServices.GetSqlConnection (サーバーの文字列、ユーザーの文字列、パスワードの文字列、信頼されるブール値、connectionString の文字列) で System.Web.Management.SqlServices.SetupApplicationServices (サーバーの文字列、ユーザーの文字列、パスワードの文字列、信頼されるブール値、文字列) System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString) の connectionString、String データベース、String dbFileName、SqlFeatures 機能、Boolean インストール)

ここで何が問題なのですか?

4

1 に答える 1

0

.Net アプリケーションが開始されると、対応する構成ファイルからドメイン設定がセットアップされます。IIS で実行されている Web アプリの場合、これはweb.condig実行可能ファイルの場合で、app.config実際には に名前が変更されexecutable_name.exe.configます。そのようなファイルが見つからない場合 - からの設定machine.configが取得されます。ここで重要な点は、1 つのドメイン内のすべてのアセンブリが同じ設定 (エントリ ポイント アセンブリに関連付けられている設定) を使用していることです。そして、他の設定は考慮されません!

あなたの場合、Webプロジェクトにはweb.configファイルがありますが、エントリ ポイントはPresentationプロジェクトであるため、基本的にweb.config設定はまったく使用されません。ここでの最も簡単な修正は、 Presentationapp.configプロジェクトを定義し、その中に必要なすべての設定 (プロバイダーなど) を含めることです。

于 2013-07-22T09:58:36.100 に答える