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

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

게시판
JAVA
작성자
Zany
작성일
2018-04-05 10:31:07
읽은수
191
평점
   
표시옵션
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.

Now...

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 할 방법이 없게 됩니다.

게시물이 도움이 되셨으면 +1 을 눌러주세요~
 게시판 글 목록
No Subject Poster Hits Posted
14282 Zany 168 2018-04-05 10:47:10
Zany 191 2018-04-05 10:31:07
14237 Zany 570 2017-12-01 15:18:39
14236 Zany 440 2017-12-01 14:49:07
14232 Zany 618 2017-11-22 17:56:06
14230 Zany 274 2017-11-21 17:26:51
14229 Zany 414 2017-11-20 09:48:13
댓글 달기 - 이 글이 도움이 되었거나 흥미로우셨다면, 댓글을 남겨주세요.(^^)(oo)(__)
작성자
                       
 
zany.kr
  Copyright ⓒ 2002-2010 Zany's Programming Lab. All Rights Not Reserved.
temporary This Page loads on 0.109 Secs