web-dev-qa-db-ja.com

ADに対する認証用にASP.NET MVCを構成する

Active Directoryに対してASP.NET MVCアプリケーションのユーザーを認証するための高レベルの手順は何ですか?

私は次のようなものを推測します:

  1. Web.configを変更してWindows認証を使用する
  2. ActiveDirectoryMembershipProviderを使用するようにweb.configを構成します
  3. ADで検索するカスタムRoleProviderを使用するようにweb.configを構成します

上記は理にかなっているように見えますが、そうであれば、有効なユーザー検出ロジックをどこに配置すればよいですか?

私の場合、有効なユーザーは特定のADドメインの誰かです。

52
Ben

フォーム認証

通常のフォーム認証を使用して、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を使用する必要があります。

ここから始めましょう


Windows認証

プロジェクトを新規に開始する場合、テンプレートからイントラネットアプリケーションをいつでも選択でき、すべての面倒を見てくれます

enter image description here

手動で行う場合は、次を変更する必要があります。

  1. Windows認証を有効にする
  2. 匿名認証を無効にする

iIS7/8およびIISExpressでこれを行うための詳細情報については、次を参照してください。

IIS 7&IIS 8

  1. IIS Managerを開き、Webサイトに移動します。
  2. [機能ビュー]で、[認証]をダブルクリックします。
  3. [認証]ページで、[Windows認証]を選択します。 Windows認証がオプションではない場合、Windows認証がサーバーにインストールされていることを確認する必要があります。

    WindowsでWindows認証を有効にするには:a)コントロールパネルで[プログラムと機能]を​​開きます。 b)[Windowsの機能を有効または無効にする]を選択します。 c)[インターネットインフォメーションサービス]> [World Wide Webサービス]> [セキュリティ]に移動し、Windows認証ノードがチェックされていることを確認します。

    WindowsサーバーでWindows認証を有効にするには:a)サーバーマネージャーで[Webサーバー(IIS)]を選択し、[役割サービスの追加]b)Webサーバー>セキュリティに移動し、Windows認証ノードがチェックされていることを確認します。

  4. [操作]ウィンドウで、[有効にする]をクリックしてWindows認証を使用します。

  5. [認証]ページで、[匿名認証]を選択します。
  6. [操作]ウィンドウで、[無効]をクリックして匿名認証を無効にします。

IIS Express

  1. Visual Studioでプロジェクトを右クリックし、使用IIS Expressを選択します。
  2. ソリューションエクスプローラーでプロジェクトをクリックして、プロジェクトを選択します。
  3. [プロパティ]ペインが開いていない場合は、開きます(F4)。
  4. プロジェクトの[プロパティ]ペインで:a)[匿名認証]を[無効]に設定します。 b)「Windows認証」を「有効」に設定します。

あなたのweb.configのようなものがある

<system.web>
  <authentication mode="Windows" />

  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

以上です!

ユーザーIDが必要な場合は、

@User.Identity.Name

これにより、Domain\Username私のように:

enter image description here

ここから始めましょう

81
balexandre

チュートリアルのソリューションを次に示します 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接続文字列を取得するには、いくつかの手順が必要になる場合があります。

  1. Windows 7用のリモートサーバー管理ツールをインストールします。インストール後の指示に従って、コントロールパネルからWindowsに機能を追加してください。

  2. コマンドプロンプトを開き、>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です。

7
Owen Pauling

ADセキュリティグループに対してチェックする次のリンクを見つけました。

フォーム認証およびグループベースの承認を使用したASP.NET MVC 5でのActive Directory認証

唯一のことは、このセットアップではログインページを使用してADのユーザー名/パスワードの資格情報をキャプチャすることです。アプリは常にネットワーク内からアクセスされるため、認証を「FORMS」から「WINDOWS」に変更しました。また、FORMS認証を使用しない場合は、<forms>タグから<authentication>サブタグを削除することを忘れないでください。

0
Red_Phoenix