작성
·
563
0
요즘 웹을 구성한다고 하면, react 진영의 Next.js 라는 서버사이드 렌더링 서버를 띄우는 경우가 많은걸로 아는데요.
redirect uri 를 Nextjs 서버로 보내고, Nextjs 가 code를 스프링 서버로 다시 보내는 경우 어떻게 해야하나요?
- code 요청에 들어가는 redirect uri 를, 프론트 서버로 지정함.
- 나중에 access token 요청시 프론트 서버로 지정함.
이게 맞나요?
이 방향이 아니라, redirect uri를 스프링 서버로 받아버리면,
스프링 서버가 나중에 프론트 서버로 리다이렉트를 시킬수도 있을거 같은데요.
두 경우 모두, 스프링 서버쪽에서 프론트의 uri를 알아야하는 문제가 있는거 같은데, 다른 방식은 없나요? (스프링 서버쪽에 커스텀 헤더로, 프론트 서버가 알려주는 방식도 가능 할거같긴한데, 좋은 방법인지 모르겠네요)
답변 2
1
네
이 부분은 스프링 시큐리티에서 code 를 받아오거나 token 으로 교환하는 과정이 모두 필터에 의해 처리되기 때문에 만약 프런트 서버에서 리다이렉트 응답을 받을 경우 스프링 시큐리티의 필터를 어떻게 호출할 수 있을 것인지를 생각해 봐야 합니다
그래서 일반적으로는 스프링 시큐리티가 실행되는 서버에서 인가서버와 통신을 하게 하고 최종 결과값을 프론트 서바로 다시 전달하는 식으로 하게 됩니다
구체적인 구현을 제시해 드리기는 어렵지만 중요한 것은 서버를 어떤식으로 구성을 하든 스프링 시큐리티의 OAuth2 흐름에 맞추어 구현을 할 수 있어야 합니다
프론트 서버에서 code를 받는다면 이것을 다시 token 으로 교환하기 위해 인가서버로 통신을 해야 하는데 이 역할을 하는 시큐리티의 필터를 활용하기 위해 서버간 어떤식으로 구성을 할 것인지 설계 및 방향을 정하고 거기에 맞게 구현을 해야 합니다
어떤 식으로든 가능은 하지만 경우에 따라 예상보다 복잡한 커스트마이징이 될 수 도 있습니다
0
안녕하세요, 인프런 AI 인턴입니다.
비오님, OAuth2를 사용할 때 redirect URI 문제에 대해 질문해 주셨군요.
Next.js 서버가 중간에 있을 때 OAuth2 인증 흐름에서는 일반적으로 프론트엔드 서버(예: Next.js)가 OAuth2 인증 과정에서 ‘리다이렉션 엔드포인트’로 사용됩니다. 사용자 인증 후 인증 서버는 이 리다이렉션 URI로 authorization code를 보내게 되며, 프론트엔드 서버는 이 코드를 받아 백엔드 서버(스프링 서버)에 전달합니다.
스프링 서버로 redirect uri를 직접 지정하는 경우, 스프링 서버는 인증 과정을 마친 뒤 프론트엔드 서버로 사용자를 리다이렉트할 수 있습니다. 이 과정에서도 프론트엔드의 URI는 스프링 서버에 알려져 있어야 합니다.
이때 스프링 서버쪽에서 프론트엔드의 uri를 알아야 한다는 문제가 발생할 수 있으며, 어떻게 URI 정보를 전달할지는 설계에 따라 달라집니다. 커스텀 헤더를 통해 프론트엔드 서버의 URI를 스프링 서버에 알리는 방식도 가능할 수 있습니다. 하지만 보안적으로 민감한 정보를 다루기 때문에 이러한 전송 방식을 사용할 때 주의해야 할 점이 많습니다.
이러한 방식의 구현에서는 참고할 수 있도록 제공된 확장 가능한 ‘How-to’ 가이드가 유용할 수 있습니다. 스프링 부트 관련 문제에 대한 더 자세한 정보를 원하신다면 Spring Boot Reference Documentation의 Security 섹션을 참조하실 수 있습니다.
이 문서에서는 스프링 부트를 사용할 때 발생할 수 있는 보안 관련 질문들에 답변하고 있으므로, OAuth2와 리다이렉션 관련 설정에 도움이 될 것입니다.