2014-06-23 2 views
2

MVC 프로젝트에서 작업하면서 사용자는 로그인 양식에 자격 증명을 삽입합니다. 나는 웹 서비스를 통해 해당 사용자에 대한 다른 모든 정보를 얻을 현재 이런 식으로 저장하고 :기록 된 사용자 데이터 저장

var result = client.getUser(gui); 
name = result.users.ElementAt(1).name; 
... 

... 

Session["userCode"] = userCode; 
Session["password"] = password; 
Session["userName"] = name; 
Session["userEmail"] = email; 
Session["creationDate"] = creationDate; 
Session["phoneNumber"] = phone; 

응용 프로그램 전반에 걸쳐, 내가 필요할 때마다 내가 그들의 데이터를 필요로하는 경우, 나는 이러한 변수에 액세스 할 수 있습니다. 저는 약 5 페이지 밖에없는 새로운 프로젝트를 작업하고 있기 때문에 프로젝트에 수십 페이지가 있거나 세션 변수를 전혀 사용하지 않아도 이런 식으로 액세스 할 수 있을지 궁금합니다.

로깅 된 사용자 데이터를 저장하는 더 좋은 방법이 있습니까?

답변

4

첫 번째 사항 먼저 : 세션에 사용자 비밀번호를 저장하지 마세요 - 끔찍한 보안 문제!

지금 응용 프로그램을 작성하는 경우 Identity framework을 사용하는 것이 좋습니다. 여기서 사용자 신원에 대한 클레임을 추가 할 수 있습니다. 클레임 목록은 문자열 대 문자열 사전입니다. 원하는 경우 언제든지 클레임을 조회 할 수 있습니다.

그래서 당신은 다음이 데이터를 얻을 확장 방법이 쉽게 자신의 휴대 전화 번호, 이메일 및 생성 날짜와 함께 사용자에게 청구를 추가 할 수 있습니다

public static bool GetEmail(this ClaimsPrincipal principal) 
{ 
    if (principal == null) 
    { 
     return false; 
    } 

    var emailClaim = principal.Claims.SingleOrDefault(c => c.Type == "Email"); 

    if (emailClaim == null) 
    { 
     return String.Empty; 
    } 
    return emailClaim .Value; 
} 

을 다음과 같이이 메서드를 호출 :

ClaimsPrincipal.Current.GetEmail() 

클레임은 암호화 된 쿠키의 사용자를 따르고 있습니다.

UPD : 인증 후에 필요하지 않으므로 세션에 암호를 저장하면 안됩니다. 사용자의 유효성을 검사하고 인증 쿠키가 설정되면 메모리에서 암호를 제거해야합니다. 세션 데이터가 인증 된 후에 세션에 보관하면 상황이 발생할 수 있습니다. 예를 들어 stacktrace가 ELMAH로 덤프되고 ELMAH가 세션 변수를 일반 텍스트로 노출하는 경우를 생각해 볼 수 있습니다. 또 다른 상황은 Glimpse가 사용될 때입니다 - 세션 데이터를 보여줍니다.

신원의 사회적 측면 - 모든 것을 무시하고 내부 사용자 목록으로 만 앱을 만들 수 있습니다. 방금 내 프로젝트 중 하나를 MembershipProvider에서 Identity로 마이그레이션했으며 사회 인증에 의존하지 않았습니다.

VS2010 (업그레이드하지 않으시겠습니까?)에서 Identity는 Entity Framework 6.1에만 종속되지만 MVC 또는 다른 어떤 것에 의존하지 않으므로 Database First EF를 사용하지 않는 한 Identity는 문제가되지 않습니다. 이 경우 VS2010에서는 EF6.1 툴링이 작동하지 않을 수 있습니다. 그러나 VS2010에서이 작업을 시도하지 않았으며 사이트와의 ID 통합을 시뮬레이트하는 VS2010의 작은 테스트 프로젝트를 만드는 것이 좋습니다.

+1

"사용자 암호를 세션에 저장하지 마세요 - 끔찍한 보안 문제!"라고 말합니다. 더 잘 설명해 주시겠습니까? 또한 링크에서 "사용자가 자신의 응용 프로그램에 등록한 사용자 이름과 암호를 입력하여 로그인한다는 가정은 더 이상 유효하지 않습니다."라고 말하면서 "현대 회원 시스템은 다음을 가능하게해야합니다. 리디렉션 기반 로그인을 Facebook, Twitter 및 기타와 같은 인증 공급자에게 제공합니다. " 나는 엔터프라이즈 애플리케이션을 만들고있다. 사회적 부분은 나에게 쓸모가 없다. 나는 여전히'asp.net Identity '를 찾고 있을까? 또한, Visual Studio 2010 – chiapa

+1

@chiapa를 사용하여 방금 내 대답에 대한 편집 질문에 대한 답변을 추가했습니다. – trailmax