inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

294

오세창

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

HelloSpringApplication.java 클래스 실행 오류

0

7

1

강의 자료

0

11

1

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

17

1

네이버 API | '검색 - 책' API 제공 중단

0

38

2

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

45

2

장치 의존성과 CSR

0

35

1

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

30

1

[영한님]Spring Boot 및 프로젝트 생성

0

53

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

54

3

수업 및 교재 관련 문의

0

41

0

인증심사 관련된 법령

0

33

2

강의 요청 문의

0

39

2

클로드코드 명령어-대화&세션관리 수업 자료

0

42

1

스크린샷 저장위치는 어디 인가요?

-1

50

2

강의가 개정안이 반영 된건지 궁금합니다.

0

53

1

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

66

2

자료 한번에 다운받기

0

33

1

국내대리인의 지정에 관한 강의가 없습니다.

0

57

2

스프링 빈 등록 방법 2가지 다 알아야하는 이유

0

59

1

mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,

0

27

1

설계 트레이드 오프 링크 접속 안됨

0

85

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

46

1

깃허브주소 궁금합니다.

0

36

2

mariaDB 설정

0

33

1