Аутентификация с использованием активного каталога в asp.net MVC - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу аутентифицировать пользователей в своем проекте asp.net mvc, используя активный каталог, после нескольких часов серфинга в интернете я не нашел ничего полезного для себя, я уже видел весь результат, но ничего.

Я попытался отредактировать свой web.config, как подсказывают многие посты.

Если кто-нибудь может помочь мне с фрагментами кода или примером, я буду очень признателен, потому что я понятия не имею, где яможет начинаться с.

РЕДАКТИРОВАТЬ

Мой текущий web.config

<system.web>
<authentication mode="Forms">
  <forms name=".ADAuthCookie" loginUrl="~/MainMenu/Login" timeout="45" 
 slidingExpiration="false" protection="All" />
</authentication>
<authorization>
  <deny users="?" />
</authorization>
<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" 
   connectioString="LDAP://myserver.mydomain.COM:389/DC=mydomain,DC=COM" />
</connectionStrings>

Лев

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Если вам необходимо аутентифицировать имя пользователя и пароль, предоставленные пользователем против AD, используйте приведенный ниже код.Добавьте ссылку на System.DirectoryServices.AccountManagement

и в файле кода

using System.DirectoryServices.AccountManagement;

и в свой метод POST (флаг является переменной логического типа)

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAINNAME");
            flag = pc.ValidateCredentials(UserName, Password);

Если флагЗначение true, тогда учетные данные действительны, в противном случае - нет.

В этом случае вам необходимо вручную настроить ПОЛЬЗОВАТЕЛЬ и роли (с помощью проверки подлинности с помощью форм), затем вы можете ограничить пользователя / роли отображением контроллера / представлений с помощью

[Authorize (Roles = "RoleName")]

0 голосов
/ 13 февраля 2019

Я решил проблему с настройкой вида модели и контроллера следующим образом:

Модель

public class LogOnModel
{
    [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; }
}

Контроллер

public class AccountController : Controller
{
    public ActionResult LogOn()
    {
        return View();
    }

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Main", "MainMenu");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect");
            }
        }

        // if we got this far, something failed, redisplay form
        return View(model);
    }

    public ActionResult LogOff()
    {
        FormsAuthentication.SignOut();

        return RedirectToAction("Login", "Account");
    }

Вид

<body id="bodyMain">
@using (Html.BeginForm("LogOn", null,FormMethod.Post))
{
<div class="container">
    @Html.ValidationSummary(true, "")
    <div style="padding-top:30%"></div>
    <table>
        <tr>
            <td>@Html.EditorFor(model => model.UserName)</td>
            <td>@Html.ValidationMessageFor(model => model.UserName, "",)</td>
        </tr>
        <tr></tr>
        <tr>
            <td>@Html.EditorFor(model => model.Password)</td>
            <td>@Html.ValidationMessageFor(model => model.Password, "")</td>
        </tr>
        <tr>
            <td>@Html.CheckBoxFor(model=>model.RememberMe)</td>               
        </tr>
    </table>
    <br />
    <button type="submit" class="btn btn-info">Login</button>
</div>
}

И web.config остаются такими же, как мой вопрос

0 голосов
/ 12 февраля 2019

Как уже упоминалось в комментариях, это так же просто, как изменить метод аутентификации с Forms на Windows:

<authentication mode="Windows" />

Это будет работать, если сервер, с которого вы запускаете, присоединяется к тому жедомен, в который входят ваши пользователи, или доверенный домен.Пользователям не будет предложено войти в систему, если ваш сайт настроен как надежный сайт (обычно это интранет-сайты).

Чтобы ограничить части вашего приложения, вы можете использовать AuthorizeAttribute.Например, чтобы ограничить доступ к тем из группы AD:

[Authorize(Roles="DOMAIN\GroupName")]

или, чтобы ограничить доступ для определенного пользователя AD:

[Authorize(Users="DOMAIN\UserName")]

Можно добавить несколько ролей или пользователейразделяя их запятой:

[Authorize(Roles="DOMAIN\Group1, DOMAIN\Group2")]

Эти атрибуты можно применять ко всему контроллеру или к отдельным действиям.

Дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...