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

에욱님의 프로필 이미지
에욱

작성한 질문수

스프링 시큐리티 OAuth2

OAuth 2.0 AuthorizationServer Endpoint - 사용자 인증단계

인증을 세션이 아닌 jwt로 할 경우 질문입니다.

작성

·

72

0

현재 oauth2Login api를 사용해서 사용자 로그인 인증에 성공하면 인증객체가 세션에 저장되고, 이후 인가서버에 code 요청시 OAuth2AuthorizationEndpointFilter 에서도 securityContext에 저장돼있는 인증객체로 인해 인증성공으로 판단후 code를 발급합니다. 근데 세션 기반이 아닌, jwt 토큰을 받아서 검증후 인증을 처리하는 로직이라면 jwt 토큰을 검증하는 필터인 resource Server api의 필터가 OAuth2AuthorizationEndpointFilter 보다 뒤에 있기 때문에 인증객체가 없어서 코드발급을 안해줄텐데 이럴땐 어떻게 해야하나요? jwt토큰을 검증하고 인증객체를 만드는 필터를 OAuth2AuthorizationEndpointFilter 앞에 만든다고 쳐도 그러면 resource Server api의 필터와 똑같이 동작하는 필터가 생기는건데 좋은 방법인것 같진 않습니다. 어떻게 해야 하나요?

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

기본적으로 스프링 시큐리티는 세션을 기반으로 코드가 작성되어 있습니다.

세션 대신 jwt 토큰을 활용할 경우에는 OAuth2 프레임워크를 그대로 사용하기가 어려울 수 있습니다.

즉 커스텀한 필터나 클래스를 직접 구현해야 합니다.

이 부분은 여러 설계적 관점에서 고민해서 구현해야 하는 부분이고 최대한 시큐리티에서 벗어나지 않고 동작할 수 있도록 구현해야 할 것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 에욱님께서 질문하신 내용은 OAuth2와 JWT를 활용한 인증 및 인가 과정에서의 기능 배치에 대한 문제로 보여집니다.

현재 oauth2Login API를 통해 인증이 이루어지는 후, 세션을 사용하지 않고 JWT를 통해 인증을 유지하려는 상황이네요. 이 경우, 서버에서의 JWT 검증 프로세스와 OAuth 관련 필터의 순서가 중요한 문제로 보입니다.

  1. JWT 검증 필터 배치: JWT를 통해 토큰을 검증하는 필터는 항상 OAuth2AuthorizationEndpointFilter 등의 필터보다 앞서 있어야 합니다. 이는 JWT를 통해 인증 정보를 SecurityContext에 저장한 후 해당 정보를 기반으로 다른 필터들이 작업을 수행할 수 있도록 합니다.

  2. JWT 기반 인증 흐름 설정: 사용자가 로그인을 시도할 때, 서버가 JWT를 발급합니다. 이후 모든 요청은 이 JWT를 사용하게 됩니다. OAuth2AuthorizationEndpointFilter 및 다른 관련 필터들은 요청이 들어오기 전에 JWT 검증을 통해 SecurityContext가 설정되어 있어야 정상적으로 작동할 것입니다.

  3. Resource Server와 Authorization Server의 구조: 만약 Resource Server와 Authorization Server를 별도로 운영하는 경우, 각각의 서버에서 JWT 토큰의 검증이 어떻게 이루어지는지를 명확히 정의하고, 각각의 서버 간 호출 시에도 JWT를 통해 인증이 올바르게 이루어지는지 확인해야 합니다.

이와 관련된 내용을 더 깊게 이해하고 싶으시면, 기본적인 서버 설정부터 JWT의 발급과 검증 과정, Security Filter Chain의 순서 등을 다시 한 번 검토할 필요가 있습니다. 관련하여 아래의 자료도 참조하시길 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

에욱님의 프로필 이미지
에욱

작성한 질문수

질문하기