2013-12-14 3 views
27

"WebApplication1"이라는 새로운 웹 응용 프로그램을 만듭니다. - 개인 사용자 계정으로 인증이 설정된 WebForms. 자동 생성 된 코드 템플릿에 한 줄의 코드를 추가하지 않습니다. 나는 응용 프로그램을 실행하고 사용자 "User1"을 등록하고 로그인 - 잘 작동합니다.한 사이트의 ASP.NET ID 로그인이 같은 컴퓨터의 다른 웹 사이트와 공유되는 이유는 무엇입니까?

이제 다른 웹 응용 프로그램 인 "WebApplication2"- 인증이 개인 사용자 계정으로 설정된 동일한 WebForms를 만듭니다. 다시 코드가 없으며 응용 프로그램을 실행합니다. 이제 "User2"라고하는 또 다른 사용자를 만듭니다. 제대로 작동합니다.

두 응용 프로그램이 동시에 실행 중일 때 문제가 발생합니다. 첫 번째 사이트에 "User1"로 로그인하면 두 번째 사이트의 Context.User.Identity가 "User1"로 등록되어 있지 않은 경우에도 "web1"로 자동 설정됩니다. 한 사이트에서 로그 아웃하고 다른 사이트에서 로그 아웃합니다.

Context.User.Identity가 어떻게 공유되고 있습니까?

코드는 동일합니다 - 나는 확실히 ASP.Net 신원이 저를 도와주세요 너무 작동 방법에 대한 몇 가지 기본 지식을 잃었

public static void SignIn(UserManager manager, ApplicationUser user, bool isPersistent){ 

     IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication; 
     authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 

     var identity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 
     authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
    } 

.

미리 감사드립니다.

+0

우수 질문 아래 우수한 허용 대답. "한 사이트의 ASP.NET ID 로그인이 같은 컴퓨터의 다른 웹 사이트와 공유되는 이유는 무엇입니까?"와 같이 질문 제목을 "question-ish"라는 더 많은 이름으로 바꾸는 것이 좋습니다. (또는 그런 식으로 ...) – Funka

+0

@Funka - 귀하의 제안에 따라 변경된 질문. –

답변

47

서버가 쿠키 인증을 사용하도록 구성된 경우 서버는 사용자에 대한 암호화되고 서명 된 클레임이 포함 된 쿠키를 브라우저로 반환합니다.

이 쿠키의 이름은 기본적으로 .AspNet.ApplicationCookie입니다.

이 쿠키는 만료 (기본 14 일 및 만료되기 전까지)되거나 쿠키를 삭제하는 명시 적 로그 아웃에 도달 할 때까지 브라우저에 저장됩니다.

동일한 브라우저 유형의 다른 탭이나 창을 열면 로그인 한 후에 두 웹 사이트 중 하나에 요청을 보낼 때 동일한 쿠키가 전달됩니다.

두 사이트가 동일한 쿠키 이름을 찾도록 구성되어 있으면 동일한 쿠키 이름을 찾기 위해 구성되며 동일한 쿠키 이름을 찾기 위해 구성되며 동일한 쿠키 이름을 찾기 위해 동일한 컴퓨터를 공유하므로 인증 쿠키를 해독 할 수 있습니다. 따라서 서버가 암호화/해독하고 쿠키에 서명하십시오. 쿠키에는 동일한 서버 내의 어느 사이트에 있는지 알려주는 것이 없으므로 웹 애플리케이션 Web1에 저장된 "User1"클레임은 WebApplication2에서 인증 된 것으로 간주됩니다. 들어오는 요청에 유효한 쿠키가 있으면 OWIN 인증 미들웨어는 데이터베이스를 확인하지 않습니다. 쿠키에 제시된 암호화 된 클레임 (사용자 이름, 가능하면 역할 및 기타)을 사용합니다.

두 웹 응용 프로그램에서 CookieName을 다르게 설정하면 동일한 인증 쿠키를 사용하지 않으므로 한 사이트에서 인증 된 사용자는 다른 사이트에서 인증되지 않습니다.

이처럼 Startup.Auth.cs에 CookieName을 설정할 수 있습니다

public partial class Startup 
{ 
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
    public void ConfigureAuth(IAppBuilder app) 
    { 
     // Enable the application to use a cookie to store information for the signed in user 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      CookieName = "MyCookieName", 

     }); 
    } 
} 
+0

이제 절대적인 의미를 갖습니다. 감사! –