2010-12-15 5 views
0

Asp.Net MVC2 응용 프로그램에 대한 토큰 기반 권한 부여를 구현하려고하는데 내 접근 방식이 잘못되었다고 생각합니다. 첫째로 : 토큰 기반 인증에 의해 나는 인증되지 않은 사용자가 http://myapp.com/some/action?tok=[special single-use token here]에 갈 때 그들이 로그인 것을 의미양식 인증을 사용하여 수동으로 사용자 로그인

내 응용 프로그램에서 모든 컨트롤러를 내 접근 방식은 해당 컨트롤러로 OnAuthorize을 무시했다, 그래서 일반적인 ApplicationController을 확장합니다. 다음 :

class ApplicationController 
{ 
    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.QueryString["tok"] != null) 
     { 
      var token = HttpUtility.UrlDecode(filterContext.HttpContext.Request.QueryString["tok"]); 

      if ((var user = getUserByToken(token)) != null) 
      { 
       FormsAuthentication.SetAuthCookie(user.Email, false); 
      } 
      else{ /* highly-proprietary handling of invalid token */ } 
     } 
     base.OnAuthorization(filterContext); 
    } 
} 

나는 그것이 및 말아야 때 호출되는 안 때 SetAuthCookie가 호출되고 것을 확신 을 생각합니다.

문제는 (. SetAuthCookie를 호출 한 후 User.Identity.IsAuthenticated이 거짓 남아있다) 그것은 내가 리디렉션해야 할 것 의미 쿠키를 설정합니다. 정말로에서 사용자를 기록하지 않습니다이다하지만이에 대한 모든 아이디어는 계속하는 것입니다 정상적으로 요청하고 무의미한 리디렉션을 피하십시오. 이 목표를 달성 할 수있는 방법이 있습니까? 묻는 게 많지 않은 것 같습니다.

답변

0

SetAuthCookie를 호출 한 후에는 User.Identity가 변경되지 않습니다. 다음 요청에서 데이터는 예상 한 것입니다. 여기서 가장 좋은 방법은 SetAuthCookie가 호출 된 후 리디렉션을 실행하는 것입니다.

+0

기본적으로 즉시 로그인하도록 User.Identity를 설정하는 좋은 방법이 없습니까? – notJim

+0

나는 (HttpContext.User가 설정 가능한) 확신 할 수있는 방법이 없다고 말하고 싶지 않지만, 완전히 수정하려면 ASP.NET이 수행 할 모든 작업을 수행하고 싶을 것이다. 요청이 먼저 들어오고, 그것이 나라면, 나는 너무 무언가가 빠져 나갈 것을 염려합니다. 내 생각에 리디렉션이 가장 안전한 방법입니다. 동일한 페이지로 리디렉션 할 수 있으며 쿼리 문자열을 생략 할 수도 있습니다. 다른 URL 일 필요는 없습니다. –

+0

나는 지금 당장 리다이렉트를해야만했다. 왜냐하면 근본적으로 당신은 일어날 필요가있는 모든 일이 일어날 것이라고 확신했기 때문이다. 이 작업을 수행 할 다른 작업이 없다는 것이 이상하게 보입니다. 나는 다른 대답이 들어오는 지보고 싶지만 그렇지 않다면 나는 나중에 대답 할 것입니다. – notJim

관련 문제