繁体   English   中英

在 asp.net MVC 中使用活动目录进行身份验证

[英]Authentication using active directory in asp.net MVC

我想使用活动目录对我的 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>

狮子座

我解决了设置视图模型和控制器的问题,如下所示:

模型

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 与我的问题相同

正如评论中提到的,就像将您的身份验证方法从Forms更改为Windows一样简单:

<authentication mode="Windows" />

如果您运行它的服务器加入到与您的用户登录相同的域或受信任的域,这将起作用。 只要您的站点设置为受信任站点(通常是 Intranet 站点),就不会提示用户登录。

要限制应用程序的某些部分,您可以使用AuthorizeAttribute 例如,要限制对 AD 组中的人员的访问:

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

或者,限制对特定 AD 用户的访问:

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

可以通过逗号分隔来添加多个角色或用户:

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

这些属性可以应用于整个控制器或单个操作。

更多信息在这里

如果您需要针对 AD 验证用户提交的 איק 用户名和密码,请使用以下代码。

添加对System.DirectoryServices.AccountManagement引用

并在代码文件中

using System.DirectoryServices.AccountManagement;

接下来,在您的 POST 方法中(标志是布尔类型变量)

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

如果该标志为真,则凭证有效,否则无效。

在这种情况下,您需要手动设置用户和角色(通过使用表单身份验证),然后您可以通过使用限制用户/角色显示控制器/视图

[Authorize(Roles="RoleName")]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM