2017-04-04 7 views
1

ASP.NET Web Forms 응용 프로그램이 있습니다. 이 응용 프로그램은 내부적으로 사용되는 것이 아니라 서버에 설치되어 내부적으로 사용할 고객에게 판매됩니다.ASP.NET ID 동시 로그인

그래서 여기에 액세스 할 수있는 사용자 수 (다른 패키지 : 10, 25, 50 또는 무제한)가 제한되어 있습니다. 그러나 문제는 ASP.NET ID에서 동시 로그인이 허용된다는 것입니다. 즉, 고객이 10 명의 사용자 시스템을 가지고 있다면, 모두 동일한 사용자로 로그인 할 수 있고 효과적으로 무제한의 사용자 액세스 권한을 가질 수 있습니다. 따라서 "Dave"가 Dave로 로그인 한 경우 Jim은 Bob, John, Stacey 및 여러 사람이 할 수있는 것처럼 Dave로 로그인 할 수 있습니다.

동일한 사용자가있는 경우 동시 로그인을 강제로 로그 아웃하는 방법입니다. 따라서 Bob이 Dave로 로그인하려고 시도하면 Dave (원래 로그인)가 로그 아웃됩니다.

몇 가지 예제를 통해이 문제를 해결할 수 있지만 약간 날짜가 있고 MVC를위한 것입니다.

+0

앱 내에서 보안을 확인하는 방법에 따라 사용자가 이전에 생성 한 토큰 등을 모두 삭제하여 최신 로그인 만 작동하도록 할 수 있습니다. 그러나 앱 내에서 사용자를 확인하지 않으면 (적어도 모든 페이지로드 및/또는 아약스 요청시)이 문제에 더 많은 어려움이 있습니다. Identity가 고도의 사용자 정의가 가능하고 모든 사람들이 자신 만의 풍미를 창조하는 경향이 있으므로 시스템이 어떻게 작동하고 있는지에 대해 좀 더 자세히 설명해주십시오. – Kyle

+0

@Kyle 지금은 기본적인 기능 만 사용하고 있습니다. 나는 기본 페이지, 모든 계정 페이지 (로그인, 확인, ManagePassword, 등)를 포함하는 일종의 ASP.NET 템플릿으로 시작했습니다. 각 로그인마다 사용자의 유효성을 검사하기를 원하므로이 시나리오에서는 로그인시 동일한 사용자가 이미 로그인되어 있는지 확인해야합니다. 그렇다면 로그 아웃하십시오. – Saint7992

답변

2

쿠키 스탬프와 비동기 메서드를 사용하여 보안 스탬프를 업데이트함으로써이 문제를 해결할 수있었습니다.

기본적으로 사용자의 로그인 정보는 모든 페이지로드시에 유효성이 확인되는 쿠키에 저장됩니다. 다른 사용자가 같은 사용자 이름으로 로그인하거나 다른 사용자가 다른 브라우저로 로그인하면 보안 스탬프가 업데이트되고 (현재 로그인 한 사용자는 무효화됩니다) 업데이트 된 스탬프를 사용하여 사용자 로그인을 계속합니다. 로그인 화면에서 내 "로그인"버튼의 로그인 이벤트는 다음과 같습니다

다음 방법의 본문에 아래
protected async void LogIn(object sender, EventArgs e) 

, 우리는이 :

await signinManager.UserManager.UpdateSecurityStampAsync(user.Id); 
await signinManager.PasswordSignInAsync(Username.Text, Password.Text, true, false); 
Response.Redirect("~/Default.aspx"); 

이 보장됩니다 그 때마다 사용자가 로그인 SecurityStamp가 업데이트되어 데이터베이스에 저장됩니다. 그리고 사용자가 동일한 브라우저의 사이트로 돌아 가면 로그인은 유지됩니다. 그러나 어떤 사용자가 다른 브라우저에서 해당 사용자와 동일한 자격 증명을 사용하여 로그인하면 첫 번째 계정이 로그 아웃됩니다.