ADに対してユーザーを認証する必要があるMVC3アプリケーションを開発しています。 MVC3には、ADに対してユーザーを自動的に認証するイントラネットアプリケーションを作成するオプションがあることを知っていますが、Windows認証を使用して自動的にログオンします。このアプリケーションは、ユーザーがドメインユーザー名とパスワードを入力する必要がある「オープン」ワークステーションでアクセスできます。例やオンラインチュートリアルはすばらしいものです。サンプルプロジェクトは例外的です。
標準のインターネットアプリケーションテンプレートをフォーム認証で使用し、ActiveDirectoryMembershipProvider
をweb.config
に挿入できます。
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://YOUR_AD_CONN_STRING" />
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms name=".ADAuthCookie" loginUrl="~/Account/LogOn"
timeout="15" slidingExpiration="false" protection="All" />
</authentication>
<membership defaultProvider="MY_ADMembershipProvider">
<providers>
<clear />
<add name="MY_ADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName" />
</providers>
</membership>
</system.web>
このようにして、インターネットアプリケーションテンプレートのログインフォームを取得し、ADに対して検証します。
その後、パスワードをリセットする/パスワードを変更する/登録機能を削除するだけで、Loginだけを残してAccountController
を整理するだけです。
上記のように、web.configファイルで定義されたメンバーシッププロバイダーを使用できます。
以下のコードは、MVC 3テンプレートコードの「AccountController」の実装内にあり、ActiveDirectoryで動作するようにわずかに変更されています。
[HttpPost]
public ActionResult LogOn( LogOnModel model, string returnUrl )
{
if( ModelState.IsValid )
{
// Note: ValidateUser() performs the auth check against ActiveDirectory
// but make sure to not include the Domain Name in the User Name
// and make sure you don't have the option set to use Email Usernames.
if( MembershipService.ValidateUser( model.UserName, model.Password ) )
{
// Replace next line with logic to create FormsAuthenticationTicket
// to encrypt and return in an Http Auth Cookie or Session Cookie
// depending on the 'Remember Me' option.
//FormsService.SignIn( model.UserName, model.RememberMe );
// Fix this to also check for other combinations/possibilities
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
.NET 3.5を使用している場合 この記事 を代わりに読んでください: