2

フォーム認証を使用して会社の AD に対して認証するイントラネット MVC アプリをセットアップしようとしています。ユーザーがログインする必要があります。Login アクションに投稿すると、次の例外が発生します。他の誰かがこの問題を抱えていましたか?

Web.config:

<connectionStrings>
  <add name="ADConnectionString" connectionString="LDAP://example.domain.com/DC=example,DC=domain,DC=com"/>
</connectionStrings>
<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>
<system.web>
<authentication mode="Forms">
  <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All"/>
</authentication>
<membership defaultProvider="ADMembershipProvider">
  <providers>
    <clear/>
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"/>
  </providers>
</membership>

アカウントコントローラー:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        //The call to WebSecurity.Login is what throws
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
        {
            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);
    }
4

2 に答える 2

7

VS2010 で MVC3 サイトを作成し、ActiveDirectoryMembershipProvider で動作するようにしました。次に、WebMatrix.WebData.WebSecurity の代わりに古い System.Web.Security を使用するように MVC4 AccountController を変更しました。

から:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
        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);
}

に:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {

        if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            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);
    }
于 2012-12-05T19:12:35.327 に答える
0

私のログインは機能していました。機能していなかったのは私のログアウトでした。いずれにせよ、私は WebSecurity.Logout() を FormsAuthentication.SignOut() に変更しましたが、うまくいきました。

于 2014-06-12T18:32:19.583 に答える