2

このエラーが発生しました:メンバーシップの資格情報の検証に失敗しました。フォームベースの認証を使用してASP.NETアプリケーションでActiveDirectoryユーザーにログインしようとしたとき。

私は次のように複雑な設定をしています:

メンバーシップリポジトリとして、Active Directoryライトウェイトディレクトリサービス(Ad LDS)、別名ADAMを使用しています。プロキシユーザーを使用してActiveDirectoryにバインドし、adamsyncを完了しました。ADLDSのSSL証明書を構成しました。LDP.exeを使用してADLDSに接続している間、AD LDSユーザーまたはADユーザーの両方と接続/バインドできるため、プロキシは問題ありません。私のASP.NETアプリケーションはADLDSと通信し、フォームベースの認証を使用してADLDSユーザーと正常にログインできます。

しかし、ASP.NETアプリケーションを使用してADユーザーでログインできません。何が欠けていますか?

これが私のweb.configのプロバイダーセクションです:

<add name="MyADConnectionString"
     connectionString="LDAP://localhost/OU=Users,DC=PreuveConcept,DC=local" />

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
  <providers>
    <clear/>
    <add name="AspNetActiveDirectoryMembershipProvider" 
         type="System.Web.Security.ActiveDirectoryMembershipProvider" 
         connectionStringName="MyADConnectionString" 
         connectionProtection="Secure" 
         enableSearchMethods="true"/>
  </providers>
</membership>

これが私のログインアクションです(デフォルトのMVC AcountControler):

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
4

2 に答える 2

1

そのブログ投稿に基づく:http ://erlend.oftedal.no/blog/?blogid = 71

私の問題の原因は、ActiveDirectoryMembershipProviderを使用していて、特にプロキシユーザーを除外したことだと思われます。

さらに、私がそこで見つけたように:http: //directoryprogramming.net/forums/thread/4181.aspx

AD LDSまたはADAMは、セキュア接続(SSLを使用)を介した単純なバインドではないセキュアバインドを使用できません。ただし、バインドするActive Directoryは、セキュアバインドのみを使用します。

したがって、Windowsベースの認証を使用している場合、ADユーザーは認証できますが、ADAMは認証できません。また、フォームベースのADAMを使用している場合、認証はできますが、ADは認証できません。

結論として、DJKRAZEが複数のコンテキストでプリンシパルコンテキストを指定したときに使用する独自のプロバイダーを作成する必要があります

于 2012-01-23T13:11:11.840 に答える
0

古い質問ですが、私の場合、これはattributeMapUsername="sAMAccountName"構成ファイルから欠落していることが原因でした。

于 2015-01-08T08:39:24.127 に答える