inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

276

오세창

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

패키지 구분에 대해 궁금한게 있습니다

0

7

1

코드 자료

0

24

2

받을 수도 없는 수업 자료들이 올라와 있고, 이것들 때문에 강의를 수료할 수도 없습니다.

0

14

1

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

28

2

servlet과 container에 대한 질문입니다

0

24

1

RepositoryTest의 패키지 위치가 domain인 이유

0

30

2

도메인 모델에서 관계와 규칙을 구분하는 방법

0

37

2

UserService, CertificationService 책임 분리 기준 질문

0

26

1

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

32

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

50

2

Json 요청 처리

1

33

2

로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.

0

27

2

Build 관련 문제 (테스트 관련 문제)

0

43

2

수강 연장

0

38

2

job, step execution 관련 질문 드립니다.

0

31

2

이미지 업로드와 db 트랜잭션 묶는법

0

42

1

sdk 설정 오류

0

49

2

수강연장부탁드려도될까요..

0

42

2

Orchestration SAGA 패턴 보상에 대한 질문입니다.

0

51

2

[건의][6장][작전1] deprecated 메소드

1

48

2

[예제][3장][작전2] windows 에서 마지막 예제

0

39

1

NaverBookRepository.class 의 위치에 따른 모듈간의 의존성에 대해 질문드립니다.

1

31

2

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

52

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

30

1