2014-07-17 3 views
1

저는 현재 작업중인 프로젝트에 대해 Windows 인증을 구현하는 작업을 담당했습니다. 나는 모든 것을 보았지만 아무도 내 상황에 어울리지 않는 것 같다.MVC 5의 Windows 인증

유효한 Windows 계정이있는 모든 사용자는 응용 프로그램에 액세스 할 수 있어야하지만 관리자로 구성된 일부 사용자 만 사이트의 일부 부분에 액세스 할 수 있어야합니다.

나는 그것을 사용하는 경우가 될 것이라고 생각 :

User.Identity.IsAuthenticated 

그러나 이것은 항상 false를 반환합니다. 이것에 대한 나의 아주 제한된 이해는 이것이 사실이어야한다고 생각한다는 것을 의미한다. 사용자 이름/비밀번호 조합을 입력 할 필요가 없도록 로그인 한 계정을 사용하여 자동으로 사용자를 인증하는 방법은 무엇입니까? 나는 당신이 LDAP를 구현하고자하고있다 MVC 5.

답변

1

를 사용하고있어

는 얻을 수 있도록 Active Directory의

체크 아웃으로이 링크 인터페이스가 사용자의 시작 :

http://www.schiffhauer.com/mvc-5-and-active-directory-authentication/

계정 컨트롤러 :

여기

링크에서 소스 코드입니다

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"); 
    } 
} 

계정보기 모델 :

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; } 
} 

마지막으로 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> 

이 확실히, 당신이 시작하는 데 도움이 생각보다 컨텍스트에 대한 링크를 체크 아웃해야합니다. 이 도움이 더 필요하면 알려주세요