Active Directoryに対してASP.NET MVCアプリケーションのユーザーを認証するための高レベルの手順は何ですか?
私は次のようなものを推測します:
上記は理にかなっているように見えますが、そうであれば、有効なユーザー検出ロジックをどこに配置すればよいですか?
私の場合、有効なユーザーは特定のADドメインの誰かです。
通常のフォーム認証を使用して、Active Directoryに対してユーザーを認証できます。そのためには、AD接続文字列が必要です。
<connectionStrings>
<add name="ADConn" connectionString="LDAP://YourConnection" />
</connectionStrings>
この接続を使用するメンバーシッププロバイダーを追加します。
<membership defaultProvider="ADMembership">
<providers>
<add name="ADMembership"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web,
Version=2.0.0.0,
Culture=neutral,
PublicToken=b03f5f7f11d50a3a"
connectionStringName="ADConn"
connectionUsername="domain/user"
connectionPassword="pwd" />
</providers>
</membership>
ユーザーを正常に認証するには、username @ domainを使用する必要があります。
ここから始めましょう
プロジェクトを新規に開始する場合、テンプレートからイントラネットアプリケーションをいつでも選択でき、すべての面倒を見てくれます
手動で行う場合は、次を変更する必要があります。
iIS7/8およびIISExpressでこれを行うための詳細情報については、次を参照してください。
IIS 7&IIS 8
- IIS Managerを開き、Webサイトに移動します。
- [機能ビュー]で、[認証]をダブルクリックします。
[認証]ページで、[Windows認証]を選択します。 Windows認証がオプションではない場合、Windows認証がサーバーにインストールされていることを確認する必要があります。
WindowsでWindows認証を有効にするには:a)コントロールパネルで[プログラムと機能]を開きます。 b)[Windowsの機能を有効または無効にする]を選択します。 c)[インターネットインフォメーションサービス]> [World Wide Webサービス]> [セキュリティ]に移動し、Windows認証ノードがチェックされていることを確認します。
WindowsサーバーでWindows認証を有効にするには:a)サーバーマネージャーで[Webサーバー(IIS)]を選択し、[役割サービスの追加]b)Webサーバー>セキュリティに移動し、Windows認証ノードがチェックされていることを確認します。
[操作]ウィンドウで、[有効にする]をクリックしてWindows認証を使用します。
- [認証]ページで、[匿名認証]を選択します。
- [操作]ウィンドウで、[無効]をクリックして匿名認証を無効にします。
IIS Express
- Visual Studioでプロジェクトを右クリックし、使用IIS Expressを選択します。
- ソリューションエクスプローラーでプロジェクトをクリックして、プロジェクトを選択します。
- [プロパティ]ペインが開いていない場合は、開きます(F4)。
- プロジェクトの[プロパティ]ペインで:a)[匿名認証]を[無効]に設定します。 b)「Windows認証」を「有効」に設定します。
あなたのweb.config
のようなものがある
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
以上です!
ユーザーIDが必要な場合は、
@User.Identity.Name
これにより、Domain\Username
私のように:
ここから始めましょう
チュートリアルのソリューションを次に示します Chris Schiffhauer-ASP.NET MVC 5でActive Directory認証を実装する :
ドメイン認証情報に対してユーザーを直接認証することにより、Active Directoryネットワーク上のMVC Webアプリケーションを保護できます。
ステップ1:ACCOUNTCONTROLLER.CS
AccountController.cs
ファイルを次のものに置き換えます。using System.Web.Mvc; using System.Web.Security; using MvcApplication.Models; public class AccountController : Controller { public ActionResult Login() { return this.View(); } [HttpPost] public ActionResult Login(LoginModel model, string returnUrl) { if (!this.ModelState.IsValid) { return this.View(model); } if (Membership.ValidateUser(model.UserName, model.Password)) { FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); if (this.Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) { return this.Redirect(returnUrl); } return this.RedirectToAction("Index", "Home"); } this.ModelState.AddModelError(string.Empty, "The user name or password provided is incorrect."); return this.View(model); } public ActionResult LogOff() { FormsAuthentication.SignOut(); return this.RedirectToAction("Index", "Home"); } }
ステップ2:ACCOUNTVIEWMODELS.CS
AccountViewModels.cs
(またはAccountモデルクラスの名前)を更新して、このLoginModelクラスのみを含めます。using System.ComponentModel.DataAnnotations; public class LoginModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } }
ステップ3:WEB.CONFIG
最後に、
Web.config
ファイルを更新して、これらの要素を含めます。<?xml version="1.0" encoding="utf-8"?> <configuration> <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> </system.web> <connectionStrings> <add name="ADConnectionString" connectionString="LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local" /> </connectionStrings> </configuration>
LDAP接続文字列を取得するには、いくつかの手順が必要になる場合があります。
Windows 7用のリモートサーバー管理ツールをインストールします。インストール後の指示に従って、コントロールパネルからWindowsに機能を追加してください。
コマンドプロンプトを開き、
>dsquery server
と入力しますコマンドが次を返すとしましょう:
CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local
サーバー名は、最初のCN値と最後の2つのDC値をドットで区切った値)で構成されます。したがって、
primary.mydomain.local
です。ポートは389です。
ポートとスラッシュの後の接続文字列の部分は、最初の
"DC"
で始まる結果の部分です。DC=MyDomain,DC=Local
です。したがって、完全な接続文字列は
LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.
ユーザーは、ドメインなしでユーザー名のみを使用してログインします。したがって、正しいユーザー名はMYDOMAIN\ChrisではなくChrisです。
ADセキュリティグループに対してチェックする次のリンクを見つけました。
フォーム認証およびグループベースの承認を使用したASP.NET MVC 5でのActive Directory認証
唯一のことは、このセットアップではログインページを使用してADのユーザー名/パスワードの資格情報をキャプチャすることです。アプリは常にネットワーク内からアクセスされるため、認証を「FORMS」から「WINDOWS」に変更しました。また、FORMS認証を使用しない場合は、<forms>
タグから<authentication>
サブタグを削除することを忘れないでください。