inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

oAuth2.0 로그인 후 쿠키 생성 질문

282

오세창

작성한 질문수 8

0

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    // CSRF 설정
    http.csrf((csrf) -> csrf.disable());
    

    http.authorizeHttpRequests((authorizeHttpRequests) ->
            authorizeHttpRequests
                    .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                    .requestMatchers("/").permitAll()
                    .anyRequest().authenticated()
    );

    http.oauth2Login((oauth2Login) ->
            oauth2Login
                    .loginPage("/login")
                    .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint
                            .userService(principalOauth2UserService))
                    .defaultSuccessUrl("/", true)
                    .permitAll()
    );


    return http.build();
}

 

현재 위와 같이 우선 oAuth2.0 인증 기반을 구현했습니다.

이 상태에서 로그인을 하면

웹 브라우저 쿠키에

JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C

 

형식의 값이 삽입됩니다.

 

이후 test 용으로 작성한 "/user" 경로로 접근을 시도하면 접근이 가능하게 됩니다.

만약 쿠키를 지우고 "/user" 로 접근하면 "/" 로 튕기고, 다시 로그인을 해야합니다.

 

여기서 궁금한 게 저는 별도의 쿠키 생성 로직을 작성하지 않았는데

 

oAuth 로그인 후

JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C

이 녀석이 어떻게 생성된 것인지 궁금하며,

어떻게 저 녀석으로 인증이 필요한 자원에 접근이 가능한 것인지 원리가 궁금합니다.

검색해보니 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키라고 하는데,

이게 그냥 인덱스 페이지에 최초 접속할 때도 생기더라구요 ?

oAuth 로 로그인하면 값이 바뀌긴 하지만,,,

 

구글링 해보면 세션 만들고 쿠키 만들고 하던데, 그럴 필요가 없는 거 아닌가요 ?

+ 추가질문

http.sessionManagement(
        (sessionManagement) -> sessionManagement
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
                .maximumSessions(1)    // 최대 허용 가능 세션 수
                .maxSessionsPreventsLogin(false)    // 멀티로그인 차단, false : 기존 세션 만료(default)
                .sessionRegistry(sessionRegistry())
);

 

이와 같이 또 세션 정책을 세웠는데,

네이버 웨일로 로그인하고, 크롬으로 로그인 하면 둘 다 로그인 상태가 유지되는데 왜 이러는 걸까요...

spring security mvc server spring-security

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

모코코님, 귀하의 질문에 대해 답변드리겠습니다.

JSESSIONID 쿠키는 세션을 식별하기 위한 톰캣(또는 다른 서블릿 컨테이너)에서 생성되는 쿠키입니다. 사용자가 웹 애플리케이션에 접속할 때, 세션을 생성하고 이 세션을 구분하기 위해 JSESSIONID 쿠키가 발급됩니다. 이는 사용자가 브라우저를 통해 서버에 접속하는 순간부터 발생합니다.

oAuth2.0을 통한 로그인 과정에서도 마찬가지로 세션을 생성하고 JSESSIONID 쿠키를 통해 세션을 관리합니다. 로그인이 성공하면 서버는 해당 사용자의 세션 정보(인증된 사용자의 정보)를 서버에 저장하고, 사용자의 브라우저에는 해당 세션을 식별할 수 있는 JSESSIONID 쿠키를 발급합니다. 이렇게 발급된 쿠키를 통해 서버는 요청이 올 때마다 해당 사용자가 인증된 사용자인지 식별할 수 있습니다.

따라서, 별도의 쿠키 생성 로직을 작성하지 않아도, 세션 기반의 인증 메커니즘에서는 이러한 과정을 통해 자동으로 쿠키가 생성되고 관리됩니다.

추가 질문에 대한 답변입니다. maximumSessions(1) 설정은 해당 세션에 대해 최대 한 명의 사용자만 로그인을 허용한다는 설정입니다. 하지만 이 설정은 동일한 브라우저 또는 동일한 세션 내에서만 적용됩니다. 네이버 웨일과 크롬 같이 다른 브라우저로 접속하면 서로 다른 세션으로 인식하기 때문에 각각 로그인 상태를 유지할 수 있습니다. 각 브라우저는 독립적인 세션을 가지고 있으므로, 하나의 브라우저에서 로그인 상태가 유지되는 것과는 별개로 다른 브라우저에서도 로그인 할 수 있는 것입니다.

To-Do App

0

5

0

SingletonService가 JVM이 뜰 때 생성되는게 맞나요?

0

6

1

강의를 다 듣고난 후

0

25

2

임포트 오류

0

22

2

답을언제쯤받아볼수있나요

0

47

2

형 책 어떻게 받아?

1

51

1

@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.

0

29

2

mvc 패턴 - 적용 강의에서 회원가입할 때 redirect가 아닌 forward인 이유가 궁금합니다.

0

27

1

프로젝트가 없어요..

0

55

2

JpaCursorItemReader의 정렬 조건 부재의 영향

1

41

2

changeTeam 메서드 질문

0

32

1

"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션

1

48

2

테스트 관련 질문!

0

49

2

handleBindException 의 기대의도가 방향이 맞는지 궁금합니다.

0

39

2

SpringBoot 4.0.6 버전에서 PackageLogTracePostProcessor exception

0

78

3

인텔리제이 오류

0

49

1

프로젝트 의존 관계

0

51

2

application.properties가 적용되지 않아요

1

65

3

새 프로젝트 속 제너레이터에 SpringBoot가 없습니다.

0

52

2

Readiness Probe 관련 질문드립니다.

0

38

1

섹션3. 11 회원객체 다이어그램

0

36

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

35

1

강의 연장 요청

0

44

2

설정 정보 없이 임베디드 데이터베이스 생성

0

37

1