2011-08-26 2 views
1

나는 외부 인증, Google 인증을 사용하는 몇 가지 시스템이 있습니다. 난 그냥 세션 변수에 로그인 정보를 유지하고 그런 식으로 (회원 공급자 없음) 사용자를 추적합니다.ID로 외부에서 제공된 사용자 이름?

HttpContext.Current.User 개체에서 사용자 ID를 갖고 싶습니다. Global.asax.cs의 이벤트에 수동으로 사용자를 지정해야합니까, 아니면 세션 중에 자동으로 사용자를 식별 할 수 있습니까?

답변

1

멤버 자격 공급자를 사용하면 원하는 것을 정확하게 얻을 수 있습니다. 자신의 공급자를 만드는 것조차 어렵지 않습니다. 멤버 클래스를 구현하고 config에 플러그 인하거나 기본 제공 업체 중 일부를 사용하십시오.

보안과 같은 중요한 사항에 대해 자신의 솔루션을 롤백하지 마십시오. 보안 구멍이 심하게 있습니다. 세션에 인증 정보를 저장하는 것은 정말 좋은 생각입니다. 세션 도용, 세션 재생 공격 등에 대해 공개적으로 남겨 둡니다.

정말로 사용자 지정 인증 경로를 사용하려는 경우. 그런 다음 here 코드를 살펴보십시오. 인증 쿠키를 제어하는 ​​방법을 보여주고,이를 사용하여 자신의 HttpContext.Current.User 인스턴스를 생성 할 수 있습니다.

+1

글쎄, 그냥 회원 공급자를 사용하면 더 안전하지 않습니다. 기본 제공 양식 인증은 재생 공격에 취약한 쿠키를 사용합니다. –

+0

예. 그렇지만 그것을 버릴 이유는 없습니다. 양식 인증은 거의 모든 가정 압연 솔루션보다 훨씬 안전하고 사용하기 쉽고 강력합니다. 롤 귀하의 자신의 접근 방식은 정말 나쁜 생각입니다. 오히려 FormsAuthentication을 기반으로 세션 재생 공격 및 세션 하이재킹 등으로부터 보호합니다. 이러한 대부분은 프레임 워크 내에서 구축하여 완화 측면에서 잘 설명됩니다. 세션은 쿠키 기반 폼 인증보다 공격에 훨씬 취약합니다. – TheCodeKing

+0

원한다면 인증 쿠키를 어떻게 관리 할 수 ​​있는지 보여주는 코드에 대한 링크를 추가했습니다. 당신이 찾고있는 것이 더 많을 수도 있습니다. – TheCodeKing

2

당신은 세션에서 HttpContext.Current.User 속성을 할당 처리됩니다 사용자 지정 권한 부여 특성을 작성할 수

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var user = httpContext.Session["username"] as string; 
     if (string.IsNullOrEmpty(user)) 
     { 
      // we don't have any username inside the session => unauthorized access 
      return false; 
     } 

     // we have a username inside the session => assign the User property 
     // so that it could be accessed from anywhere 
     var identity = new GenericIdentity(user); 
     httpContext.User = new GenericPrincipal(identity, null); 
     return true; 
    } 
} 

그런 다음 단순히 컨트롤러 /이 사용자 정의 속성을 가진 인증을 필요로하는 작업을 장식합니다.

+0

세션 쿠키는 임의의 토큰이기 때문에 세션은 매우 안전하지 않습니다. 비교적 쉽게 특정 세션 ID를 강제로 실행할 수 있습니다. 그런 다음 인증에 사용되면이 토큰을 직접 사용하여 계정을 제어 할 수 있습니다. 따라서 사용자와 서버에 특정한 암호화 된 토큰 인 인증 쿠키를 사용하는 것이 좋습니다. 훔치는 것이 훨씬 어렵습니다. – TheCodeKing

+0

@ TheCodeKing은 세션 ID가 안전하지 않으며 표준 양식 인증을 사용해야한다는 데 동의했습니다. –

관련 문제