일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- github actions
- github
- 14889
- Value annotation
- tailsamplingprocessor
- 17144
- openTelemetry
- 14891
- Spring
- SpringCloudConfig
- RestControllerAdvice
- Session Registry
- 백준
- Spring Security
- self-hosted runners
- ConcurrentSessionControlAuthenticationStrategy
- HttpRequestMethodNotSupportedException
- AWS
- RequiredArgsConstructor
- 자바
- 1916
- amazon-ecr-login
- 1260
- Session Fixation Protection
- Java
- aws-mysql-jdbc
- 프로그래머스
- 12100
- 15686
- Spring Authorization Server
- Today
- Total
한울이
[SPRING] Spring Authorization Server Default Session Registry 본문
[SPRING] Spring Authorization Server Default Session Registry
gksdnf050 2023. 7. 31. 15:121. 문제상황
- Spring authorization server 를 사용해서 oauth2 provider 서버를 구성한 후 access token 을 발급 받아 봤는데
local 과 개발환경에서 oidc token 의 claim 값이 다른 현상 발견 (sid, auth_time)
2. debugging
- 목적: local 에서 테스트 했을 땐 oidc token claim에 sid, auth_time 값이 있고 개발환경 서버에서 oidc token 을 발급 받았을 땐 왜 claim 값에 sid, auth_time 값이 없는지 ?
- OAuth2AuthorizationCodeAuthenticationProvider
- JwtGenerator
Spring authorization server 에서는 sessionInformation 값이 있으면 sid, auth_time 값을 oidc claim에 넣어서 만들어주고 있음.
- 제약사항
1. 개발환경 서버에 원격 디버깅을 할 수 없는 상황
2. library 에서 발생한 것이라 log 를 원하는 곳에 남길 수 없는 상황
- 첫번째 의심
같은 코드에서 환경에 따라 다른 결과 값이 나오고 있어서 코드가 아닌 인프라 (db, redis 등등...) 문제라고 생각했음
따라서 local 과 개발환경의 db 테이블을 모두 비교 했음 -> 이상 없음
개발환경 인프라를 local 에서 붙어서 테스트 -> local 인프라와 테스트 할 때와 같은 결과값이 나옴
그러던 중 개발환경에서 간헐적으로 jwt claim에 sid, auth_time 값이 포함된 oidc token 이 발급되는 걸 확인
- 두번째 의심
개발환경에서 간헐적으로 local 과 같은 현상이 일어난 다는 것을 보고 깨달은 것이 local 은 단일 서버이고
개발환경은 pod 가 여러개가 떠있는 상황(쿠버네티스 사용중) 인걸 인지함
-> 즉 session clustering 이 이뤄지지 않고 있다고 생각함
-> spring authorization server 에서 사용하고 있는 session registry 를 확인해봄
- OAuth2AuthorizationServerConfigurer
SessionRegistry bean 이 없다면 기본적으로 SessionRegistryImpl (server의 memory 에 저장함) 이라는 구현체를 사용함
- 해결
clustered 환경에서 spring session 으로부터 session 정보를 가져오도록 SpringSessionBackedSessionRegistry bean 을 등록함
참조
https://spring.io/projects/spring-boot
Spring Boot
spring.io
'PROGRAMMING' 카테고리의 다른 글
[GITHUB ACTIONS] github actions ec2 self hosted runner no basic auth credentials Error (0) | 2024.03.16 |
---|---|
[SPRING] Spring security ChangeSessionIdAuthenticationStrategy 이슈 (1) | 2023.10.13 |
[SPRING] ConcurrentSessionControlAuthenticationStrategy session expire 실패 (0) | 2023.03.26 |
[SPRING] Session (0) | 2023.03.13 |
[SPRING] k8s cronjob + Spring Batch (0) | 2022.08.21 |