60

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

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

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

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

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

4

3 に答える 3

88

フォーム認証

通常のフォーム認証を使用して、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認証

プロジェクトを新しく開始する場合は、いつでもテンプレートからイントラネットアプリケーションを選択でき、すべてが自動的に処理されます。

ここに画像の説明を入力してください

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

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

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

IIS7およびIIS8

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

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

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

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

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

IIS Express

  1. Visual Studioでプロジェクトを右クリックし、[IISExpressを使用する]を選択します。
  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に私のためのようなものを示します:

ここに画像の説明を入力してください

ここにあなたが始めるための何かがあります

于 2012-04-23T11:04:45.183 に答える
11

チュートリアルChrisSchiffhauerの解決策は次のとおりです-ASP.NETMVC5でActiveDirectory認証を実装します

ドメイン資格情報に対してユーザーを直接認証することにより、ActiveDirectoryネットワーク上のMVCWebアプリケーションを保護できます。

ステップ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このLoginModelクラスのみを含むように(またはAccountモデルクラスの名前を)更新します。

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です。

于 2016-04-06T11:22:22.683 に答える
0

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

フォーム認証とグループベースの承認を使用したASP.NETMVC5でのActiveDirectory認証

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

于 2019-04-26T19:32:22.300 に答える