::: Zany's Homepage ::: Zany Wiki | 사이트 통합 검색

로그인 하지 않은 사용자도 세션이 생기는 이유.

2018-04-05 10:31:07
HTML사용 | 자동BR태그 | 공백문자허용 | 가운데정렬 | 고정폭글꼴 | 자동URL링크 | 마우스선택
● 원문
○ 질문
I have created a web app that uses Spring Security (3.2) login prompt. 
I run the app in Tomcat 7. I use the Tomcat manager to monitor sessions. 
It is a Vaadin app, using a Vaadin servlet. No JSP pages are used.


1. I have a freshly started Tomcat with a freshly deployed .war.
2. I open a web browser and enter the url for the app and press enter which lands me on the login page of said app.
3. I can see in the Tomcat manager that 1 session has been created. Note that I haven't even tried logging in yet.
4. I close the app browser tab and the browser itself and re-open it (ie. effectively deleting any sessions data) and enter the url again and press enter.
5. I can see in the Tomcat manager that yet another session has been created. There is now a total of 2 sessions. Note that I still haven't even tried logging in.

Is this intended behaviour (prevention of some kind of session fixation attack) or have I simply configured something wrong?
○ 답변
The short version is that login processes that use a login page need to create session to store the target page.

The longer version is that the login process (assuming successful authentication) will be something along these lines:

01. User agent requests /some/secure/page
02. Container checks for authenticated user
03. User not authenticated so container starts login process
04. Container creates a session
05. Container adds target page URL (/some/secure/page) to session
06. Container redirects user to login page
07. User logs in
08. Container validates credentials
09. Container changes ID of session (to prevent session fixation)
10. Container gets target page URL from session
11. Container redirects user to target page
12. User agent requests target page
13. Container checks for authenticated user
14. User is authenticated so container displays requested page

Without the session the container has no way to track which (of the potentially many) pages 
requiring authentication the user asked for and therefore no way to redirect them to the requested page
after authentication completes.

● 번역
○ 질문 요약
사용자가 로그인을 시도 조차 하지 않았는데 왜 세션이 생기죠?
- 브라우저를 닫고 다시 열면 세션이 1개 더 생겨 총 2개가 됩니다.
○ 답변
로그인 프로세스에 관해 간단하게 설명하면,
로그인 페이지는 목적지 페이지(target page)를 저장하기 위해 세션 생성을 필요로 합니다.

로그인 프로세스에 관해 길게 설명하자면... (인증에 성공한다는 전제하에)
아래와 같은 작업들이 일어나게 됩니다.
01. 유저 에이전트가 /some/secure/page 접근을 요청합니다.
02. 컨테이너가 인증(authenticated)된 사용자 인지 체크 합니다.
03. 사용자가 인증되지 않았기 때문에 컨테이너는 로그인 프로세스를 시작합니다.
04. 컨테이너가 세션을 생성합니다.
05. 컨테이너는 세션에 목적지 URL(/some/secure/page)을 추가합니다.
06. 컨테이너는 사용자를 로그인 페이지로 보냅니다(redirects).
07. 사용자가 로그인 합니다.
08. 컨테이너가 자격(credentials)을 검증 합니다.
09. 컨테이너는 세션ID 를 변경합니다. (to prevent session fixation)
10. 컨테이너가 세션으로부터 목적지 페이지 URL 을 가져옵니다. (/some/secure/page 가 되겠죠?)
11. 컨테이너가 사용자를 목적지 페이지로 보냅니다(redirects).
12. 유저 에이전트가 목적지 페이지를 요청합니다.
13. 컨테이너가 인증된(authenticated) 사용자인지 체크 합니다.
14. 사용자가 인증되었기 때문에 컨테이너는 요청한 페이지를 보여줍니다.
세션이 없으면 컨테이너는 인증된 사용자가 요청한 페이지들을 추적할 길이 없어지게 됩니다. 
(세션에 목적지 URL 이 add 되고 get 되게 되므로)
따라서 사용자가 인증을 마친 후 redirect 할 방법이 없게 됩니다.

 게시판 글 목록
No Subject Poster Hits Posted
14439 helix 1407 2019-12-06 00:56:59
14437 helix 2323 2019-10-01 10:57:58
14435 helix 1359 2019-07-03 16:50:25
14282 helix 1852 2018-04-05 10:47:10
helix 1739 2018-04-05 10:31:07
14237 helix 6128 2017-12-01 15:18:39
14236 helix 5864 2017-12-01 14:49:07
14232 helix 4735 2017-11-22 17:56:06
14230 helix 1330 2017-11-21 17:26:51
14229 helix 2583 2017-11-20 09:48:13
  Copyright ⓒ 2002-2010 Zany's Programming Lab. All Rights Not Reserved.
temporary This Page loads on 0.016 Secs