2011-03-16 2 views
4

ASP.NET MVC3을 배우고 있으며 사용자 처리를 검토 중입니다. 내 첫 번째 문제는 (다른 스레드에서이 주제에 대해 많이 알지만, MVC3로 좋은 주제를 찾지 못한다는 것입니다.) 로그인 페이지에서 내가 어디서 왔는지, 또는 내가 리디렉션 된 곳으로 리디렉션하도록하고 싶습니다. 에서. 아마 PHP에서 아마도이 url을 쿼리 문자열에 추가 할 것입니다. 하지만 어떻게 든 자동으로이 작업을 수행하는 방법이 필요합니다.이 작업은 "기본 제공"방법이 있는지 궁금한 일반적인 디자인 패턴입니다.asp.net mvc 3에 로그인 한 후 사용자를 리디렉션하는 방법 3

이렇게하는 것이 가장 깨끗하고 선호되는 방법은 무엇입니까?

또한 리디렉션되는 URL을 확인하고 저장하는 가장 좋은 방법은 로그인 페이지로 리디렉션 할 때입니까? 요청 개체의 리퍼러를 확인하고 URL에 "? redirect = protected.html"이라고 뱉어 냈습니다.하지만이 작업을 올바르게 수행하는 방법조차 잘 모르겠습니다.

이 주제에 대한 조언을 주시면 감사하겠습니다. asp.net에서

답변

6

MVC는 ASP.NET과 동일한 방식으로 작동합니다.

양식 인증을 사용하는 경우 많은 질문에 답변 해드립니다. 웹 구성 모델을 확인 (authentication="Windows"를 말한다 라인을 찾은 다음 실제로 MVC 3 템플릿 프로젝트의 일환으로 당신에게 계정/로그온 경로를 줄 것이다 Forms

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" /> 
</authentication> 

MVC 3에 그 변경에

당신이 AccountModel이라고 불리는 것을 가지고 있는지보십시오.)

그럼 당신은 귀하의 사이트에 모든 사용자를 거부 Authorization를 추가 : 기본적으로

<authorization> 
    <deny users="?"/> 
</authorization> 

이 로그인에 당신의 위치에 오는 사람을 보내드립니다. 자격 증명이 올바른지가 로그인 것을 확인했다 그래서 후

당신은 ASP.NET과 동일 AuthCookie을 설정

FormsAuthentication.SetAuthCookie(userName, false); 

양식이 할 수 있습니다 당신이 원하는 어느 위치로 리디렉션.

다시 사용 왔던 곳으로 리디렉션 :

FormsAuthentication.RedirectFromLoginPage(userName, false); 

이의 다른 유용한 문 잊고 : 인증없이

FormsAuthentication.SignOut(); 

을 사이트 늘 당신이 기록 될 때까지 어디서든 액세스 할 수 따라서 CSS는 작동을 멈 춥니 다. 이 경우에

<location path="Content"> 
<system.web> 
    <authorization> 
    <allow users="?"/> 
    </authorization> 
</system.web> 
</location> 
<location path="Scripts"> 
<system.web> 
    <authorization> 
    <allow users="?"/> 
    </authorization> 
</system.web> 
</location> 
+0

새로운 정보에 대한 자세한 정보이며 중간 수준을 고려하십시오. 위치에 따라 허용/거부 할 수 있습니다 (Apache .htaccess의 디렉토리 허용/거부).이 예제는 개인/회사 웹 사이트에서 사용하는 것이 가장 좋으며, css/images/js 폴더를 제외하고는 처음에는 모두 거부되므로 대부분의 경우 반드시 그런 것은 아닙니다. – CallMeLaNN

3

그것은이? returnUrl = ...

(1) 루트의 Web.config에서

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
</authentication> 

같은이 있는지 확인합니다.

(2) 보호하려는 컨트롤러에 [Authorize] 속성을 추가하십시오.

새 프로젝트를 만들고 하나보다는 인터넷 응용 프로그램 템플릿을 선택하면 암호를 변경뿐만 아니라 간단한 로그인 과정의 샘플을 얻을 것이다하시기 바랍니다.

참고 :뿐만 아니라이 읽어 보시기 바랍니다 : http://www.asp.net/mvc/tutorials/preventing-open-redirection-attacks

샘플 프로세스에 로그인 한 후, 그것은 returnUrl 열기 재 공격으로부터 보호하기 위해 Url.IsLocalUrl() 도우미에 의해 로컬 URL인지 확인 보여줍니다.

업데이트 : 가장 좋은 방법은 당신이 정말로 사용자가 어디에서 왔는지 추적 URL을 사용하여 예를 들어 표준 프로세스를 알고 대신 한 후 자신의 사용자 정의 로그인 프로세스을 구현하는 것입니다 , 당신은 새로운 쿠키를 설정할 수 있습니다 httponly cookie으로 returnUrl을 저장하고 이전 페이지로 리디렉션하기 직전에 삭제하십시오.

다른 일반적인 관행은 역할을 사용합니다.. 당신 수있는 특정 컨트롤러 위의 속성으로이 같은 허용 된 역할을 추가하여 Role라는 사용자의 특정 그룹에 대한 디렉토리/컨트롤러 :

[Authorize(Roles = "Admin")] 

과 함께 샘플 사용자 및 역할을 만들 수 this 비주얼 스튜디오 관리 도구를 참조하십시오 내장 웹 인터페이스.

또한 현재 사용자의 역할에 따라 표시/숨기기 메뉴하여 페이지와 메뉴 링크를 정렬 사용 맵 할 수 있습니다.이 mvcsitemap을 사용하여 보안 트리밍 기능을 ASP.NET MVC 사이트 맵에 추가하십시오.

0

사용자 정의 인증 대신 기반 표준 양식 (엔터프라이즈 급 애플리케이션을위한 일반적인 경우) 될 일이 다음과 같이

나는 확실히이 나던을 만들기 위해 추가 한 위치는 일이 있습니다.

이 경우 수동으로 쿼리 문자열에 returnUrl 매개 변수를 관리하는 것이 좋습니다. 로그인 페이지는이 URL을 읽고 인증 성공 후 다시 리디렉션됩니다.

관련 문제