0

웹 응용 프로그램에 인증을 추가하고 있습니다. 그것은 asp.net mvc 단일 페이지 응용 프로그램입니다. 현재 웹 응용 프로그램은 인증을 위해 asp.net mvc만을 사용하고 있습니다. Request.IsAuthenticated는 AppController에서 확인합니다. 로그인 페이지를 제공하는 것보다 인증되지 않은 경우 (그렇지 않으면 app.html 페이지를 저장합니다). html/Javascript Clientside User Login

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      //VALIDATE USER NAME AND PASSWORD     
      if (Repository_Security.CheckUser(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("Index", "App"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 

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

정말 그 단지 사용자 이름과 암호를 복용하고 데이터베이스에 대해 유효성 검사 : 내 AccountController에서 나는 다음과 같은 로그온 작업이 있습니다. AuthCookie가 지나면 설정합니다.

자바 스크립트 및 아약스 데이터 호출의 브라우저에서 전적으로 클라이언트 측에서이 작업을 수행하는 경우 내 질문이 가능합니다. 클라이언트 측 코드에서 사용자가 인증되었는지 확인하기 위해 검사를 추가 할 수있을뿐 아니라 로그인 페이지에 던져 넣을 수 있습니까?

아이디어가 있으십니까? 감사.

답변

1

예, MVC는 클라이언트 측 Ajax 작업에 이상적입니다.

JSON을 반환하도록 컨트롤러를 수정할 수 있으며 jquery ajax 호출로 clienside javascript를 사용하여 반환 된 json을 처리 할 수 ​​있습니다.

변경 마지막 줄을

return Json(new {IsSuccess=successVariable, RedirectUrl=myRedirectUrl, Message=failedErrorMessage}); 

이 리디렉션 라인을 조정 다음은 대신 설정 myRedirectUrl 변수 같은 것을보고 (보기 (모델)을 반환).

업데이트

당신이 (이 같은 간단한 작업에 대한 잔인한이기로) 프로젝트에 MVC를 제거하려면, 사이트에 웹 서비스 (ASMX)를 추가합니다. 내부 다음과 유사한의 WebMethod를 만들 :

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public LogonResponse Logon(LogonModel model){ 
    ... do login logic as your original code... 
    return new LogonResponse() { IsSuccess = successVar, RedirectUrl=myRedirectUrl, Message=failedErrorMsg}; 
} 
+0

을 예컨대을 리디렉션 (window.location.href)를하지 않을 경우 그 다음, 계속 존재한다면 나는 그것이 MVC 독립적이어야 할 것 같아요. 로그인 정보로 웹 서비스를 호출하고 true false 및 기타 인증 세부 정보를 반환 할 수 있기를 원합니다. 그래서 원한다면 문제없이 asp.net mvc 밖으로 그것을 추출 할 수 있습니다. – Matt

+0

MVC를 완전히 제거 할 수 있습니다. 업데이트 된 응답을 참조하십시오. – macsux

+0

안녕하세요, 귀하의 회신에 감사드립니다. 나는 그것의 clientside 쿠키 물건을 더 인스턴트 메신저에 관심이 인스턴트 메신저 (밀고 당겨 이미 데이터). 즉, 브라우저에 사용자 인증을 저장하고 페이지 변경시이를 확인할 수 있는지 여부 (사용자가 브라우저를 닫고 나 기억 상태를 확인하여 다시 로그인해야하는지 또는 오래된 자격 증명을 사용하는지 확인하는 경우) . – Matt

0

당신이 할 수있는 응용 프로그램이 전체의 보안을 필요뿐만 아니라 클라이언트 측에서 ...하지만 경우,이 모델은 열 업 것을 많은 보안 루프 홀.

0

FormsAuthentication.SetAuthCookie()에 전화 할 때 브라우저에 인증 쿠키를 저장할 수 있도록 Set-Cookie 헤더를 클라이언트에 보냅니다. 자바 스크립트를 사용하여이 쿠키 클라이언트 측의 존재를 확인할 수 있습니다. 그 다음 : 로그인 페이지로

if (document.cookie.indexOf(".ASPXAUTH") >= 0) alert("You are logged in"); 
else window.location.href = "http://www.domain.com/login";