인프런 커뮤니티 질문&답변

모코코님의 프로필 이미지

작성한 질문수

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

24.05.03 22:43 작성

·

154

·

수정됨

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())
);

 

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

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

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 04. 22:45

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

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

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

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

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

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